diff --git a/.vpython3 b/.vpython3 index add35a7..f6edaa8 100644 --- a/.vpython3 +++ b/.vpython3
@@ -189,7 +189,7 @@ > wheel: < name: "infra/python/wheels/python-dateutil-py2_py3" - version: "version:2.8.1" + version: "version:2.9.0" > # Used by WPT importer @@ -239,7 +239,7 @@ > wheel: < name: "infra/python/wheels/google-cloud-core-py3" - version: "version:2.3.3" + version: "version:2.4.3" > wheel: < name: "infra/python/wheels/grpcio-status-py3" @@ -398,7 +398,7 @@ wheel: < name: "infra/python/wheels/packaging-py3" - version: "version:21.3" + version: "version:25.0" > wheel: < @@ -658,7 +658,7 @@ > wheel: < name: "infra/python/wheels/google-cloud-bigquery-py3" - version: "version:3.23.1" + version: "version:3.38.0" > wheel: < name: "infra/python/wheels/google-cloud-bigquery-storage-py3"
diff --git a/DEPS b/DEPS index 986d8844..b47480f 100644 --- a/DEPS +++ b/DEPS
@@ -308,19 +308,19 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'src_internal_revision': '62509a008e80f28517d610ec8f9d3750ca81c911', + 'src_internal_revision': 'd448ebcd4132c53725dfe2c6cde9b49eeda160bf', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'ca906091e1997742fab665d567a448c7639bcac6', + 'skia_revision': 'f3ddc700abc7e8711f7942af73c22b867dfde432', # 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': '998bb7fdf2099be82eb98522c3170e2039c2c46a', + 'v8_revision': 'a4e571c9d0bfe4001e9ef4378c5271fb4b1f1ab8', # 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': '3a0ebc752488461c12fe63cfd2e067321a1f266f', + 'angle_revision': 'cf53f379f81a8c1b43ccd8e087c6b848007f21e6', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -332,7 +332,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. - 'boringssl_revision': '9b86817b23dfbf6e0837df8862a4112c51b4ea3b', + 'boringssl_revision': '61ca3f2493360393f534d9775b0e80fb39fd2153', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Fuchsia sdk # and whatever else without interference from each other. @@ -380,7 +380,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling CrossBench # and whatever else without interference from each other. - 'crossbench_revision': '1572106a98d0970b6ae54e2ac8b1ae00ec9437e4', + 'crossbench_revision': '6945a4d9f99a39970cd6e10e5794b675cf092fa6', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling CrossBench # and whatever else without interference from each other. @@ -400,7 +400,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': 'e5c11667c31285d64f215bfc2cd4affce30a97e8', + 'devtools_frontend_revision': '51f0ad70911e7688153c37f590cb12a8f12ec4d0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -424,7 +424,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': 'e05063e54542a646fd297a3e8d8c9f2faf8685e5', + 'dawn_revision': '026bc053ee69caf59c9767756415560327cd4169', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -1206,7 +1206,7 @@ 'packages': [ { 'package': 'chromium/chrome/android/orderfiles/arm64', - 'version': 'BsDyDetarDtir9ITmazCnn2bG_CpglAT5gx0mTBbqtgC', + 'version': '_HNjrH0HC2lMhRhjWdlHUFP5JUc0HgSQeVYzAlx7UAAC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1228,7 +1228,7 @@ 'packages': [ { 'package': 'chromium/android_webview/tools/orderfiles/arm64', - 'version': 'z7mQztbjrSoOPIIyLp9BJLHmF9oTUG7Wu4JIgn6QZ5AC', + 'version': '36-SSV518AbgsZLs9vXAtqfxxx3vX-qt-5C5rRv5XjYC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1624,7 +1624,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - 'ca42da3e3a185a97996945b6b404a00823d0183c', + 'd6c606dacae7862791a9ac6e7abbf2d1b92323fa', 'condition': 'checkout_android and checkout_src_internal', }, @@ -1724,7 +1724,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'FThFnYvPgNHpefOY5LD8ZGjYzMze-wQJ-i_AjF3OcsgC', + 'version': 'CSVKeMNJxDHY89IxXrbDSEHovzyDC2EzjuYUxgqZipUC', }, ], 'condition': 'checkout_android and non_git_source', @@ -2060,7 +2060,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' + '@' + '565cc4ee354f0c394d0d83301e6658b1fc979c99', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'b8f203014fd4a509eed94dfca84934136f5d26e5', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -2584,7 +2584,7 @@ Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '652bdb7719f30b52b08e506645a7322ff1b2cc6f', 'src/third_party/openscreen/src': - Var('chromium_git') + '/openscreen' + '@' + '3fbbb548aa18f2fb2b5c4453377cafe48f782bcc', + Var('chromium_git') + '/openscreen' + '@' + '39fa0ff22414b59df16a6d8f032b2595c73c6d59', 'src/third_party/openxr/src': { 'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '75c53b6e853dc12c7b3c771edc9c9c841b15faaa', @@ -2610,7 +2610,7 @@ Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('chromium_git') + '/external/github.com/google/perfetto.git' + '@' + '10ac9fc0b09895e39f29d6ef444d496c510856d1', + Var('chromium_git') + '/external/github.com/google/perfetto.git' + '@' + '60767b0bac8bea553a5cb85a5a79a0a36ee52547', 'src/base/tracing/test/data': { 'bucket': 'perfetto', @@ -2929,16 +2929,16 @@ 'dep_type': 'cipd', }, - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@14e2627bfd234012a8a4a24f150b84af390d1b3a', - 'src/third_party/glslang/src': '{chromium_git}/external/github.com/KhronosGroup/glslang@7099c123729e02f81d70559e79ee4360096fdfe5', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@e66c42f2bb26e9c388dd30c6f10eba8d2cb9fd3b', + 'src/third_party/glslang/src': '{chromium_git}/external/github.com/KhronosGroup/glslang@14be844d5effc487de8c15d0507d65ce3d19c994', '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@b824a462d4256d720bebb40e78b9eb8f78bbb305', - 'src/third_party/spirv-tools/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Tools@2c1fd8974f5d9c04629fd51bd4468fce5fed104d', + 'src/third_party/spirv-tools/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Tools@fb7471844504abb16b732dc4fc0837119a32ec24', 'src/third_party/vulkan-headers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Headers@39c50d7bf094853a1f9a2e8a7e3377d425ae0c6a', 'src/third_party/vulkan-loader/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Loader@8b5249c247d21edc96cac28d166005038fe8e286', 'src/third_party/vulkan-tools/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Tools@0a1fb7e8cb346f69862e4f12c1d7b09d23e2f84c', 'src/third_party/vulkan-utility-libraries/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Utility-Libraries@3249c4eedf225c113c6a341b0dc08d3681716895', - 'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@9c7428d35816443597f9e66035774ab7c6da2cd6', + 'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@b1bf1caabfaef4eebc15ee00c6ee952eaeeb12d6', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'cb0597213b0fcb999caa9ed08c2f88dc45eb7d50', @@ -2981,7 +2981,7 @@ Var('chromium_git') + '/webpagereplay.git' + '@' + Var('webpagereplay_revision'), 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'd3dc33415dba12a7b26bae4b667970468fcb256b', + Var('webrtc_git') + '/src.git' + '@' + '59391e5e8ae6c4da9aa464d199d57e4a62a7d961', # 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. @@ -3691,7 +3691,7 @@ 'src/components/optimization_guide/internal': { 'url': Var('chrome_git') + '/chrome/components/optimization_guide.git' + '@' + - '41ab339735f8f9a9f8dad87d3d81cfd89ead6212', + 'b54a9872b4a49c01ed1f93011dfd96ad67803be7', 'condition': 'checkout_src_internal', }, @@ -3763,7 +3763,7 @@ 'src/ios_internal': { 'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' + - '239ab09d80330295888bb4697c92aeba6f8b92a1', + 'f357f16bf16badcca979a7e0165fac286835dd5e', 'condition': 'checkout_ios and checkout_src_internal', },
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index c13b0ce..783750d 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -2375,8 +2375,8 @@ 'chrome/android/monochrome/scripts/monochrome_python_tests.pydeps', 'chrome/test/chromedriver/log_replay/client_replay_unittest.pydeps', 'chrome/test/chromedriver/test/run_py_tests.pydeps', + 'chrome/test/media/performance/openscreen_cast_performance_test.pydeps', 'chrome/test/media/performance/videostack_performance_test.pydeps', - 'chrome/test/media_router/performance/openscreen_cast_performance_test.pydeps', 'chromecast/resource_sizes/chromecast_resource_sizes.pydeps', 'components/cronet/tools/check_combined_proguard_file.pydeps', 'components/cronet/tools/generate_proguard_file.pydeps', @@ -3892,45 +3892,6 @@ return [] -def CheckForAnonymousVariables(input_api, output_api): - """These types are all expected to hold locks while in scope and - so should never be anonymous (which causes them to be immediately - destroyed).""" - they_who_must_be_named = [ - 'base::AutoLock', - 'base::AutoUnlock', - 'SkAutoBlitterChoose', - 'SkAutoCanvasRestore', - 'SkAutoDescriptor', - 'SkAutoHDC', - 'SkAutoMalloc', - 'SkAutoMaskFreeImage', - 'SkAutoRasterClipValidate', - ] - anonymous = r'(%s)\s*[({]' % '|'.join(they_who_must_be_named) - # bad: base::AutoLock(lock.get()); - # not bad: base::AutoLock lock(lock.get()); - bad_pattern = input_api.re.compile(anonymous) - # good: new base::AutoLock(lock.get()) - good_pattern = input_api.re.compile(r'\bnew\s*' + anonymous) - errors = [] - - for f in input_api.AffectedFiles(): - if not f.LocalPath().endswith(('.cc', '.h', '.inl', '.m', '.mm')): - continue - for linenum, line in f.ChangedContents(): - if bad_pattern.search(line) and not good_pattern.search(line): - errors.append('%s:%d' % (f.LocalPath(), linenum)) - - if errors: - return [ - output_api.PresubmitError( - 'These lines create anonymous variables that need to be named:', - items=errors) - ] - return [] - - def CheckUniquePtrOnUpload(input_api, output_api): # Returns whether |template_str| is of the form <T, U...> for some types T # and U, or is invalid due to mismatched angle bracket pairs. Assumes that
diff --git a/android_webview/browser/BUILD.gn b/android_webview/browser/BUILD.gn index fb8dd28..26c9fbc6 100644 --- a/android_webview/browser/BUILD.gn +++ b/android_webview/browser/BUILD.gn
@@ -175,8 +175,6 @@ "network_service/net_helpers.h", "page_load_metrics/aw_gws_page_load_metrics_observer.cc", "page_load_metrics/aw_gws_page_load_metrics_observer.h", - "page_load_metrics/aw_page_load_metrics_memory_tracker_factory.cc", - "page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h", "page_load_metrics/aw_page_load_metrics_provider.cc", "page_load_metrics/aw_page_load_metrics_provider.h", "page_load_metrics/aw_web_performance_metrics_observer.cc",
diff --git a/android_webview/browser/gfx/overlay_processor_webview.cc b/android_webview/browser/gfx/overlay_processor_webview.cc index df8daee..1caf320c 100644 --- a/android_webview/browser/gfx/overlay_processor_webview.cc +++ b/android_webview/browser/gfx/overlay_processor_webview.cc
@@ -994,10 +994,9 @@ auto* texture_quad = viz::TextureDrawQuad::MaterialCast(quad); DCHECK(texture_quad->is_video_frame); - auto uv_rect = gfx::BoundingRect(texture_quad->uv_top_left, - texture_quad->uv_bottom_right); - auto new_resource_id = pass.draw_quads().front().remapped_resource_id; + auto uv_rect = texture_quad->GetNormalizedTexCoords( + resource_provider_->GetResourceBackedSize(new_resource_id)); if (resource_provider_->IsOverlayCandidate(new_resource_id)) { UpdateOverlayResource(frame_sink_id, new_resource_id, uv_rect); buffer_updated = true;
diff --git a/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.cc b/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.cc deleted file mode 100644 index 78d8e80..0000000 --- a/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.cc +++ /dev/null
@@ -1,50 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h" - -#include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" -#include "components/page_load_metrics/browser/features.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" - -namespace android_webview { - -page_load_metrics::PageLoadMetricsMemoryTracker* -AwPageLoadMetricsMemoryTrackerFactory::GetForBrowserContext( - content::BrowserContext* context) { - return static_cast<page_load_metrics::PageLoadMetricsMemoryTracker*>( - GetInstance()->GetServiceForBrowserContext(context, true)); -} - -AwPageLoadMetricsMemoryTrackerFactory* -AwPageLoadMetricsMemoryTrackerFactory::GetInstance() { - return base::Singleton<AwPageLoadMetricsMemoryTrackerFactory>::get(); -} - -AwPageLoadMetricsMemoryTrackerFactory::AwPageLoadMetricsMemoryTrackerFactory() - : BrowserContextKeyedServiceFactory( - "PageLoadMetricsMemoryTracker", - BrowserContextDependencyManager::GetInstance()) {} - -bool AwPageLoadMetricsMemoryTrackerFactory::ServiceIsCreatedWithBrowserContext() - const { - return base::FeatureList::IsEnabled( - page_load_metrics::features::kV8PerFrameMemoryMonitoring); -} - -std::unique_ptr<KeyedService> -AwPageLoadMetricsMemoryTrackerFactory::BuildServiceInstanceForBrowserContext( - content::BrowserContext* context) const { - return std::make_unique<page_load_metrics::PageLoadMetricsMemoryTracker>(); -} - -content::BrowserContext* -AwPageLoadMetricsMemoryTrackerFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return context; -} - -} // namespace android_webview
diff --git a/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h b/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h deleted file mode 100644 index c7d5b689..0000000 --- a/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef ANDROID_WEBVIEW_BROWSER_PAGE_LOAD_METRICS_AW_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_ -#define ANDROID_WEBVIEW_BROWSER_PAGE_LOAD_METRICS_AW_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_ - -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" - -namespace page_load_metrics { -class PageLoadMetricsMemoryTracker; -} // namespace page_load_metrics - -namespace android_webview { - -class AwPageLoadMetricsMemoryTrackerFactory - : public BrowserContextKeyedServiceFactory { - public: - static page_load_metrics::PageLoadMetricsMemoryTracker* GetForBrowserContext( - content::BrowserContext* context); - - static AwPageLoadMetricsMemoryTrackerFactory* GetInstance(); - - AwPageLoadMetricsMemoryTrackerFactory(); - - private: - // BrowserContextKeyedServiceFactory: - bool ServiceIsCreatedWithBrowserContext() const override; - - std::unique_ptr<KeyedService> BuildServiceInstanceForBrowserContext( - content::BrowserContext* context) const override; - - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; -}; - -} // namespace android_webview - -#endif // ANDROID_WEBVIEW_BROWSER_PAGE_LOAD_METRICS_AW_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_
diff --git a/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc b/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc index e99bf6b..4d0df33 100644 --- a/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc +++ b/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc
@@ -5,14 +5,12 @@ #include "android_webview/browser/page_load_metrics/page_load_metrics_initialize.h" #include "android_webview/browser/page_load_metrics/aw_gws_page_load_metrics_observer.h" -#include "android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h" #include "android_webview/browser/page_load_metrics/service_level_page_load_metrics_observer.h" #include "components/page_load_metrics/browser/features.h" #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" #include "components/page_load_metrics/browser/observers/abandoned_page_load_metrics_observer.h" #include "components/page_load_metrics/browser/observers/third_party_metrics_observer.h" #include "components/page_load_metrics/browser/page_load_metrics_embedder_base.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" #include "components/page_load_metrics/browser/page_load_tracker.h" #include "components/page_load_metrics/google/browser/gws_abandoned_page_load_metrics_observer.h" @@ -20,10 +18,6 @@ class BrowserContext; } // namespace content -namespace page_load_metrics { -class PageLoadMetricsMemoryTracker; -} // namespace page_load_metrics - namespace android_webview { namespace { @@ -43,9 +37,6 @@ bool IsNoStatePrefetch(content::WebContents* web_contents) override; bool IsExtensionUrl(const GURL& url) override; bool IsNonTabWebUI(const GURL& url) override; - page_load_metrics::PageLoadMetricsMemoryTracker* - GetMemoryTrackerForBrowserContext( - content::BrowserContext* browser_context) override; protected: // page_load_metrics::PageLoadMetricsEmbedderBase: @@ -89,18 +80,6 @@ return false; } -page_load_metrics::PageLoadMetricsMemoryTracker* -PageLoadMetricsEmbedder::GetMemoryTrackerForBrowserContext( - content::BrowserContext* browser_context) { - if (!base::FeatureList::IsEnabled( - page_load_metrics::features::kV8PerFrameMemoryMonitoring)) { - return nullptr; - } - - return AwPageLoadMetricsMemoryTrackerFactory::GetForBrowserContext( - browser_context); -} - } // namespace void InitializePageLoadMetricsForWebContents(
diff --git a/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt index 93a4297..343356e 100644 --- a/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -7197,15 +7197,23 @@ attribute @@toStringTag getter download getter href + getter hreflang getter interestForElement + getter ping + getter referrerPolicy getter rel getter relList getter target + getter type method constructor setter download + setter hreflang setter interestForElement + setter ping + setter referrerPolicy setter rel setter relList + setter type interface SVGAngle attribute @@toStringTag attribute SVG_ANGLETYPE_DEG
diff --git a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt index 4a57685e..0b5d1ee 100644 --- a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt +++ b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
@@ -2406,7 +2406,6 @@ getter computedRole getter containerTiming getter containerTimingIgnore - getter containerTimingNesting getter currentCSSZoom getter currentPatch getter elementTiming @@ -2563,7 +2562,6 @@ setter className setter containerTiming setter containerTimingIgnore - setter containerTimingNesting setter elementTiming setter headingOffset setter headingReset
diff --git a/base/BUILD.gn b/base/BUILD.gn index f820c9e..c975369 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -353,6 +353,7 @@ "logging.cc", "logging.h", "logging/log_severity.h", + "logging/logging_settings.h", "macros/concat.h", "macros/if.h", "macros/is_empty.h",
diff --git a/base/android/linker/ashmem.h b/base/android/linker/ashmem.h index 09168060..1329f0f 100644 --- a/base/android/linker/ashmem.h +++ b/base/android/linker/ashmem.h
@@ -38,20 +38,4 @@ int ashmem_unpin_region(int fd, size_t offset, size_t len); int ashmem_get_size_region(int fd); -#ifndef __ASHMEMIOC /* in case someone included <linux/ashmem.h> too */ - -#define ASHMEM_NAME_LEN 256 - -#define ASHMEM_NAME_DEF "dev/ashmem" - -/* Return values from ASHMEM_PIN: Was the mapping purged while unpinned? */ -#define ASHMEM_NOT_PURGED 0 -#define ASHMEM_WAS_PURGED 1 - -/* Return values from ASHMEM_UNPIN: Is the mapping now pinned or unpinned? */ -#define ASHMEM_IS_UNPINNED 0 -#define ASHMEM_IS_PINNED 1 - -#endif /* ! __ASHMEMIOC */ - #endif // BASE_ANDROID_LINKER_ASHMEM_H_
diff --git a/base/files/file_util_unittest.cc b/base/files/file_util_unittest.cc index e1fac4a..7ae36b81 100644 --- a/base/files/file_util_unittest.cc +++ b/base/files/file_util_unittest.cc
@@ -5110,8 +5110,7 @@ TEST_F(FileUtilTest, CopyFileContentsWithSendfileSeqFile) { // This test verifies the special case where we have a regular file with zero // length that might actually have contents (such as a seq_file). - for (auto* const file : - {"/proc/meminfo", "/proc/self/cmdline", "/proc/self/auxv"}) { + for (auto* const file : {"/proc/meminfo", "/proc/self/cmdline"}) { FilePath proc_file_from(file); File from(proc_file_from, File::FLAG_OPEN | File::FLAG_READ); ASSERT_TRUE(from.IsValid()) << "could not open " << file;
diff --git a/base/fuchsia/fidl_event_handler_unittest.cc b/base/fuchsia/fidl_event_handler_unittest.cc index da963b5..3501638 100644 --- a/base/fuchsia/fidl_event_handler_unittest.cc +++ b/base/fuchsia/fidl_event_handler_unittest.cc
@@ -14,6 +14,7 @@ #include "base/fuchsia/test_component_context_for_process.h" #include "base/fuchsia/test_interface_natural_impl.h" #include "base/fuchsia/test_log_listener_safe.h" +#include "base/logging/logging_settings.h" #include "base/task/thread_pool.h" #include "base/test/bind.h" #include "base/test/scoped_logging_settings.h"
diff --git a/base/fuchsia/fuchsia_logging_unittest.cc b/base/fuchsia/fuchsia_logging_unittest.cc index fde90b08..9df28c9 100644 --- a/base/fuchsia/fuchsia_logging_unittest.cc +++ b/base/fuchsia/fuchsia_logging_unittest.cc
@@ -17,6 +17,7 @@ #include "base/fuchsia/test_component_context_for_process.h" #include "base/fuchsia/test_log_listener_safe.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/test/scoped_logging_settings.h" #include "base/test/task_environment.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/base/i18n/build_utf8_validator_tables.cc b/base/i18n/build_utf8_validator_tables.cc index b4187200..f03756f 100644 --- a/base/i18n/build_utf8_validator_tables.cc +++ b/base/i18n/build_utf8_validator_tables.cc
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <array> - // Create a state machine for validating UTF-8. The algorithm in brief: // 1. Convert the complete unicode range of code points, except for the // surrogate code points, to an ordered array of sequences of bytes in @@ -35,6 +33,7 @@ #include <string.h> #include <algorithm> +#include <array> #include <map> #include <string> #include <vector> @@ -43,6 +42,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/memory/raw_ptr.h" #include "base/numerics/safe_conversions.h" #include "base/strings/stringprintf.h"
diff --git a/base/logging.cc b/base/logging.cc index dd46ccc..1a4944f 100644 --- a/base/logging.cc +++ b/base/logging.cc
@@ -33,6 +33,7 @@ #include "base/debug/task_trace.h" #include "base/functional/callback.h" #include "base/immediate_crash.h" +#include "base/logging/logging_settings.h" #include "base/logging/rust_logger.rs.h" #include "base/no_destructor.h" #include "base/path_service.h"
diff --git a/base/logging.h b/base/logging.h index 440fa5e..2d72f112 100644 --- a/base/logging.h +++ b/base/logging.h
@@ -16,7 +16,6 @@ #include "base/base_export.h" #include "base/compiler_specific.h" #include "base/dcheck_is_on.h" -#include "base/files/file_path.h" #include "base/functional/callback_forward.h" #include "base/logging/log_severity.h" #include "base/strings/utf_ostream_operators.h" @@ -24,8 +23,6 @@ #if BUILDFLAG(IS_CHROMEOS) #include <cstdio> - -#include "base/memory/raw_ptr.h" #endif #if BUILDFLAG(IS_WIN) @@ -179,81 +176,8 @@ namespace logging { -// A bitmask of potential logging destinations. -using LoggingDestination = uint32_t; -// Specifies where logs will be written. Multiple destinations can be specified -// with bitwise OR. -// Unless destination is LOG_NONE, all logs with severity ERROR and above will -// be written to stderr in addition to the specified destination. -// LOG_TO_FILE includes logging to externally-provided file handles. -enum : uint32_t { - LOG_NONE = 0, - LOG_TO_FILE = 1 << 0, - LOG_TO_SYSTEM_DEBUG_LOG = 1 << 1, - LOG_TO_STDERR = 1 << 2, - - LOG_TO_ALL = LOG_TO_FILE | LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR, - -// On Windows, use a file next to the exe. -// On POSIX platforms, where it may not even be possible to locate the -// executable on disk, use stderr. -// On Fuchsia, use the Fuchsia logging service. -#if BUILDFLAG(IS_FUCHSIA) - LOG_DEFAULT = LOG_TO_SYSTEM_DEBUG_LOG, -#elif BUILDFLAG(IS_WIN) - LOG_DEFAULT = LOG_TO_FILE, -#elif BUILDFLAG(IS_POSIX) - LOG_DEFAULT = LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR, -#endif -}; - -// Indicates that the log file should be locked when being written to. -// Unless there is only one single-threaded process that is logging to -// the log file, the file should be locked during writes to make each -// log output atomic. Other writers will block. -// -// All processes writing to the log file must have their locking set for it to -// work properly. Defaults to LOCK_LOG_FILE. -enum LogLockingState { LOCK_LOG_FILE, DONT_LOCK_LOG_FILE }; - -// On startup, should we delete or append to an existing log file (if any)? -// Defaults to APPEND_TO_OLD_LOG_FILE. -enum OldFileDeletionState { DELETE_OLD_LOG_FILE, APPEND_TO_OLD_LOG_FILE }; - -#if BUILDFLAG(IS_CHROMEOS) -// Defines the log message prefix format to use. -// LOG_FORMAT_SYSLOG indicates syslog-like message prefixes. -// LOG_FORMAT_CHROME indicates the normal Chrome format. -enum class BASE_EXPORT LogFormat { LOG_FORMAT_CHROME, LOG_FORMAT_SYSLOG }; -#endif - -struct BASE_EXPORT LoggingSettings { - // Equivalent to logging destination enum, but allows for multiple - // destinations. - uint32_t logging_dest = LOG_DEFAULT; - - // The four settings below have an effect only when LOG_TO_FILE is - // set in |logging_dest|. - base::FilePath::StringType log_file_path; - LogLockingState lock_log = LOCK_LOG_FILE; - OldFileDeletionState delete_old = APPEND_TO_OLD_LOG_FILE; -#if BUILDFLAG(IS_CHROMEOS) - // Contains an optional file that logs should be written to. If present, - // |log_file_path| will be ignored, and the logging system will take ownership - // of the FILE. If there's an error writing to this file, no fallback paths - // will be opened. - raw_ptr<FILE> log_file = nullptr; - // ChromeOS uses the syslog log format by default. - LogFormat log_format = LogFormat::LOG_FORMAT_SYSLOG; -#endif -#if BUILDFLAG(IS_WIN) - // Contains an optional file that logs should be written to. If present, - // `log_file_path` will be ignored, and the logging system will take ownership - // of the HANDLE. If there's an error writing to this file, no fallback paths - // will be opened. - HANDLE log_file = nullptr; -#endif -}; +// See base/logging/logging_settings.h for additional logging settings. +struct LoggingSettings; // Define different names for the BaseInitLoggingImpl() function depending on // whether NDEBUG is defined or not so that we'll fail to link if someone tries
diff --git a/base/logging/logging_settings.h b/base/logging/logging_settings.h new file mode 100644 index 0000000..d902909b --- /dev/null +++ b/base/logging/logging_settings.h
@@ -0,0 +1,101 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_LOGGING_LOGGING_SETTINGS_H_ +#define BASE_LOGGING_LOGGING_SETTINGS_H_ + +#include <stdint.h> + +#include "base/files/file_path.h" +#include "build/build_config.h" + +#if BUILDFLAG(IS_CHROMEOS) +#include "base/memory/raw_ptr.h" +#endif + +#if BUILDFLAG(IS_WIN) +#include "base/win/windows_types.h" +#endif + +namespace logging { + +// A bitmask of potential logging destinations. +using LoggingDestination = uint32_t; +// Specifies where logs will be written. Multiple destinations can be specified +// with bitwise OR. +// Unless destination is LOG_NONE, all logs with severity ERROR and above will +// be written to stderr in addition to the specified destination. +// LOG_TO_FILE includes logging to externally-provided file handles. +enum : uint32_t { + LOG_NONE = 0, + LOG_TO_FILE = 1 << 0, + LOG_TO_SYSTEM_DEBUG_LOG = 1 << 1, + LOG_TO_STDERR = 1 << 2, + + LOG_TO_ALL = LOG_TO_FILE | LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR, + +// On Windows, use a file next to the exe. +// On POSIX platforms, where it may not even be possible to locate the +// executable on disk, use stderr. +// On Fuchsia, use the Fuchsia logging service. +#if BUILDFLAG(IS_FUCHSIA) + LOG_DEFAULT = LOG_TO_SYSTEM_DEBUG_LOG, +#elif BUILDFLAG(IS_WIN) + LOG_DEFAULT = LOG_TO_FILE, +#elif BUILDFLAG(IS_POSIX) + LOG_DEFAULT = LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR, +#endif +}; + +// Indicates that the log file should be locked when being written to. +// Unless there is only one single-threaded process that is logging to +// the log file, the file should be locked during writes to make each +// log output atomic. Other writers will block. +// +// All processes writing to the log file must have their locking set for it to +// work properly. Defaults to LOCK_LOG_FILE. +enum LogLockingState { LOCK_LOG_FILE, DONT_LOCK_LOG_FILE }; + +// On startup, should we delete or append to an existing log file (if any)? +// Defaults to APPEND_TO_OLD_LOG_FILE. +enum OldFileDeletionState { DELETE_OLD_LOG_FILE, APPEND_TO_OLD_LOG_FILE }; + +#if BUILDFLAG(IS_CHROMEOS) +// Defines the log message prefix format to use. +// LOG_FORMAT_SYSLOG indicates syslog-like message prefixes. +// LOG_FORMAT_CHROME indicates the normal Chrome format. +enum class BASE_EXPORT LogFormat { LOG_FORMAT_CHROME, LOG_FORMAT_SYSLOG }; +#endif + +struct BASE_EXPORT LoggingSettings { + // Equivalent to logging destination enum, but allows for multiple + // destinations. + uint32_t logging_dest = LOG_DEFAULT; + + // The four settings below have an effect only when LOG_TO_FILE is + // set in |logging_dest|. + base::FilePath::StringType log_file_path; + LogLockingState lock_log = LOCK_LOG_FILE; + OldFileDeletionState delete_old = APPEND_TO_OLD_LOG_FILE; +#if BUILDFLAG(IS_CHROMEOS) + // Contains an optional file that logs should be written to. If present, + // |log_file_path| will be ignored, and the logging system will take ownership + // of the FILE. If there's an error writing to this file, no fallback paths + // will be opened. + raw_ptr<FILE> log_file = nullptr; + // ChromeOS uses the syslog log format by default. + LogFormat log_format = LogFormat::LOG_FORMAT_SYSLOG; +#endif +#if BUILDFLAG(IS_WIN) + // Contains an optional file that logs should be written to. If present, + // `log_file_path` will be ignored, and the logging system will take ownership + // of the HANDLE. If there's an error writing to this file, no fallback paths + // will be opened. + HANDLE log_file = nullptr; +#endif +}; + +} // namespace logging + +#endif // BASE_LOGGING_LOGGING_SETTINGS_H_
diff --git a/base/logging_unittest.cc b/base/logging_unittest.cc index 0ee07f1..8ea6588 100644 --- a/base/logging_unittest.cc +++ b/base/logging_unittest.cc
@@ -18,6 +18,7 @@ #include "base/files/scoped_temp_dir.h" #include "base/functional/bind.h" #include "base/functional/callback.h" +#include "base/logging/logging_settings.h" #include "base/no_destructor.h" #include "base/process/process.h" #include "base/run_loop.h"
diff --git a/base/logging_win.cc b/base/logging_win.cc index be3f2920..debf48b 100644 --- a/base/logging_win.cc +++ b/base/logging_win.cc
@@ -11,6 +11,7 @@ #include <initguid.h> +#include "base/logging/logging_settings.h" #include "base/memory/singleton.h" namespace logging {
diff --git a/base/memory/discardable_shared_memory.cc b/base/memory/discardable_shared_memory.cc index b010c8f..d99f76f 100644 --- a/base/memory/discardable_shared_memory.cc +++ b/base/memory/discardable_shared_memory.cc
@@ -30,6 +30,8 @@ #endif #if BUILDFLAG(IS_ANDROID) +#include <linux/ashmem.h> + #include "base/android/linker/ashmem.h" #endif
diff --git a/base/test/scoped_logging_settings.h b/base/test/scoped_logging_settings.h index 4f2285d..7633e3d8 100644 --- a/base/test/scoped_logging_settings.h +++ b/base/test/scoped_logging_settings.h
@@ -8,6 +8,7 @@ #include "base/base_export.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/memory/raw_ptr.h" #include "build/build_config.h"
diff --git a/base/test/test_suite.cc b/base/test/test_suite.cc index 5084e1f..ac91b3e1 100644 --- a/base/test/test_suite.cc +++ b/base/test/test_suite.cc
@@ -32,6 +32,7 @@ #include "base/i18n/icu_util.h" #include "base/i18n/rtl.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/memory/ptr_util.h" #include "base/memory/raw_ptr.h" #include "base/metrics/statistics_recorder.h"
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn index 749662e..3871979 100644 --- a/build/config/BUILDCONFIG.gn +++ b/build/config/BUILDCONFIG.gn
@@ -56,7 +56,7 @@ # build for ARM by default, not the host_cpu (which is likely x64). # This allows us to not have to specify both target_os and target_cpu # on the command line. - target_cpu = "arm" + target_cpu = "arm64" } else { target_cpu = host_cpu }
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1 index eb81a83..87e473d 100644 --- a/build/fuchsia/linux_internal.sdk.sha1 +++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@ -30.20251110.103.1 +30.20251118.102.1
diff --git a/cc/layers/nine_patch_layer_impl_unittest.cc b/cc/layers/nine_patch_layer_impl_unittest.cc index a984a88..9121bd0 100644 --- a/cc/layers/nine_patch_layer_impl_unittest.cc +++ b/cc/layers/nine_patch_layer_impl_unittest.cc
@@ -25,6 +25,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/geometry/rect_conversions.h" +#include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/transform.h" namespace cc { @@ -108,9 +109,7 @@ for (auto* quad : quads) { const viz::TextureDrawQuad* tex_quad = viz::TextureDrawQuad::MaterialCast(quad); - gfx::RectF tex_rect = - gfx::BoundingRect(tex_quad->uv_top_left, tex_quad->uv_bottom_right); - tex_rect.Scale(bitmap_size.width(), bitmap_size.height()); + gfx::RectF tex_rect = tex_quad->GetUnnormalizedTexCoords(bitmap_size); tex_remaining.Subtract(Region(ToRoundedIntRect(tex_rect))); } @@ -218,9 +217,7 @@ for (auto* quad : quads) { const viz::TextureDrawQuad* tex_quad = viz::TextureDrawQuad::MaterialCast(quad); - gfx::RectF tex_rect = - gfx::BoundingRect(tex_quad->uv_top_left, tex_quad->uv_bottom_right); - tex_rect.Scale(bitmap_size.width(), bitmap_size.height()); + gfx::RectF tex_rect = tex_quad->GetUnnormalizedTexCoords(bitmap_size); tex_remaining.Subtract(Region(ToRoundedIntRect(tex_rect))); }
diff --git a/cc/slim/slim_layer_tree_compositor_frame_unittest.cc b/cc/slim/slim_layer_tree_compositor_frame_unittest.cc index 7addfdd..2fe5066 100644 --- a/cc/slim/slim_layer_tree_compositor_frame_unittest.cc +++ b/cc/slim/slim_layer_tree_compositor_frame_unittest.cc
@@ -44,7 +44,9 @@ #include "ui/gfx/color_space.h" #include "ui/gfx/geometry/linear_gradient.h" #include "ui/gfx/geometry/rect.h" +#include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/geometry/rounded_corners_f.h" +#include "ui/gfx/geometry/size_f.h" #include "ui/gfx/geometry/test/geometry_util.h" #include "ui/gfx/geometry/transform.h" #include "ui/gfx/gpu_fence_handle.h" @@ -674,8 +676,9 @@ viz::TextureDrawQuad::MaterialCast(pass->quad_list.front()); EXPECT_TRUE(texture_quad->needs_blending); EXPECT_NE(viz::kInvalidResourceId, texture_quad->resource_id); - EXPECT_EQ(gfx::PointF(0.0f, 0.0f), texture_quad->uv_top_left); - EXPECT_EQ(gfx::PointF(1.0f, 1.0f), texture_quad->uv_bottom_right); + EXPECT_EQ(gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), + texture_quad->GetNormalizedTexCoords( + gfx::Size(image_info.width(), image_info.height()))); ASSERT_EQ(frame.resource_list.size(), 1u); EXPECT_EQ(frame.resource_list[0].id, texture_quad->resource_id); @@ -708,8 +711,9 @@ viz::TextureDrawQuad::MaterialCast(pass->quad_list.front()); EXPECT_TRUE(texture_quad->needs_blending); EXPECT_NE(viz::kInvalidResourceId, texture_quad->resource_id); - EXPECT_EQ(gfx::PointF(0.25f, 0.25f), texture_quad->uv_top_left); - EXPECT_EQ(gfx::PointF(0.75f, 0.75f), texture_quad->uv_bottom_right); + EXPECT_EQ(gfx::RectF(0.25f, 0.25f, 0.5f, 0.5f), + texture_quad->GetNormalizedTexCoords( + gfx::Size(image_info.width(), image_info.height()))); ASSERT_EQ(frame.resource_list.size(), 1u); EXPECT_EQ(frame.resource_list[0].id, texture_quad->resource_id); @@ -844,8 +848,12 @@ viz::TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(i)); EXPECT_NE(viz::kInvalidResourceId, texture_quad->resource_id); EXPECT_TRUE(texture_quad->nearest_neighbor); - EXPECT_EQ(expected_uv_top_left[i], texture_quad->uv_top_left); - EXPECT_EQ(expected_uv_bottom_right[i], texture_quad->uv_bottom_right); + const gfx::RectF expected_tex_coords = + gfx::BoundingRect(expected_uv_top_left[i], expected_uv_bottom_right[i]); + const gfx::Size image_size = + gfx::Size(image_info.width(), image_info.height()); + EXPECT_EQ(expected_tex_coords, + texture_quad->GetNormalizedTexCoords(image_size)); EXPECT_EQ(frame.resource_list[0].id, texture_quad->resource_id); EXPECT_EQ(frame_sink_->uploaded_resources().begin()->second.viz_resource_id,
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index ac7d5eb..311a70ea 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -1665,7 +1665,6 @@ // When we require high res to draw, abort the draw (almost) always. This does // not cause the scheduler to do a main frame, instead it will continue to try // drawing until we finally complete, so the copy request will not be lost. - // TODO(weiliangc): Remove RequiresHighResToDraw. crbug.com/469175 if (frame->checkerboarded_needs_raster) { if (RequiresHighResToDraw()) { if (expects_to_draw) { @@ -4259,7 +4258,6 @@ // If we just became visible, we have to ensure that we draw high res tiles, // to prevent checkerboard flashes. if (visible_) { - // TODO(crbug.com/40410467): Replace with RequiresHighResToDraw. SetRequiresHighResToDraw(); // Prior CompositorFrame may have been discarded and thus we need to ensure // that we submit a new one, even if there are no tiles. Therefore, force a @@ -4705,7 +4703,6 @@ // There will not be anything to draw here, so set high res // to avoid checkerboards, typically when we are recovering // from lost context. - // TODO(crbug.com/40410467): Replace with RequiresHighResToDraw. SetRequiresHighResToDraw(); // Always allocate a new viz::LocalSurfaceId when we get a new
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index ec9373b5..423b81f 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -10448,15 +10448,18 @@ gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize(gfx::SizeF(gutter_texture_size_), host_impl_->active_tree()->device_scale_factor()); - EXPECT_EQ(texture_quad->uv_top_left.x(), + const gfx::RectF texture_quad_tex_coords( + texture_quad->GetNormalizedTexCoords( + gfx::ToRoundedSize(gutter_texture_size_pixels))); + EXPECT_EQ(texture_quad_tex_coords.x(), texture_quad->rect.x() / gutter_texture_size_pixels.width()); - EXPECT_EQ(texture_quad->uv_top_left.y(), + EXPECT_EQ(texture_quad_tex_coords.y(), texture_quad->rect.y() / gutter_texture_size_pixels.height()); EXPECT_EQ( - texture_quad->uv_bottom_right.x(), + texture_quad_tex_coords.right(), texture_quad->rect.right() / gutter_texture_size_pixels.width()); EXPECT_EQ( - texture_quad->uv_bottom_right.y(), + texture_quad_tex_coords.bottom(), texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); } }
diff --git a/chrome/android/expectations/trichrome_chrome_64_32_bundle.proguard_flags.expected b/chrome/android/expectations/trichrome_chrome_64_32_bundle.proguard_flags.expected index 3dc82bd..832cc59 100644 --- a/chrome/android/expectations/trichrome_chrome_64_32_bundle.proguard_flags.expected +++ b/chrome/android/expectations/trichrome_chrome_64_32_bundle.proguard_flags.expected
@@ -450,6 +450,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +# We supply these as stubs and will only use them in older Android versions which had a framework +# implementation. We don't want R8 to complain about them not being there during optimization. +-dontwarn android.hardware.fingerprint.FingerprintManager.** + # Never inline methods, but allow shrinking and obfuscation. -keepclassmembernames,allowobfuscation,allowshrinking class androidx.biometric.AuthenticationCallbackProvider$Api* {
diff --git a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupControllerTest.java b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupControllerTest.java index cd177f4..6f78f6c 100644 --- a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupControllerTest.java +++ b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupControllerTest.java
@@ -74,7 +74,7 @@ mModel.get(TABS).addObserver(mMockTabListObserver); // Calling addTab on the coordinator should make the model propagate that it has a new tab. - mCoordinator.getTabSwitchingDelegate().addTab(mTestTab); + mCoordinator.getTabSwitchingDelegate().setTabs(new KeyboardAccessoryData.Tab[] {mTestTab}); verify(mMockTabListObserver).onItemRangeInserted(mModel.get(TABS), 0, 1); assertThat(mModel.get(TABS).size(), is(1)); assertThat(mModel.get(TABS).get(0), is(mTestTab)); @@ -130,9 +130,9 @@ public void testSetActiveTab() { mModel.addObserver(mMockPropertyObserver); assertThat(mModel.get(ACTIVE_TAB), is(nullValue())); - mCoordinator.getTabSwitchingDelegate().addTab(mTestTab); + mCoordinator.getTabSwitchingDelegate().setTabs(new KeyboardAccessoryData.Tab[] {mTestTab}); - // Set the active tab type to 0 which is the recording_type of |mTestTab|. + // Set the active tab type to 0 which is the recording_type of `mTestTab`. mCoordinator.getTabSwitchingDelegate().setActiveTab(0); verify(mMockPropertyObserver).onPropertyChanged(mModel, ACTIVE_TAB); @@ -143,9 +143,9 @@ public void testSetActiveTab_tabTypeNotFound_throwsException() { mModel.addObserver(mMockPropertyObserver); assertThat(mModel.get(ACTIVE_TAB), is(nullValue())); - mCoordinator.getTabSwitchingDelegate().addTab(mTestTab); + mCoordinator.getTabSwitchingDelegate().setTabs(new KeyboardAccessoryData.Tab[] {mTestTab}); - // Set the active tab type to 1 which is different from the recording_type of |mTestTab|. + // Set the active tab type to 1 which is different from the recording_type of `mTestTab`. mCoordinator.getTabSwitchingDelegate().setActiveTab(1); } }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorLayoutBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorLayoutBinder.java index 7bd7f6b..2d3138e9 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorLayoutBinder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorLayoutBinder.java
@@ -25,40 +25,17 @@ */ public static void bind( PropertyModel model, TabListEditorLayout view, PropertyKey propertyKey) { - if (TabListEditorProperties.IS_VISIBLE == propertyKey) { - if (model.get(TabListEditorProperties.IS_VISIBLE)) { - view.show(); - } else { - view.hide(); - } - } else if (TabListEditorProperties.TOOLBAR_NAVIGATION_LISTENER == propertyKey) { - view.getToolbar() - .setNavigationOnClickListener( - model.get(TabListEditorProperties.TOOLBAR_NAVIGATION_LISTENER)); - } else if (TabListEditorProperties.PRIMARY_COLOR == propertyKey) { - view.setBackgroundColor(model.get(TabListEditorProperties.PRIMARY_COLOR)); - } else if (TabListEditorProperties.TOOLBAR_BACKGROUND_COLOR == propertyKey) { - view.getToolbar() - .setToolbarBackgroundColor( - model.get(TabListEditorProperties.TOOLBAR_BACKGROUND_COLOR)); - } else if (TabListEditorProperties.TOOLBAR_TEXT_TINT == propertyKey) { - view.getToolbar() - .setTextColorStateList(model.get(TabListEditorProperties.TOOLBAR_TEXT_TINT)); - } else if (TabListEditorProperties.TOOLBAR_BUTTON_TINT == propertyKey) { - view.getToolbar().setButtonTint(model.get(TabListEditorProperties.TOOLBAR_BUTTON_TINT)); - } else if (TabListEditorProperties.TOOLBAR_TITLE == propertyKey) { - view.getToolbar().setTitle(model.get(TabListEditorProperties.TOOLBAR_TITLE)); - } else if (TabListEditorProperties.TOP_MARGIN == propertyKey) { - ViewGroup.MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams(); - layoutParams.topMargin = model.get(TabListEditorProperties.TOP_MARGIN); - // Calling setLayoutParams to requestLayout() for margin to take effect. - view.setLayoutParams(layoutParams); - } else if (TabListEditorProperties.CREATION_MODE == propertyKey) { + if (TabListEditorProperties.CREATION_MODE == propertyKey) { // Read the mode from the model and pass it to the view's setter. TabListEditorActionViewLayout actionViewLayout = view.findViewById(R.id.action_view_layout); @CreationMode int creationMode = model.get(TabListEditorProperties.CREATION_MODE); actionViewLayout.setCreationMode(creationMode); + } else if (propertyKey == TabListEditorProperties.DONE_BUTTON_CLICK_HANDLER) { + view.getToolbar() + .getActionViewLayout() + .setDoneButtonOnClickListener( + model.get(TabListEditorProperties.DONE_BUTTON_CLICK_HANDLER)); } else if (TabListEditorProperties.DONE_BUTTON_VISIBILITY == propertyKey) { view.getToolbar() .getActionViewLayout() @@ -69,11 +46,34 @@ .getActionViewLayout() .setIsDoneButtonEnabled( model.get(TabListEditorProperties.IS_DONE_BUTTON_ENABLED)); - } else if (propertyKey == TabListEditorProperties.DONE_BUTTON_CLICK_HANDLER) { + } else if (TabListEditorProperties.IS_VISIBLE == propertyKey) { + if (model.get(TabListEditorProperties.IS_VISIBLE)) { + view.show(); + } else { + view.hide(); + } + } else if (TabListEditorProperties.PRIMARY_COLOR == propertyKey) { + view.setBackgroundColor(model.get(TabListEditorProperties.PRIMARY_COLOR)); + } else if (TabListEditorProperties.TOOLBAR_BACKGROUND_COLOR == propertyKey) { view.getToolbar() - .getActionViewLayout() - .setDoneButtonOnClickListener( - model.get(TabListEditorProperties.DONE_BUTTON_CLICK_HANDLER)); + .setToolbarBackgroundColor( + model.get(TabListEditorProperties.TOOLBAR_BACKGROUND_COLOR)); + } else if (TabListEditorProperties.TOOLBAR_BUTTON_TINT == propertyKey) { + view.getToolbar().setButtonTint(model.get(TabListEditorProperties.TOOLBAR_BUTTON_TINT)); + } else if (TabListEditorProperties.TOOLBAR_NAVIGATION_LISTENER == propertyKey) { + view.getToolbar() + .setNavigationOnClickListener( + model.get(TabListEditorProperties.TOOLBAR_NAVIGATION_LISTENER)); + } else if (TabListEditorProperties.TOOLBAR_TEXT_TINT == propertyKey) { + view.getToolbar() + .setTextColorStateList(model.get(TabListEditorProperties.TOOLBAR_TEXT_TINT)); + } else if (TabListEditorProperties.TOOLBAR_TITLE == propertyKey) { + view.getToolbar().setTitle(model.get(TabListEditorProperties.TOOLBAR_TITLE)); + } else if (TabListEditorProperties.TOP_MARGIN == propertyKey) { + ViewGroup.MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams(); + layoutParams.topMargin = model.get(TabListEditorProperties.TOP_MARGIN); + // Calling setLayoutParams to requestLayout() for margin to take effect. + view.setLayoutParams(layoutParams); } } }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorProperties.java index c7bfb43f..010f5fe 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorProperties.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorProperties.java
@@ -14,55 +14,55 @@ /** {@link PropertyKey} list for TabListEditor. */ @NullMarked public class TabListEditorProperties { - public static final PropertyModel.WritableBooleanPropertyKey IS_VISIBLE = - new PropertyModel.WritableBooleanPropertyKey(); - - public static final PropertyModel.WritableObjectPropertyKey<View.OnClickListener> - TOOLBAR_NAVIGATION_LISTENER = new PropertyModel.WritableObjectPropertyKey<>(); - - public static final PropertyModel.WritableIntPropertyKey PRIMARY_COLOR = - new PropertyModel.WritableIntPropertyKey(); - - public static final PropertyModel.WritableIntPropertyKey TOOLBAR_BACKGROUND_COLOR = - new PropertyModel.WritableIntPropertyKey(); - - public static final PropertyModel.WritableObjectPropertyKey<ColorStateList> TOOLBAR_TEXT_TINT = - new PropertyModel.WritableObjectPropertyKey<>(); - - public static final PropertyModel.WritableObjectPropertyKey<ColorStateList> - TOOLBAR_BUTTON_TINT = new PropertyModel.WritableObjectPropertyKey<>(); - - public static final PropertyModel.WritableObjectPropertyKey<String> TOOLBAR_TITLE = - new PropertyModel.WritableObjectPropertyKey<>(); - - public static final PropertyModel.WritableIntPropertyKey TOP_MARGIN = - new PropertyModel.WritableIntPropertyKey(); - public static final PropertyModel.WritableIntPropertyKey CREATION_MODE = new PropertyModel.WritableIntPropertyKey(); + public static final PropertyModel.WritableObjectPropertyKey<View.OnClickListener> + DONE_BUTTON_CLICK_HANDLER = new PropertyModel.WritableObjectPropertyKey<>(); + public static final PropertyModel.WritableBooleanPropertyKey DONE_BUTTON_VISIBILITY = new PropertyModel.WritableBooleanPropertyKey(); public static final PropertyModel.WritableBooleanPropertyKey IS_DONE_BUTTON_ENABLED = new PropertyModel.WritableBooleanPropertyKey(); + public static final PropertyModel.WritableBooleanPropertyKey IS_VISIBLE = + new PropertyModel.WritableBooleanPropertyKey(); + + public static final PropertyModel.WritableIntPropertyKey PRIMARY_COLOR = + new PropertyModel.WritableIntPropertyKey(); + + public static final PropertyModel.WritableIntPropertyKey TOOLBAR_BACKGROUND_COLOR = + new PropertyModel.WritableIntPropertyKey(); + + public static final PropertyModel.WritableObjectPropertyKey<ColorStateList> + TOOLBAR_BUTTON_TINT = new PropertyModel.WritableObjectPropertyKey<>(); + public static final PropertyModel.WritableObjectPropertyKey<View.OnClickListener> - DONE_BUTTON_CLICK_HANDLER = new PropertyModel.WritableObjectPropertyKey<>(); + TOOLBAR_NAVIGATION_LISTENER = new PropertyModel.WritableObjectPropertyKey<>(); + + public static final PropertyModel.WritableObjectPropertyKey<ColorStateList> TOOLBAR_TEXT_TINT = + new PropertyModel.WritableObjectPropertyKey<>(); + + public static final PropertyModel.WritableObjectPropertyKey<String> TOOLBAR_TITLE = + new PropertyModel.WritableObjectPropertyKey<>(); + + public static final PropertyModel.WritableIntPropertyKey TOP_MARGIN = + new PropertyModel.WritableIntPropertyKey(); public static final PropertyKey[] ALL_KEYS = new PropertyKey[] { - IS_VISIBLE, - TOOLBAR_NAVIGATION_LISTENER, - PRIMARY_COLOR, - TOOLBAR_BACKGROUND_COLOR, - TOOLBAR_TEXT_TINT, - TOOLBAR_BUTTON_TINT, - TOOLBAR_TITLE, - TOP_MARGIN, CREATION_MODE, + DONE_BUTTON_CLICK_HANDLER, DONE_BUTTON_VISIBILITY, IS_DONE_BUTTON_ENABLED, - DONE_BUTTON_CLICK_HANDLER + IS_VISIBLE, + PRIMARY_COLOR, + TOOLBAR_BACKGROUND_COLOR, + TOOLBAR_BUTTON_TINT, + TOOLBAR_NAVIGATION_LISTENER, + TOOLBAR_TEXT_TINT, + TOOLBAR_TITLE, + TOP_MARGIN }; }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java index d7d2521..ac5edcf 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
@@ -73,6 +73,7 @@ import org.chromium.chrome.browser.tab.TabLaunchType; import org.chromium.chrome.browser.tab.TabObserver; import org.chromium.chrome.browser.tab.TabSelectionType; +import org.chromium.chrome.browser.tab.TabUtils; import org.chromium.chrome.browser.tab.state.ShoppingPersistedTabData; import org.chromium.chrome.browser.tab_group_sync.TabGroupSyncFeatures; import org.chromium.chrome.browser.tab_group_sync.TabGroupSyncServiceFactory; @@ -599,7 +600,7 @@ model = mModelList.get(indexAndTab.first).model; } } - if (tab != null && model != null) { + if (TabUtils.isValid(tab) && model != null) { model.set(TabProperties.URL_DOMAIN, getDomainForTab(tab)); // Changing URL will result in a thumbnail invalidation if the on-disk // thumbnail doesn't match.
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabShareUtilsUnitTest.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabShareUtilsUnitTest.java index ed8bbe6..3a43c4d 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabShareUtilsUnitTest.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabShareUtilsUnitTest.java
@@ -52,7 +52,6 @@ @Mock TabModel mTabModel; @Mock TabGroupSyncService mTabGroupSyncService; @Mock IdentityManager mIdentityManager; - @Mock CoreAccountInfo mCoreAccountInfo; private final LocalTabGroupId mLocalTabGroupId = new LocalTabGroupId(TAB_GROUP_ID); private SavedTabGroup mSavedTabGroup; @@ -81,9 +80,8 @@ when(mTabGroupSyncService.getGroup(mLocalTabGroupId)).thenReturn(mSavedTabGroup); - when(mCoreAccountInfo.getGaiaId()).thenReturn(GAIA_ID); when(mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN)) - .thenReturn(mCoreAccountInfo); + .thenReturn(CoreAccountInfo.createFromEmailAndGaiaId(EMAIL, GAIA_ID)); } @Test
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 cc140a21..3afad43 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
@@ -1059,7 +1059,19 @@ } void showQuickDeleteAnimation(Runnable onAnimationEnd, List<Tab> tabs) { - mTabListCoordinator.showQuickDeleteAnimation(onAnimationEnd, tabs); + Runnable onAnimEnd = + () -> { + onAnimationEnd.run(); + // Update the pinned tabs bar, as there might be movement of items in the + // recycler view. + if (mPinnedTabsCoordinator != null) mPinnedTabsCoordinator.onScrolled(); + }; + mTabListCoordinator.showQuickDeleteAnimation(onAnimEnd, tabs); + + // Reveal the search bar if needed. + if (mPinnedTabsCoordinator != null) { + updatePinnedTabsStripOnScroll(/* shouldShowSearchBox= */ true, /* forced= */ false); + } } /** Returns the filter index of a tab from its view index. */
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherLayoutPTTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherLayoutPTTest.java index 9028ec3..8a7b8be 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherLayoutPTTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherLayoutPTTest.java
@@ -14,6 +14,7 @@ import static org.chromium.base.GarbageCollectionTestUtils.canBeGarbageCollected; import static org.chromium.base.test.transit.TransitAsserts.assertFinalDestination; +import static org.chromium.base.test.transit.TransitAsserts.assertFinalDestinations; import static org.chromium.chrome.browser.flags.ChromeFeatureList.ANDROID_ELEGANT_TEXT_HEIGHT; import static org.chromium.chrome.test.util.ChromeTabUtils.getIndexOnUiThread; @@ -270,18 +271,25 @@ "about:blank", /* isIncognito= */ true, WebPageStation::newBuilder); - assertTrue(cta.getCurrentTabModel().isIncognito()); + assertTrue(pageStation.getTabModel().isIncognito()); // Make sure all thumbnails are there before switching tabs. IncognitoTabSwitcherStation tabSwitcherStation = enterIncognitoHtsWithThumbnailChecking(pageStation); pageStation = tabSwitcherStation.selectTabAtIndex(0, WebPageStation.newBuilder()); tabSwitcherStation = pageStation.openIncognitoTabSwitcher(); - ChromeRenderTestRule.sanitize(cta.findViewById(R.id.pane_frame)); - mRenderTestRule.render(cta.findViewById(R.id.pane_frame), "3_incognito_web_tabs"); + ChromeRenderTestRule.sanitize( + tabSwitcherStation.getActivity().findViewById(R.id.pane_frame)); + mRenderTestRule.render( + tabSwitcherStation.getActivity().findViewById(R.id.pane_frame), + "3_incognito_web_tabs"); WebPageStation previousPage = tabSwitcherStation.leaveHubToPreviousTabViaBack(WebPageStation.newBuilder()); - assertFinalDestination(previousPage); + if (previousPage.getActivity().isIncognitoWindow()) { + assertFinalDestinations(previousPage, mStartPage); + } else { + assertFinalDestination(previousPage); + } } @Test @@ -788,6 +796,8 @@ @Test @MediumTest + // TODO(crbug.com/457847264): Change to @Restriction(DeviceFormFactor.PHONE) after launch. + @DisableFeatures(ChromeFeatureList.ANDROID_OPEN_INCOGNITO_AS_WINDOW) public void testUrlUpdatedNotCrashing_ForTabNotInCurrentModel() throws Exception { WebPageStation regularPage = mCtaTestRule.startOnBlankPage(); Tab regularTab = regularPage.loadedTabElement.value(); @@ -862,7 +872,6 @@ List<Tab> tabsInGroup = new ArrayList<>(); TabSwitcherStation tabSwitcher; WebPageStation pageStation; - ChromeTabbedActivity cta = mCtaTestRule.getActivity(); // 1. SETUP: Create the tabs and the initial group. // We add an extra tab which will remain selected, allowing our tab group to show its color. @@ -910,13 +919,18 @@ editDialog.pressBackArrowToExit(); // Test - ChromeRenderTestRule.sanitize(cta.findViewById(R.id.pane_frame)); + ChromeRenderTestRule.sanitize( + editDialog.getHostStation().getActivity().findViewById(R.id.pane_frame)); String renderId = renderIdPrefix + colorName; - mRenderTestRule.render(cta.findViewById(R.id.pane_frame), renderId); + mRenderTestRule.render( + editDialog.getHostStation().getActivity().findViewById(R.id.pane_frame), + renderId); } // 3. CLEANUP: Leave the hub to the last active incognito tab. pageStation = tabSwitcher.leaveHubToPreviousTabViaBack(WebPageStation.newBuilder()); + if (!pageStation.getActivity().isIncognitoWindow()) { assertFinalDestination(pageStation); + } } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java index f457f85..3a8630e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java
@@ -984,7 +984,7 @@ @Override public @Nullable SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { return null; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java index c5e0290..29da84e6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
@@ -230,8 +230,7 @@ @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { - super.getUpdatedSceneOverlayTree(viewport, visibleViewport, resourceManager, yOffset); + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { mSceneLayer.update( resourceManager, this,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java index cada8190..b0bf0fc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
@@ -797,11 +797,6 @@ browserControlsManager); assumeNonNull(layer); - float offsetPx = - mBrowserControlsStateProvider == null - ? 0 - : mBrowserControlsStateProvider.getTopControlOffset(); - for (SceneOverlay overlay : mSceneOverlays) { // If the SceneOverlay is not showing, don't bother adding it to the tree. if (!overlay.isSceneOverlayTreeShowing()) { @@ -811,10 +806,7 @@ SceneOverlayLayer overlayLayer = overlay.getUpdatedSceneOverlayTree( - mCachedWindowViewport, - mCachedVisibleViewport, - resourceManager, - offsetPx * mPxToDp); + mCachedWindowViewport, mCachedVisibleViewport, resourceManager); assumeNonNull(overlayLayer); overlayLayer.setContentTree(layer);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStacker.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStacker.java index f5a812e92..0536cecb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStacker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStacker.java
@@ -17,18 +17,18 @@ @Override public void pushDrawPropertiesToViews( - StripLayoutView[] indexOrderedViews, float xOffset, float visibleWidth) { + StripLayoutView[] indexOrderedViews, float leftBound, float rightBound) { for (int i = 0; i < indexOrderedViews.length; i++) { StripLayoutView view = indexOrderedViews[i]; view.setDrawX(view.getIdealX() + view.getOffsetX()); view.setDrawY(view.getOffsetY()); // visibility is based drawX - call this after setting drawX / Y. - setVisible(view, xOffset, visibleWidth); + setVisible(view, leftBound, rightBound); } } - private static void setVisible(StripLayoutView view, float xOffset, float visibleWidth) { + private static void setVisible(StripLayoutView view, float leftBound, float rightBound) { float drawXAccountingPadding = 0f; float width = 0f; if (view instanceof StripLayoutGroupTitle groupTitle) { @@ -54,7 +54,7 @@ assert false : "Method should be invoked only for tabs and groups"; } view.setVisible( - (drawXAccountingPadding + width) >= xOffset - && drawXAccountingPadding <= xOffset + visibleWidth); + (drawXAccountingPadding + width) >= leftBound + && drawXAccountingPadding <= rightBound); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java index 4750a83..b0836b3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
@@ -4837,11 +4837,10 @@ computeIdealViewPositions(); // 3. Calculate view stacking - update view draw properties and visibility. - float stripWidth = - getVisibleRightBound(/* clampToUnpinnedViews= */ false) - - getVisibleLeftBound(/* clampToUnpinnedViews= */ false); mStripStacker.pushDrawPropertiesToViews( - mStripViews, getVisibleLeftBound(/* clampToUnpinnedViews= */ false), stripWidth); + mStripViews, + getVisibleLeftBound(/* clampToUnpinnedViews= */ false), + getVisibleRightBound(/* clampToUnpinnedViews= */ false)); mStripStacker.pushDrawPropertiesToButtons( mNewTabButton, mStripTabs, @@ -5054,6 +5053,17 @@ if (mTabAtPositionForTesting != null) { return mTabAtPositionForTesting; } + + // Views are only hidden once they're completely out of the visible region. Since tabs are + // wider than the NTB (which is roughly where the end-fade begins), it is possible for a tab + // to be visible while having its touch target partially past the NTB. Visible tabs are + // considered clickable, so manually suppress clicks beyond the NTB to prevent this. + if (LocalizationUtils.isLayoutRtl()) { + if (x <= mNewTabButton.getDrawX() + mNewTabButton.getWidth()) return null; + } else { + if (x >= mNewTabButton.getDrawX()) return null; + } + return StripLayoutUtils.findViewAtPositionX(mStripViews, x, includeGroupTitles); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java index a886350..c8343d3a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java
@@ -807,12 +807,11 @@ @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { assert mTabStripTreeProvider != null; - setStripVisibilityState( - StripVisibilityState.HIDDEN_BY_SCROLL, - /* clear= */ mBrowserControlsStateProvider.getTopControlOffset() >= 0); + float yOffset = mBrowserControlsStateProvider.getTopControlOffset() / mDensity; + setStripVisibilityState(StripVisibilityState.HIDDEN_BY_SCROLL, /* clear= */ yOffset >= 0); Tab selectedTab = mTabModelSelector == null ? null
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java index 5838e599..bd64e624 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java
@@ -292,10 +292,12 @@ } /** + * Returns a visible {@link StripLayoutView} at the given x-position, or {@code null} if none. + * * @param views The list of {@link StripLayoutView}. * @param x The x position to use to retrieve view. * @param includeGroupTitles Whether to include group title when finding view. - * @return View at x position.{@code null} if no view at position or if input criteria not met. + * @return View at x position. {@code null} if no view at position or if input criteria not met. */ public static @Nullable StripLayoutView findViewAtPositionX( StripLayoutView[] views, float x, boolean includeGroupTitles) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java index cb92de7..5d50e5277 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java
@@ -18,6 +18,7 @@ import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; import org.chromium.chrome.browser.DefaultBrowserInfo; +import org.chromium.chrome.browser.incognito.IncognitoUtils; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; import org.chromium.chrome.browser.profiles.Profile; @@ -301,9 +302,20 @@ item, ChromePreferenceKeys.CONTEXT_MENU_SHOP_IMAGE_WITH_GOOGLE_LENS_CLICKED, showInProductHelp); + case Item.OPEN_IN_CHROME_INCOGNITO_TAB: + if (IncognitoUtils.shouldOpenIncognitoAsWindow()) { + return context.getString(R.string.contextmenu_open_in_incognito_window); + } + break; + case Item.OPEN_IN_NEW_CHROME_TAB: + if (IncognitoUtils.shouldOpenIncognitoAsWindow()) { + return context.getString(R.string.contextmenu_open_in_chrome_window); + } + break; default: return context.getString(getStringId(item)); } + return context.getString(getStringId(item)); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java index 8b264d8..cba35f1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -160,6 +160,10 @@ static final String PARALLEL_REQUEST_URL_KEY = "android.support.customtabs.PARALLEL_REQUEST_URL"; + @VisibleForTesting + static final String PARALLEL_REQUEST_URL_LIST_KEY = + "android.support.customtabs.PARALLEL_REQUEST_URL_LIST"; + static final String RESOURCE_PREFETCH_URL_LIST_KEY = "androidx.browser.RESOURCE_PREFETCH_URL_LIST"; @@ -1203,24 +1207,33 @@ Log.w(TAG, "handleParallelRequest() = " + PARALLEL_REQUEST_MESSAGES[status]); } - if ((status != ParallelRequestStatus.NO_REQUEST) - && (status != ParallelRequestStatus.FAILURE_NOT_INITIALIZED) - && (status != ParallelRequestStatus.FAILURE_NOT_AUTHORIZED) - && ChromeFeatureList.isEnabled( - ChromeFeatureList.CCT_REPORT_PARALLEL_REQUEST_STATUS)) { - Bundle args = new Bundle(); - Uri url = intent.getParcelableExtra(PARALLEL_REQUEST_URL_KEY); - args.putParcelable("url", url); - args.putInt("status", status); - safeExtraCallback(session, ON_DETACHED_REQUEST_REQUESTED, args); - if (mLogRequests) { - logCallback(ON_DETACHED_REQUEST_REQUESTED, bundleToJson(args).toString()); - } + // Success is already reported per URL, report any failures here. + if ((status != ParallelRequestStatus.SUCCESS)) { + reportParallelRequestStatus( + session, status, intent.getParcelableExtra(PARALLEL_REQUEST_URL_KEY)); } return status; } + private void reportParallelRequestStatus( + @Nullable SessionHolder<?> session, + @ParallelRequestStatus int status, + @Nullable Uri url) { + if ((status == ParallelRequestStatus.NO_REQUEST) + || !ChromeFeatureList.isEnabled( + ChromeFeatureList.CCT_REPORT_PARALLEL_REQUEST_STATUS)) { + return; + } + Bundle args = new Bundle(); + args.putParcelable("url", url); + args.putInt("status", status); + safeExtraCallback(session, ON_DETACHED_REQUEST_REQUESTED, args); + if (mLogRequests) { + logCallback(ON_DETACHED_REQUEST_REQUESTED, bundleToJson(args).toString()); + } + } + /** * Maybe starts a parallel request. * @@ -1232,46 +1245,70 @@ @Nullable SessionHolder<?> session, Intent intent) { ThreadUtils.assertOnUiThread(); - if (!intent.hasExtra(PARALLEL_REQUEST_URL_KEY)) return ParallelRequestStatus.NO_REQUEST; + if (!intent.hasExtra(PARALLEL_REQUEST_URL_KEY) + && !intent.hasExtra(PARALLEL_REQUEST_URL_LIST_KEY)) { + return ParallelRequestStatus.NO_REQUEST; + } if (!ChromeBrowserInitializer.getInstance().isFullBrowserInitialized()) { return ParallelRequestStatus.FAILURE_NOT_INITIALIZED; } - if (!mClientManager.getAllowParallelRequestForSession(session)) { + String packageName = mClientManager.getClientPackageNameForSession(session); + if (session == null + || packageName == null + || !mClientManager.getAllowParallelRequestForSession(session)) { return ParallelRequestStatus.FAILURE_NOT_AUTHORIZED; } - Uri referrer = intent.getParcelableExtra(PARALLEL_REQUEST_REFERRER_KEY); - Uri url = intent.getParcelableExtra(PARALLEL_REQUEST_URL_KEY); + + Uri referrer = IntentUtils.safeGetParcelableExtra(intent, PARALLEL_REQUEST_REFERRER_KEY); int policy = intent.getIntExtra(PARALLEL_REQUEST_REFERRER_POLICY_KEY, ReferrerPolicy.DEFAULT); - if (url == null) return ParallelRequestStatus.FAILURE_INVALID_URL; if (referrer == null) return ParallelRequestStatus.FAILURE_INVALID_REFERRER; if (policy < ReferrerPolicy.MIN_VALUE || policy > ReferrerPolicy.MAX_VALUE) { policy = ReferrerPolicy.DEFAULT; } - if (url.toString().equals("") || !isValid(url)) { - return ParallelRequestStatus.FAILURE_INVALID_URL; - } if (!canDoParallelRequest(session, referrer)) { return ParallelRequestStatus.FAILURE_INVALID_REFERRER_FOR_SESSION; } - String urlString = url.toString(); String referrerString = referrer.toString(); - String packageName = mClientManager.getClientPackageNameForSession(session); + Uri uri = intent.getParcelableExtra(PARALLEL_REQUEST_URL_KEY); + if (uri != null) { + return doParallelResourceRequest(session, uri, referrerString, packageName, policy); + } + + List<Uri> urls = + IntentUtils.getParcelableArrayListExtra(intent, PARALLEL_REQUEST_URL_LIST_KEY); + if (urls == null) return ParallelRequestStatus.FAILURE_INVALID_URL; + for (Uri url : urls) { + @ParallelRequestStatus + int result = + doParallelResourceRequest(session, url, referrerString, packageName, policy); + if (result != ParallelRequestStatus.SUCCESS) return result; + } + return ParallelRequestStatus.SUCCESS; + } + + private @ParallelRequestStatus int doParallelResourceRequest( + SessionHolder<?> session, Uri url, String referrer, String packageName, int policy) { + if (url.toString().equals("") || !isValid(url)) { + return ParallelRequestStatus.FAILURE_INVALID_URL; + } + String urlString = url.toString(); + CustomTabsConnectionJni.get() .createAndStartDetachedResourceRequest( ProfileManager.getLastUsedRegularProfile(), session, packageName, urlString, - referrerString, + referrer, policy, DetachedResourceRequestMotivation.PARALLEL_REQUEST); if (mLogRequests) { - Log.w(TAG, "startParallelRequest(%s, %s, %d)", urlString, referrerString, policy); + Log.w(TAG, "startParallelRequest(%s, %s, %d)", urlString, referrer, policy); } - + reportParallelRequestStatus(session, ParallelRequestStatus.SUCCESS, url); return ParallelRequestStatus.SUCCESS; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/OverscrollGlowOverlay.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/OverscrollGlowOverlay.java index 5e8becb6..af6c95b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/OverscrollGlowOverlay.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/OverscrollGlowOverlay.java
@@ -73,7 +73,7 @@ @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { if (!mSceneLayer.update(resourceManager, mOffset)) setIsShowing(false); return mSceneLayer; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinator.java index 0f2430422..153cc49 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinator.java
@@ -33,6 +33,7 @@ import org.chromium.chrome.browser.safe_browsing.settings.SafeBrowsingSettingsFragment; import org.chromium.chrome.browser.settings.SettingsNavigationFactory; import org.chromium.chrome.browser.toolbar.settings.AddressBarSettingsFragment; +import org.chromium.chrome.browser.toolbar.settings.AddressBarSettingsFragment.HighlightedOption; import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.StateChangeReason; @@ -234,7 +235,11 @@ break; case TipsNotificationsFeatureType.BOTTOM_OMNIBOX: SettingsNavigationFactory.createSettingsNavigation() - .startSettings(mContext, AddressBarSettingsFragment.class); + .startSettings( + mContext, + AddressBarSettingsFragment.class, + AddressBarSettingsFragment.createArguments( + HighlightedOption.BOTTOM_TOOLBAR)); break; default: assert false : "Invalid feature type: " + featureType;
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 4b82e865..66e0f55 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
@@ -469,6 +469,12 @@ return; } + // Here, if fragment is MainSettings, this is running in single-column layout. + // So, we should disable selection highlight. + if (fragment instanceof MainSettings mainSettings) { + mainSettings.setMultiColumnSettings(null, null); + } + fragment.requireContext() .getTheme() .applyStyle(R.style.ThemeOverlay_Chromium_Settings_Containment, true); @@ -1035,7 +1041,8 @@ @Override public void onFragmentAttached( FragmentManager fragmentManager, Fragment fragment, Context context) { - if (!MAIN_FRAGMENT_TAG.equals(fragment.getTag())) { + if (!(fragment instanceof SettingsFragment) + && !MAIN_FRAGMENT_TAG.equals(fragment.getTag())) { return; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java index d65b4ef..871c76e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java
@@ -74,7 +74,7 @@ @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { final int offset = mBrowserControlsStateProvider.getTopControlsMinHeightOffset(); StatusIndicatorSceneLayerJni.get() .updateStatusIndicatorLayer(mNativePtr, resourceManager, mResourceId, offset);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFavicon.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFavicon.java index 611eac1..8f01d1c9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFavicon.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFavicon.java
@@ -60,9 +60,9 @@ } private static @Nullable TabFavicon get(Tab tab) { - if (sInstanceForTesting != null) return sInstanceForTesting; - if (tab == null || !tab.isInitialized()) return null; - return tab.getUserDataHost().getUserData(USER_DATA_KEY); + return sInstanceForTesting != null + ? sInstanceForTesting + : !TabUtils.isValid(tab) ? null : tab.getUserDataHost().getUserData(USER_DATA_KEY); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java index d4efaa7..c018b59 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
@@ -26,6 +26,7 @@ import org.chromium.base.ContextUtils; import org.chromium.base.DeviceInfo; +import org.chromium.build.annotations.Contract; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; @@ -54,6 +55,14 @@ private TabUtils() {} /** + * @return Whether the given tab is initialized and not destroyed. + */ + @Contract("null -> false") + public static boolean isValid(@Nullable Tab tab) { + return tab != null && tab.isInitialized() && !tab.isDestroyed(); + } + + /** * @return {@link Activity} associated with the given tab. */ public static @Nullable Activity getActivity(Tab tab) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelRemoverUnitTest.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelRemoverUnitTest.java index e6c69887..4d24109 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelRemoverUnitTest.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelRemoverUnitTest.java
@@ -52,9 +52,9 @@ import org.chromium.components.collaboration.CollaborationService; import org.chromium.components.data_sharing.DataSharingService; import org.chromium.components.data_sharing.member_role.MemberRole; -import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.identitymanager.ConsentLevel; import org.chromium.components.signin.identitymanager.IdentityManager; +import org.chromium.components.signin.test.util.TestAccounts; import org.chromium.components.tab_group_sync.LocalTabGroupId; import org.chromium.components.tab_group_sync.SavedTabGroup; import org.chromium.components.tab_group_sync.TabGroupSyncService; @@ -65,7 +65,6 @@ /** Unit tests for {@link TabModelRemover}. */ @RunWith(BaseRobolectricTestRunner.class) public class TabModelRemoverUnitTest { - private static final String EMAIL = "test@example.com"; private static final String COLLABORATION_ID = "collaboration"; private static final String TAB_GROUP_TITLE = "My Title"; private static final LocalTabGroupId TAB_GROUP_1 = new LocalTabGroupId(new Token(1L, 2L)); @@ -78,7 +77,6 @@ @Mock private Profile mProfile; @Mock private IdentityServicesProvider mIdentityServicesProvider; @Mock private IdentityManager mIdentityManager; - @Mock private CoreAccountInfo mCoreAccountInfo; @Mock private TabGroupModelFilterInternal mTabGroupModelFilter; @Mock private TabModelRemoverFlowHandler mHandler; @Mock private ModalDialogManager mModalDialogManager; @@ -109,8 +107,7 @@ IdentityServicesProvider.setInstanceForTests(mIdentityServicesProvider); when(mIdentityServicesProvider.getIdentityManager(mProfile)).thenReturn(mIdentityManager); when(mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN)) - .thenReturn(mCoreAccountInfo); - when(mCoreAccountInfo.getEmail()).thenReturn(EMAIL); + .thenReturn(TestAccounts.ACCOUNT1); DataSharingServiceFactory.setForTesting(mDataSharingService); CollaborationServiceFactory.setForTesting(mCollaborationService);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java index 9592fcf9..4706aef 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java
@@ -326,6 +326,82 @@ @Test @SmallTest + @EnableFeatures(ChromeFeatureList.CCT_REPORT_PARALLEL_REQUEST_STATUS) + public void testMultipleParallelRequestCompletionSuccessCallbacks() throws Exception { + var histogram = + HistogramWatcher.newSingleRecordWatcher( + "CustomTabs.ParallelRequestStatusOnStart", 1); + final CallbackHelper cb = new CallbackHelper(); + setUpTestServerWithListener( + new EmbeddedTestServer.ConnectionListener() { + @Override + public void readFromSocket(long socketId) { + cb.notifyCalled(); + } + }); + ArrayList<Uri> urls = + new ArrayList<>( + Arrays.asList( + Uri.parse(mServer.getURL("/nocontent?a=1")), + Uri.parse(mServer.getURL("/nocontent?a=2")), + Uri.parse(mServer.getURL("/nocontent?a=3")))); + final CallbackHelper url1StartedCallback = new CallbackHelper(); + final CallbackHelper url1FinishedCallback = new CallbackHelper(); + final CallbackHelper url2StartedCallback = new CallbackHelper(); + final CallbackHelper url2FinishedCallback = new CallbackHelper(); + final CallbackHelper url3StartedCallback = new CallbackHelper(); + final CallbackHelper url3FinishedCallback = new CallbackHelper(); + + CustomTabsCallback customTabsCallback = + new CustomTabsCallback() { + @Override + public void extraCallback(String callbackName, Bundle args) { + if (CustomTabsConnection.ON_DETACHED_REQUEST_REQUESTED.equals( + callbackName)) { + Uri url = args.getParcelable("url"); + int status = args.getInt("status"); + Assert.assertEquals( + CustomTabsConnection.ParallelRequestStatus.SUCCESS, status); + if (url.equals(urls.get(0))) { + url1StartedCallback.notifyCalled(); + } else if (url.equals(urls.get(1))) { + url2StartedCallback.notifyCalled(); + } else if (url.equals(urls.get(2))) { + url3StartedCallback.notifyCalled(); + } + } else if (CustomTabsConnection.ON_DETACHED_REQUEST_COMPLETED.equals( + callbackName)) { + Uri url = args.getParcelable("url"); + int status = args.getInt("net_error"); + Assert.assertEquals(NetError.OK, status); + if (url.equals(urls.get(0))) { + url1FinishedCallback.notifyCalled(); + } else if (url.equals(urls.get(1))) { + url2FinishedCallback.notifyCalled(); + } else if (url.equals(urls.get(2))) { + url3FinishedCallback.notifyCalled(); + } + } + } + }; + var sessionHolder = prepareSession(ORIGIN, customTabsCallback); + + PostTask.runOrPostTask( + TaskTraits.UI_DEFAULT, + () -> mConnection.onHandledIntent(sessionHolder, prepareIntent(urls, ORIGIN))); + CustomTabsTestUtils.warmUpAndWait(); + url1StartedCallback.waitForOnly(); + url2StartedCallback.waitForOnly(); + url3StartedCallback.waitForOnly(); + cb.waitForCallback(0, urls.size()); + url1FinishedCallback.waitForOnly(); + url2FinishedCallback.waitForOnly(); + url3FinishedCallback.waitForOnly(); + histogram.assertExpected(); + } + + @Test + @SmallTest public void testCanStartResourcePrefetch() throws Exception { var sessionHolder = prepareSession(); CustomTabsTestUtils.warmUpAndWait(); @@ -581,12 +657,12 @@ // Launching a CCT and loading a URL takes more time than usual. Gives a longer timeout. // See crbug.com/40737671. mContext.startActivity(intent); - callback.waitForRequest(0, 1, 10, TimeUnit.SECONDS); - callback.waitForCompletion(0, 1, 10, TimeUnit.SECONDS); + callback.waitForRequest(0, 1, 20, TimeUnit.SECONDS); + callback.waitForCompletion(0, 1, 20, TimeUnit.SECONDS); mContext.startActivity(intent); - callback.waitForRequest(1, 1, 10, TimeUnit.SECONDS); - callback.waitForCompletion(1, 1, 10, TimeUnit.SECONDS); + callback.waitForRequest(1, 1, 20, TimeUnit.SECONDS); + callback.waitForCompletion(1, 1, 20, TimeUnit.SECONDS); } private void testCanStartParallelRequest(boolean afterNative) throws Exception { @@ -753,6 +829,15 @@ return intent; } + private static Intent prepareIntent(ArrayList<Uri> urls, Uri referrer) { + Intent intent = new Intent(); + intent.setData(Uri.parse("http://www.example.com")); + intent.putParcelableArrayListExtra( + CustomTabsConnection.PARALLEL_REQUEST_URL_LIST_KEY, urls); + intent.putExtra(CustomTabsConnection.PARALLEL_REQUEST_REFERRER_KEY, referrer); + return intent; + } + private static Intent prepareIntentForResourcePrefetch(List<Uri> urls, Uri referrer) { Intent intent = new Intent(); intent.setData(Uri.parse("http://www.example.com"));
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoCookieLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoCookieLeakageTest.java index a84d84d..d103e9f 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoCookieLeakageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoCookieLeakageTest.java
@@ -18,7 +18,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import org.chromium.base.ThreadUtils; import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameter; import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate; import org.chromium.base.test.params.ParameterProvider; @@ -73,8 +72,7 @@ @After public void tearDown() { - ThreadUtils.runOnUiThreadBlocking( - () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule)); + mChromeActivityTestRule.closeAllWindowsAndDeleteInstanceAndTabState(); } private void setCookies(Tab tab) throws TimeoutException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java index 32aa9e1..6fd7205 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java
@@ -171,8 +171,7 @@ () -> DownloadManagerService.getDownloadManagerService() .removeDownloadObserver(mTestDownloadManagerServiceObserver)); - ThreadUtils.runOnUiThreadBlocking( - () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule)); + mChromeActivityTestRule.closeAllWindowsAndDeleteInstanceAndTabState(); } private boolean hasFileDownloaded(String downloadedFileName) {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java index 37fa9f7..7029242 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java
@@ -85,8 +85,7 @@ @After public void tearDown() { - ThreadUtils.runOnUiThreadBlocking( - () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule)); + mChromeActivityTestRule.closeAllWindowsAndDeleteInstanceAndTabState(); } /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java index f70585a..dab78108 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java
@@ -18,7 +18,6 @@ import static org.chromium.ui.test.util.ViewUtils.onViewWaiting; -import android.app.Activity; import android.os.Build; import androidx.test.espresso.Espresso; @@ -36,26 +35,21 @@ import org.mockito.junit.MockitoRule; import org.chromium.base.ThreadUtils; -import org.chromium.base.test.ActivityFinisher; import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameter; import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate; import org.chromium.base.test.params.ParameterProvider; import org.chromium.base.test.params.ParameterSet; import org.chromium.base.test.params.ParameterizedRunner; -import org.chromium.base.test.transit.Station; -import org.chromium.base.test.transit.TrafficControl; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Criteria; import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.DisabledTest; -import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.customtabs.IncognitoCustomTabActivityTestRule; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils.ActivityType; import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils.TestParams; -import org.chromium.chrome.browser.multiwindow.MultiInstanceManager; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabLoadIfNeededCaller; import org.chromium.chrome.browser.ui.hats.SurveyClient; @@ -121,29 +115,7 @@ @After public void tearDown() { - ThreadUtils.runOnUiThreadBlocking( - () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule)); - List<Station<?>> activeStations = TrafficControl.getActiveStations(); - for (Station<?> station : activeStations) { - station.getActivity().finish(); - // TODO(crbug.com/460433346): Close CTA Instances at the end of multiwindow tests - Activity activity = station.getActivity(); - if (activity instanceof ChromeTabbedActivity cta) { - ThreadUtils.runOnUiThreadBlocking( - () -> { - MultiInstanceManager mim = cta.getMultiInstanceMangerForTesting(); - mim.closeWindow( - cta.getWindowIdForTesting(), - MultiInstanceManager.CloseWindowAppSource.OTHER); - }); - } else { - station.getActivity().finishAndRemoveTask(); - } - } - TrafficControl.hopOffPublicTransit(); - - // TODO(crbug.com/363311624): Temporary fix to close all CCT - ActivityFinisher.finishAll(); + mChromeActivityTestRule.closeAllWindowsAndDeleteInstanceAndTabState(); } private void requestLocationPermission(Tab tab) throws TimeoutException, ExecutionException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoStorageLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoStorageLeakageTest.java index 8c48efc..c943ae3 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoStorageLeakageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoStorageLeakageTest.java
@@ -6,7 +6,6 @@ import static org.junit.Assert.assertEquals; -import android.app.Activity; import android.os.Build; import androidx.test.filters.LargeTest; @@ -19,23 +18,18 @@ import org.junit.runner.RunWith; import org.chromium.base.ThreadUtils; -import org.chromium.base.test.ActivityFinisher; import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameter; import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate; import org.chromium.base.test.params.ParameterizedRunner; -import org.chromium.base.test.transit.Station; -import org.chromium.base.test.transit.TrafficControl; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Criteria; import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DisableIf; -import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.customtabs.IncognitoCustomTabActivityTestRule; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils.ActivityType; import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils.TestParams; -import org.chromium.chrome.browser.multiwindow.MultiInstanceManager; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabLoadIfNeededCaller; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; @@ -85,29 +79,7 @@ @After public void tearDown() { - ThreadUtils.runOnUiThreadBlocking( - () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule)); - List<Station<?>> activeStations = TrafficControl.getActiveStations(); - for (Station<?> station : activeStations) { - station.getActivity().finish(); - // TODO(crbug.com/460433346): Close CTA Instances at the end of multiwindow tests - Activity activity = station.getActivity(); - if (activity instanceof ChromeTabbedActivity cta) { - ThreadUtils.runOnUiThreadBlocking( - () -> { - MultiInstanceManager mim = cta.getMultiInstanceMangerForTesting(); - mim.closeWindow( - cta.getWindowIdForTesting(), - MultiInstanceManager.CloseWindowAppSource.OTHER); - }); - } else { - station.getActivity().finishAndRemoveTask(); - } - } - TrafficControl.hopOffPublicTransit(); - - // TODO(crbug.com/363311624): Temporary fix to close all CCT - ActivityFinisher.finishAll(); + mChromeActivityTestRule.closeAllWindowsAndDeleteInstanceAndTabState(); } @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java index f604d1f..0330423d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java
@@ -18,7 +18,9 @@ import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.HistogramWatcher; +import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.incognito.IncognitoUtils; import org.chromium.chrome.browser.permissions.RuntimePermissionTestUtils.RuntimePromptResponse; import org.chromium.chrome.browser.permissions.RuntimePermissionTestUtils.TestAndroidPermissionDelegate; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; @@ -358,7 +360,13 @@ @Feature({"RuntimePermissions", "Location"}) public void testAllowRuntimeLocationIncognito() throws Exception { RuntimePermissionTestUtils.setupGeolocationSystemMock(); - mPermissionTestRule.newIncognitoTabFromMenu(); + ChromeActivity incognitoActivity; + if (IncognitoUtils.shouldOpenIncognitoAsWindow()) { + incognitoActivity = mPermissionTestRule.newIncognitoWindowFromMenu(); + } else { + mPermissionTestRule.newIncognitoTabFromMenu(); + incognitoActivity = mPermissionTestRule.getActivity(); + } String[] requestablePermission = new String[] { @@ -369,6 +377,7 @@ new TestAndroidPermissionDelegate( requestablePermission, RuntimePromptResponse.GRANT); RuntimePermissionTestUtils.runTest( + incognitoActivity, mPermissionTestRule, mTestAndroidPermissionDelegate, GEOLOCATION_TEST,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java index 297b02bc..0bf9e13 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java
@@ -22,7 +22,10 @@ import org.chromium.chrome.browser.permissions.PermissionTestRule.PermissionUpdateWaiter; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.R; +import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil; +import org.chromium.content_public.browser.test.util.JavaScriptUtils; +import org.chromium.content_public.browser.test.util.TouchCommon; import org.chromium.device.geolocation.LocationProviderOverrider; import org.chromium.device.geolocation.MockLocationProvider; import org.chromium.ui.modaldialog.DialogDismissalCause; @@ -142,6 +145,7 @@ /** * Run a test related to the runtime permission prompt, based on the specified parameters. * + * @param activity The ChromeActivity instance to use for this test. * @param permissionTestRule The PermissionTestRule of the calling test. * @param testAndroidPermissionDelegate The TestAndroidPermissionDelegate to be used for this * test. @@ -160,6 +164,7 @@ * missing permission prompt dialog (0 if not applicable). */ public static void runTest( + final ChromeActivity activity, final PermissionTestRule permissionTestRule, final TestAndroidPermissionDelegate testAndroidPermissionDelegate, final String testUrl, @@ -170,7 +175,6 @@ final String javascriptToExecute, final @StringRes int missingPermissionPromptTextId) throws Exception { - final ChromeActivity activity = permissionTestRule.getActivity(); activity.getWindowAndroid().setAndroidPermissionDelegate(testAndroidPermissionDelegate); final Tab tab = ThreadUtils.runOnUiThreadBlocking(() -> activity.getActivityTab()); @@ -179,10 +183,19 @@ expectPermissionAllowed ? "Granted" : "Denied", activity); ThreadUtils.runOnUiThreadBlocking(() -> tab.addObserver(permissionUpdateWaiter)); - permissionTestRule.setUpUrl(testUrl); + final String url = permissionTestRule.getURL(testUrl); + ChromeTabUtils.waitForTabPageLoaded( + tab, + url, + () -> { + ChromeTabUtils.loadUrlOnUiThread(tab, url); + }); if (javascriptToExecute != null && !javascriptToExecute.isEmpty()) { - permissionTestRule.runJavaScriptCodeInCurrentTabWithGesture(javascriptToExecute); + JavaScriptUtils.executeJavaScriptAndWaitForResult( + ThreadUtils.runOnUiThreadBlocking(() -> tab.getWebContents()), + "functionToRun = '" + javascriptToExecute + "'"); + TouchCommon.singleClickView(ThreadUtils.runOnUiThreadBlocking(() -> tab.getView())); } PropertyModel askPermissionDialogModel = null; @@ -241,4 +254,33 @@ ThreadUtils.runOnUiThreadBlocking(() -> tab.removeObserver(permissionUpdateWaiter)); } + + /** + * This is a convenience method that automatically retrieves the {@link ChromeActivity} from the + * {@link PermissionTestRule} before running the test. + */ + public static void runTest( + final PermissionTestRule permissionTestRule, + final TestAndroidPermissionDelegate testAndroidPermissionDelegate, + final String testUrl, + final boolean expectPermissionAllowed, + final @PermissionTestRule.PromptDecision int promptDecision, + final boolean waitForMissingPermissionPrompt, + final boolean waitForUpdater, + final String javascriptToExecute, + final @StringRes int missingPermissionPromptTextId) + throws Exception { + final ChromeActivity activity = permissionTestRule.getActivity(); + runTest( + activity, + permissionTestRule, + testAndroidPermissionDelegate, + testUrl, + expectPermissionAllowed, + promptDecision, + waitForMissingPermissionPrompt, + waitForUpdater, + javascriptToExecute, + missingPermissionPromptTextId); + } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelImplTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelImplTest.java index a073f03a..7e44f95 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelImplTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelImplTest.java
@@ -172,6 +172,8 @@ @Test @SmallTest + // TODO(crbug.com/457847264): Change to @Restriction(DeviceFormFactor.PHONE) after launch + @DisableFeatures(ChromeFeatureList.ANDROID_OPEN_INCOGNITO_AS_WINDOW) public void validIndexAfterRestored_FromPreviousActivity_WithIncognitoTabs() { mPage = Journeys.createIncognitoTabsWithWebPages(mPage, List.of(mTestUrl)); @@ -1067,6 +1069,8 @@ @Test @SmallTest + // TODO(crbug.com/457847264): Change to @Restriction(DeviceFormFactor.PHONE) after launch + @DisableFeatures(ChromeFeatureList.ANDROID_OPEN_INCOGNITO_AS_WINDOW) public void testCloseIncognitoTabSwitchesToNormalModelAndUpdatesIncognitoIndex() { TabModel incognitoTabModel = mActivityTestRule.getActivity().getTabModelSelector().getModel(true); @@ -1567,6 +1571,8 @@ @Test @SmallTest + // TODO(crbug.com/457847264): Change to @Restriction(DeviceFormFactor.PHONE) after launch + @DisableFeatures(ChromeFeatureList.ANDROID_OPEN_INCOGNITO_AS_WINDOW) public void testSetMuteSetting_Incognito() { WebPageStation page = mPage.loadWebPageProgrammatically(mTestUrl); Journeys.createIncognitoTabsWithWebPages(page, List.of(mTestUrl));
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webauth/Fido2CredentialRequestTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webauth/Fido2CredentialRequestTest.java index 46fd720..cfff13a52 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/webauth/Fido2CredentialRequestTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webauth/Fido2CredentialRequestTest.java
@@ -431,16 +431,19 @@ Assert.assertEquals(mExpectedCredentialList.size(), credentialList.size()); for (int i = 0; i < credentialList.size(); i++) { Assert.assertEquals( - mExpectedCredentialList.get(0).mUserName, - credentialList.get(0).mUserName); + mExpectedCredentialList.get(i).mUserName, + credentialList.get(i).mUserName); Assert.assertEquals( - mExpectedCredentialList.get(0).mUserDisplayName, - credentialList.get(0).mUserDisplayName); + mExpectedCredentialList.get(i).mUserDisplayName, + credentialList.get(i).mUserDisplayName); Assert.assertArrayEquals( - mExpectedCredentialList.get(0).mCredentialId, - credentialList.get(0).mCredentialId); + mExpectedCredentialList.get(i).mCredentialId, + credentialList.get(i).mCredentialId); Assert.assertArrayEquals( - mExpectedCredentialList.get(0).mUserId, credentialList.get(0).mUserId); + mExpectedCredentialList.get(i).mUserId, credentialList.get(i).mUserId); + Assert.assertEquals( + mExpectedCredentialList.get(i).mLastUsedTimeMs, + credentialList.get(i).mLastUsedTimeMs); } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ai/AiAssistantServiceUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ai/AiAssistantServiceUnitTest.java index 886c906..1d12ed95 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/ai/AiAssistantServiceUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/ai/AiAssistantServiceUnitTest.java
@@ -77,6 +77,7 @@ import org.chromium.components.signin.identitymanager.IdentityManager; import org.chromium.content_public.browser.RenderFrameHost; import org.chromium.content_public.browser.WebContents; +import org.chromium.google_apis.gaia.GaiaId; import org.chromium.ui.base.TestActivity; import org.chromium.ui.widget.ToastManager; import org.chromium.url.JUnitTestGURLs; @@ -104,7 +105,6 @@ @Mock private Profile mProfile; @Mock private IdentityServicesProvider mIdentityServicesProvider; @Mock private IdentityManager mIdentityManager; - @Mock private CoreAccountInfo mAccountInfo; @Mock SystemAiProvider mSystemAiProvider; @Mock SystemAiProviderFactory mSystemAiProviderFactory; @Mock private InnerTextBridge.Natives mInnerTextNatives; @@ -578,11 +578,12 @@ } private void setClientEmail(String email) { - when(mIdentityManager.getPrimaryAccountInfo(anyInt())).thenReturn(mAccountInfo); - when(mAccountInfo.getEmail()).thenReturn(email); + CoreAccountInfo accountInfo = + CoreAccountInfo.createFromEmailAndGaiaId(email, new GaiaId("test-gaia-id")); + when(mIdentityManager.getPrimaryAccountInfo(anyInt())).thenReturn(accountInfo); AccountManagerFacadeProvider.setInstanceForTests(mMockFacade); mCapabilitiesPromise = new Promise<>(); - doReturn(mCapabilitiesPromise).when(mMockFacade).getAccountCapabilities(mAccountInfo); + doReturn(mCapabilitiesPromise).when(mMockFacade).getAccountCapabilities(accountInfo); } private void assertLaunchRequestIsForSummarizeUrl(
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStackerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStackerUnitTest.java index 004e2e70..f124c47f 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStackerUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStackerUnitTest.java
@@ -29,7 +29,6 @@ private static final float OFFSET_Y = 2; private static final float WIDTH = 100; private static final float FIRST_VIEW_IDEAL_X = -WIDTH - 1; - private static final float CACHED_TAB_WIDTH = 30; private final ScrollingStripStacker mTarget = new ScrollingStripStacker(); @Mock private StripLayoutTab mView1; @@ -110,8 +109,7 @@ mTarget.pushDrawPropertiesToViews(mInput, WIDTH / 2, 2 * WIDTH); // Move the window with xOffset = TAB_WIDTH / 2, will make both up to TAB_2 and TAB_4 - // partially - // invisible. TAB_5 will still be invisible in this case. + // partially invisible. TAB_5 will still be invisible in this case. verifyViews(Arrays.asList(mView1, mView5)); } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java index acabee2..adf4d669 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java
@@ -737,7 +737,7 @@ // Invoke the method. mStripLayoutHelperManager.getUpdatedSceneOverlayTree( - new RectF(), new RectF(), mRenderHost.getResourceManager(), 0f); + new RectF(), new RectF(), mRenderHost.getResourceManager()); // Verify the call to #pushAndUpdateStrip. verify(mTabStripTreeProvider) @@ -790,6 +790,7 @@ mStripLayoutHelperManager.setTabStripTreeProviderForTesting(mTabStripTreeProvider); float yOffset = 10; + doReturn((int) yOffset).when(mBrowserControlStateProvider).getTopControlOffset(); // With tab strip transition, the yOffset will be forced to be 0. mTabStripHeightSupplier.set(0); mStripLayoutHelperManager.onHeightChanged(0, /* applyScrimOverlay= */ true); @@ -798,7 +799,7 @@ StripLayoutHelperManager.TAB_STRIP_TRANSITION_INTERPOLATOR.getInterpolation( progress); mStripLayoutHelperManager.getUpdatedSceneOverlayTree( - new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset); + new RectF(), new RectF(), mRenderHost.getResourceManager()); verify(mTabStripTreeProvider) .pushAndUpdateStrip( any(), @@ -819,7 +820,7 @@ // tab strip height. mStripLayoutHelperManager.onHeightTransitionFinished(); mStripLayoutHelperManager.getUpdatedSceneOverlayTree( - new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset); + new RectF(), new RectF(), mRenderHost.getResourceManager()); verify(mTabStripTreeProvider) .pushAndUpdateStrip( any(), @@ -976,8 +977,9 @@ // The yOffset will be forced to be reduced by the tab strip height to be kept invisible. float yOffset = -10; + doReturn((int) yOffset).when(mBrowserControlStateProvider).getTopControlOffset(); mStripLayoutHelperManager.getUpdatedSceneOverlayTree( - new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset); + new RectF(), new RectF(), mRenderHost.getResourceManager()); verify(mTabStripTreeProvider) .pushAndUpdateStrip( any(), @@ -1004,7 +1006,7 @@ StripLayoutHelperManager.TAB_STRIP_TRANSITION_INTERPOLATOR.getInterpolation( progress); mStripLayoutHelperManager.getUpdatedSceneOverlayTree( - new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset); + new RectF(), new RectF(), mRenderHost.getResourceManager()); verify(mTabStripTreeProvider) .pushAndUpdateStrip( any(), @@ -1025,7 +1027,7 @@ // the layer should be offset to 0. mStripLayoutHelperManager.onHeightTransitionFinished(); mStripLayoutHelperManager.getUpdatedSceneOverlayTree( - new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset); + new RectF(), new RectF(), mRenderHost.getResourceManager()); verify(mTabStripTreeProvider) .pushAndUpdateStrip( any(), @@ -1486,8 +1488,9 @@ doReturn(false).when(mBrowserControlStateProvider).isVisibilityForced(); float yOffset = 10; + doReturn((int) yOffset).when(mBrowserControlStateProvider).getTopControlOffset(); mStripLayoutHelperManager.getUpdatedSceneOverlayTree( - new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset); + new RectF(), new RectF(), mRenderHost.getResourceManager()); // When visibility isn't forced, and when we're not in a height transition, the offset // should always be 0, to position the controls at their fully visible positions. @@ -1509,7 +1512,7 @@ doReturn(true).when(mBrowserControlStateProvider).isVisibilityForced(); mStripLayoutHelperManager.getUpdatedSceneOverlayTree( - new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset); + new RectF(), new RectF(), mRenderHost.getResourceManager()); // When visibility is forced, use the provided offset. verify(mTabStripTreeProvider)
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStackerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStackerUnitTest.java index e45106a..77e251936 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStackerUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStackerUnitTest.java
@@ -78,9 +78,9 @@ @Test public void testComputeNewTabButtonIdealXRtl() { LocalizationUtils.setRtlForTesting(true); - float expected_res = 3f; + float expectedRes = 3f; // Update drawX for RTL = ((mInput.length -1 ) * TAB_WIDTH) + BUTTON_WIDTH + - // expected_res = 4*25 + 10 + 3 + // expectedRes = 4*25 + 10 + 3 float drawX = 113f; for (StripLayoutTab tab : mInput) { when(tab.getDrawX()).thenReturn(drawX); @@ -95,7 +95,7 @@ STRIP_WIDTH, BUTTON_WIDTH, /* tabStripFull= */ true); - assertThat("New Tab button offset does not match", result, is(expected_res)); + assertThat("New Tab button offset does not match", result, is(expectedRes)); } @Test @@ -120,6 +120,6 @@ @Override public void pushDrawPropertiesToViews( - StripLayoutView[] indexOrderedViews, float xOffset, float visibleWidth) {} + StripLayoutView[] indexOrderedViews, float leftBound, float rightBound) {} } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorUnitTest.java index bb30abcc..3c5af767 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorUnitTest.java
@@ -45,8 +45,8 @@ import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; -import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.identitymanager.IdentityManager; +import org.chromium.components.signin.test.util.TestAccounts; import java.util.ArrayList; import java.util.Arrays; @@ -61,13 +61,11 @@ @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); @Mock private Activity mActivity; @Mock private Profile mProfile; - @Mock private CoreAccountInfo mAccountInfo; // Test constants. private static final String CATEGORY_TAG = "category_tag"; private static final String DESCRIPTION = "description"; private static final String FEEDBACK_CONTEXT = "feedback_context"; - private static final String ACCOUNT_IN_USE = "foo@gmail.com"; private static final String KEY_1 = "key1"; private static final String KEY_2 = "key2"; private static final String KEY_3 = "key3"; @@ -278,14 +276,13 @@ @Before public void setUp() { - when(mAccountInfo.getEmail()).thenReturn(ACCOUNT_IN_USE); IdentityServicesProvider.setInstanceForTests(mock(IdentityServicesProvider.class)); when(IdentityServicesProvider.get().getIdentityManager(any())) .thenReturn(mock(IdentityManager.class)); when(IdentityServicesProvider.get() .getIdentityManager(any()) .getPrimaryAccountInfo(anyInt())) - .thenReturn(mAccountInfo); + .thenReturn(TestAccounts.ACCOUNT1); } @Test @@ -384,7 +381,7 @@ assertEquals(CATEGORY_TAG, collector.getCategoryTag()); assertEquals(DESCRIPTION, collector.getDescription()); assertNull(collector.getScreenshot()); - assertEquals(ACCOUNT_IN_USE, collector.getAccountInUse()); + assertEquals(TestAccounts.ACCOUNT1.getEmail(), collector.getAccountInUse()); }); }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java index 6cb0d54..53d40ec 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java
@@ -37,8 +37,8 @@ import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; -import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.identitymanager.IdentityManager; +import org.chromium.components.signin.test.util.TestAccounts; import java.util.ArrayList; import java.util.HashMap; @@ -54,7 +54,6 @@ // Enable the Features class, so we can override command line switches in the test. @Mock private Activity mActivity; @Mock private Profile mProfile; - @Mock private CoreAccountInfo mAccountInfo; // Test constants. private static final String CATEGORY_TAG = "category_tag"; @@ -113,14 +112,13 @@ @Before public void setUp() { ThreadUtils.setUiThread(Looper.getMainLooper()); - when(mAccountInfo.getEmail()).thenReturn(null); IdentityServicesProvider.setInstanceForTests(mock(IdentityServicesProvider.class)); when(IdentityServicesProvider.get().getIdentityManager(any())) .thenReturn(mock(IdentityManager.class)); when(IdentityServicesProvider.get() .getIdentityManager(any()) .getPrimaryAccountInfo(anyInt())) - .thenReturn(mAccountInfo); + .thenReturn(TestAccounts.ACCOUNT1); } @Test
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinatorUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinatorUnitTest.java index df4e4a4c..56093fd 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinatorUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinatorUnitTest.java
@@ -282,7 +282,7 @@ mView.findViewById(R.id.tips_promo_settings_button).performClick(); verify(mBottomSheetController).hideContent(any(), eq(true)); - verify(mSettingsNavigation).startSettings(eq(mActivity), any()); + verify(mSettingsNavigation).startSettings(eq(mActivity), any(), any()); histogramWatcher.assertExpected(); }
diff --git a/chrome/android/profiles/arm.newest.txt b/chrome/android/profiles/arm.newest.txt index 14a177fa..09c10ff 100644 --- a/chrome/android/profiles/arm.newest.txt +++ b/chrome/android/profiles/arm.newest.txt
@@ -1 +1 @@ -chromeos-chrome-arm-144.0.7530.0_pre1545745_rc-r1-merged.afdo.bz2 +chromeos-chrome-arm-144.0.7532.0_pre1546354_rc-r1-merged.afdo.bz2
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt index 924fd33..aeacd076 100644 --- a/chrome/android/profiles/newest.txt +++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-144.0.7530.0_pre1545745_rc-r1-merged.afdo.bz2 +chromeos-chrome-amd64-144.0.7532.0_pre1546354_rc-r1-merged.afdo.bz2
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 609dbda8d..7a42be7a 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -17366,14 +17366,12 @@ </if> <!-- Download open confirmation dialog --> - <if expr="not is_android"> - <message name="IDS_DOWNLOAD_OPEN_CONFIRMATION_DIALOG_TITLE" desc="Title of the dialog prompt shown to users when an extension is trying to open a downloaded file."> - Open download - </message> - <message name="IDS_DOWNLOAD_OPEN_CONFIRMATION_DIALOG_MESSAGE" desc="Text of the message of the download open confirmation dialog."> - Allow <ph name="EXTENSION_NAME">$1<ex>Download Viewer</ex></ph> to open <ph name="FILE_NAME">$2<ex>abc.jpg</ex></ph>? - </message> - </if> + <message name="IDS_DOWNLOAD_OPEN_CONFIRMATION_DIALOG_TITLE" desc="Title of the dialog prompt shown to users when an extension is trying to open a downloaded file."> + Open download + </message> + <message name="IDS_DOWNLOAD_OPEN_CONFIRMATION_DIALOG_MESSAGE" desc="Text of the message of the download open confirmation dialog."> + Allow <ph name="EXTENSION_NAME">$1<ex>Download Viewer</ex></ph> to open <ph name="FILE_NAME">$2<ex>abc.jpg</ex></ph>? + </message> <message name="IDS_CONFIRM_FILE_UPLOAD_TITLE" desc="Title of dialog for confirming that many files are about to be uploaded / given to the site. [ICU Syntax]"> {0, plural,
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 3cea657..6453cc3 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -462,6 +462,8 @@ "enterprise/core/dependency_factory_impl.h", "enterprise/data_protection/view_source_navigation_throttle.cc", "enterprise/data_protection/view_source_navigation_throttle.h", + "enterprise/encryption/cache_encryption_provider_impl.cc", + "enterprise/encryption/cache_encryption_provider_impl.h", "enterprise/identifiers/profile_id_delegate_impl.cc", "enterprise/identifiers/profile_id_delegate_impl.h", "enterprise/identifiers/profile_id_service_factory.cc", @@ -929,8 +931,6 @@ "page_load_metrics/observers/webui_page_load_metrics_observer.h", "page_load_metrics/page_load_metrics_initialize.cc", "page_load_metrics/page_load_metrics_initialize.h", - "page_load_metrics/page_load_metrics_memory_tracker_factory.cc", - "page_load_metrics/page_load_metrics_memory_tracker_factory.h", "password_manager/account_password_store_factory.cc", "password_manager/chrome_password_change_service.cc", "password_manager/chrome_password_change_service.h", @@ -3797,8 +3797,6 @@ "download/download_dir_policy_handler.h", "download/download_dir_util.cc", "download/download_dir_util.h", - "download/download_open_dialog.cc", - "download/download_open_dialog.h", "download/download_ui_enterprise_util.cc", "download/download_ui_enterprise_util.h", "download/download_warning_desktop_hats_utils.cc", @@ -6513,6 +6511,7 @@ "//chrome/browser/webnn", "//chrome/browser/win:cloud_synced_folder_checker", "//chrome/browser/win:mica_titlebar", + "//chrome/browser/win:registry_watcher", "//chrome/browser/win/conflicts:module_info", "//chrome/chrome_elf:constants", "//chrome/chrome_elf:dll_hash",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index a2e7bd62..7ee0ac31 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -5123,6 +5123,35 @@ }; #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) +const FeatureEntry::FeatureParam + kProfileCreationFrictionReductionRemoveSigninStep[] = { + {"profile-creation-friction-reduction-variation", + "remove-signin-step"}}; +const FeatureEntry::FeatureParam + kProfileCreationFrictionReductionPrefillNameRequirement[] = { + {"profile-creation-friction-reduction-variation", + "prefill-name-requirement"}}; +const FeatureEntry::FeatureParam + kProfileCreationFrictionReductionSkipCustomizeProfileStep[] = { + {"profile-creation-friction-reduction-variation", + "skip-customize-profile-step"}}; + +const FeatureEntry::FeatureVariation + kProfileCreationFrictionReductionVariations[] = { + {"- Remove sign-in step", + kProfileCreationFrictionReductionRemoveSigninStep, + std::size(kProfileCreationFrictionReductionRemoveSigninStep), nullptr}, + {"- Prefill profile name requirement", + kProfileCreationFrictionReductionPrefillNameRequirement, + std::size(kProfileCreationFrictionReductionPrefillNameRequirement), + nullptr}, + {"- Skip customize profile step", + kProfileCreationFrictionReductionSkipCustomizeProfileStep, + std::size(kProfileCreationFrictionReductionSkipCustomizeProfileStep), + nullptr}}; +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) + #if BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kAndroidDesktopZoomScalingFactorSmall[] = { {"desktop-zoom-scaling-factor", "109"}, @@ -7524,15 +7553,6 @@ kPageContentAnnotationsVariations, "PageContentAnnotations")}, - {"page-content-annotations-persist-salient-image-metadata", - flag_descriptions::kPageContentAnnotationsPersistSalientImageMetadataName, - flag_descriptions:: - kPageContentAnnotationsPersistSalientImageMetadataDescription, - kOsDesktop, - FEATURE_VALUE_TYPE( - page_content_annotations::features:: - kPageContentAnnotationsPersistSalientImageMetadata)}, - {"page-content-annotations-remote-page-metadata", flag_descriptions::kPageContentAnnotationsRemotePageMetadataName, flag_descriptions::kPageContentAnnotationsRemotePageMetadataDescription, @@ -13404,6 +13424,17 @@ #endif #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) + {"profile-creation-friction-reduction-experiment", + flag_descriptions::kProfileCreationFrictionReductionExperimentName, + flag_descriptions::kProfileCreationFrictionReductionExperimentDescription, + kOsLinux | kOsMac | kOsWin, + FEATURE_WITH_PARAMS_VALUE_TYPE( + switches::kProfileCreationFrictionReductionExperiment, + kProfileCreationFrictionReductionVariations, + "ProfileCreationFrictionReductionExperiment")}, +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) + +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) {"profile-picker-text-variations", flag_descriptions::kProfilePickerTextVariationsName, flag_descriptions::kProfilePickerTextVariationsDescription,
diff --git a/chrome/browser/accessibility/media_app/ax_media_app_untrusted_service.cc b/chrome/browser/accessibility/media_app/ax_media_app_untrusted_service.cc index 5d19607..d07716b 100644 --- a/chrome/browser/accessibility/media_app/ax_media_app_untrusted_service.cc +++ b/chrome/browser/accessibility/media_app/ax_media_app_untrusted_service.cc
@@ -493,6 +493,7 @@ case ax::mojom::Action::kStopDuckingMedia: case ax::mojom::Action::kSuspendMedia: case ax::mojom::Action::kLongClick: + case ax::mojom::Action::kRequestLayoutBasedAction: NOTIMPLEMENTED(); return; }
diff --git a/chrome/browser/actor/tools/attempt_login_tool_interactive_ui_test.cc b/chrome/browser/actor/tools/attempt_login_tool_interactive_ui_test.cc index a6b31f4..763570f 100644 --- a/chrome/browser/actor/tools/attempt_login_tool_interactive_ui_test.cc +++ b/chrome/browser/actor/tools/attempt_login_tool_interactive_ui_test.cc
@@ -334,8 +334,10 @@ EXPECT_TRUE(mock_login_service().last_permission_was_permanent()); } -// TODO(https://crbug.com/456675144): Flaky on asan and Wayland. -#if defined(ADDRESS_SANITIZER) || defined(IS_LINUX) +// TODO(https://crbug.com/456675144): Flaky on asan. +// This test does not work on Wayland, but setting SetOnIncompatibleAction does +// not seem to skip the test, so we just disable on linux for now. +#if defined(ADDRESS_SANITIZER) || BUILDFLAG(IS_LINUX) #define MAYBE_HandleReauth DISABLED_HandleReauth #else #define MAYBE_HandleReauth HandleReauth
diff --git a/chrome/browser/actor/tools/select_tool_interactive_ui_test.cc b/chrome/browser/actor/tools/select_tool_interactive_ui_test.cc index d2c1247..6cd54f2 100644 --- a/chrome/browser/actor/tools/select_tool_interactive_ui_test.cc +++ b/chrome/browser/actor/tools/select_tool_interactive_ui_test.cc
@@ -39,32 +39,32 @@ // shown, the UI thread is blocked. See `PopupMenuHelper::ShowPopupMenu()`. // Disable this test on Mac for now until there is a test-only PopupMenuHelper // that's not blocking. -// -// TODO(crbug.com/439317652): this is flaky on all platforms. IN_PROC_BROWSER_TEST_F(ActorSelectToolBrowserTest, - DISABLED_SelectToolCloseDropDownMenu) { + SelectToolCloseDropDownMenu) { const GURL url = embedded_test_server()->GetURL("/actor/select_tool.html"); ASSERT_TRUE(content::NavigateToURL(web_contents(), url)); - SimulateEndOfPaintHoldingOnPrimaryMainFrame(web_contents()); - - // Click on the dropdown menu. content::ShowPopupWidgetWaiter new_popup_waiter( web_contents(), web_contents()->GetPrimaryMainFrame()); - content::SimulateMouseClickAt( - web_contents(), /*modifiers=*/0, blink::WebMouseEvent::Button::kLeft, - gfx::ToFlooredPoint( - GetCenterCoordinatesOfElementWithId(web_contents(), "plainSelect"))); + + // Click on the dropdown menu. + std::unique_ptr<ToolRequest> click_action = MakeClickRequest( + *active_tab(), gfx::ToFlooredPoint(GetCenterCoordinatesOfElementWithId( + web_contents(), "plainSelect"))); + ActResultFuture click_result; + actor_task().Act(ToRequestList(click_action), click_result.GetCallback()); + ExpectOkResult(click_result); + new_popup_waiter.Wait(); ASSERT_FALSE(new_popup_waiter.last_initial_rect().IsEmpty()); // Wait for the dropdown to close. const int32_t plain_select_dom_node_id = GetDOMNodeId(*main_frame(), "#plainSelect").value(); - std::unique_ptr<ToolRequest> action = + std::unique_ptr<ToolRequest> select_action = MakeSelectRequest(*main_frame(), plain_select_dom_node_id, "beta"); - ActResultFuture result; - actor_task().Act(ToRequestList(action), result.GetCallback()); - ExpectOkResult(result); + ActResultFuture select_result; + actor_task().Act(ToRequestList(select_action), select_result.GetCallback()); + ExpectOkResult(select_result); ASSERT_TRUE(base::test::RunUntil( [&]() { return GetPopupWidgets(web_contents()).empty(); })); }
diff --git a/chrome/browser/actor/ui/BUILD.gn b/chrome/browser/actor/ui/BUILD.gn index 8cf181d..4c4b3062 100644 --- a/chrome/browser/actor/ui/BUILD.gn +++ b/chrome/browser/actor/ui/BUILD.gn
@@ -82,6 +82,7 @@ public = [ "states/actor_overlay_state.h", "states/handoff_button_state.h", + "states/tab_indicator_state.h", ] public_deps = [ "//chrome/browser/actor:types" ]
diff --git a/chrome/browser/actor/ui/actor_ui_state_manager.cc b/chrome/browser/actor/ui/actor_ui_state_manager.cc index 61249b19..7019cdc 100644 --- a/chrome/browser/actor/ui/actor_ui_state_manager.cc +++ b/chrome/browser/actor/ui/actor_ui_state_manager.cc
@@ -40,7 +40,17 @@ static const UiTabState kActorState = { .actor_overlay = {.is_active = true, .border_glow_visible = true}, .handoff_button = {.is_active = true, .controller = kActor}, - .tab_indicator_visible = true, + .tab_indicator = TabIndicatorStatus::kDynamic, + .border_glow_visible = true, + }; + return kActorState; +} + +const UiTabState& GetWaitingOnUserUiTabState() { + static const UiTabState kActorState = { + .actor_overlay = {.is_active = true, .border_glow_visible = true}, + .handoff_button = {.is_active = true, .controller = kActor}, + .tab_indicator = TabIndicatorStatus::kStatic, .border_glow_visible = true, }; return kActorState; @@ -52,7 +62,7 @@ .handoff_button = {.is_active = !base::FeatureList::IsEnabled( features::kGlicHandoffButtonHiddenClientControl), .controller = kClient}, - .tab_indicator_visible = false, + .tab_indicator = TabIndicatorStatus::kNone, .border_glow_visible = false, }; return kPausedState; @@ -62,7 +72,7 @@ static const UiTabState kCompletedState = { .actor_overlay = {.is_active = false, .border_glow_visible = false}, .handoff_button = {.is_active = false, .controller = kClient}, - .tab_indicator_visible = false, + .tab_indicator = TabIndicatorStatus::kNone, .border_glow_visible = false, }; return kCompletedState; @@ -136,9 +146,11 @@ << "Task state should never be set to kCreated from another state."; case ActorTask::State::kActing: case ActorTask::State::kReflecting: - case ActorTask::State::kWaitingOnUser: ui_tab_state = GetActorControlledUiTabState(); break; + case ActorTask::State::kWaitingOnUser: + ui_tab_state = GetWaitingOnUserUiTabState(); + break; case ActorTask::State::kPausedByUser: case ActorTask::State::kPausedByActor: ui_tab_state = GetPausedUiTabState();
diff --git a/chrome/browser/actor/ui/actor_ui_state_manager_unittest.cc b/chrome/browser/actor/ui/actor_ui_state_manager_unittest.cc index 15e61b2..6caa145 100644 --- a/chrome/browser/actor/ui/actor_ui_state_manager_unittest.cc +++ b/chrome/browser/actor/ui/actor_ui_state_manager_unittest.cc
@@ -216,47 +216,54 @@ UiTabState{ .actor_overlay = {.is_active = true, .border_glow_visible = true}, .handoff_button = {.is_active = true, .controller = kActor}, - .tab_indicator_visible = true, + .tab_indicator = TabIndicatorStatus::kDynamic, .border_glow_visible = true, }}, {ActorTask::State::kReflecting, UiTabState{ .actor_overlay = {.is_active = true, .border_glow_visible = true}, .handoff_button = {.is_active = true, .controller = kActor}, - .tab_indicator_visible = true, + .tab_indicator = TabIndicatorStatus::kDynamic, + .border_glow_visible = true, + }}, + {ActorTask::State::kWaitingOnUser, + UiTabState{ + .actor_overlay = {.is_active = true, .border_glow_visible = true}, + .handoff_button = {.is_active = true, .controller = kActor}, + .tab_indicator = TabIndicatorStatus::kStatic, .border_glow_visible = true, }}, {ActorTask::State::kPausedByActor, UiTabState{ .actor_overlay = {.is_active = false, .border_glow_visible = false}, .handoff_button = {.is_active = false, .controller = kClient}, - .tab_indicator_visible = false, + .tab_indicator = TabIndicatorStatus::kNone, .border_glow_visible = false, }}, {ActorTask::State::kPausedByUser, UiTabState{ .actor_overlay = {.is_active = false, .border_glow_visible = false}, .handoff_button = {.is_active = false, .controller = kClient}, - .tab_indicator_visible = false, + .tab_indicator = TabIndicatorStatus::kNone, .border_glow_visible = false, }}, {ActorTask::State::kCancelled, UiTabState{ .actor_overlay = {.is_active = false, .border_glow_visible = false}, .handoff_button = {.is_active = false}, - .tab_indicator_visible = false, + .tab_indicator = TabIndicatorStatus::kNone, }}, {ActorTask::State::kFailed, UiTabState{ .actor_overlay = {.is_active = false, .border_glow_visible = false}, .handoff_button = {.is_active = false}, - .tab_indicator_visible = false, + .tab_indicator = TabIndicatorStatus::kNone, }}, {ActorTask::State::kFinished, UiTabState{ .actor_overlay = {.is_active = false, .border_glow_visible = false}, .handoff_button = {.is_active = false}, - .tab_indicator_visible = false, + .tab_indicator = TabIndicatorStatus::kNone, .border_glow_visible = false, }}}; @@ -285,7 +292,7 @@ UiTabState expected_ui_tab_state{ .actor_overlay = {.is_active = true, .border_glow_visible = true}, .handoff_button = {.is_active = true, .controller = kActor}, - .tab_indicator_visible = true, + .tab_indicator = TabIndicatorStatus::kDynamic, .border_glow_visible = true, }; VerifyUiEvent(StartingToActOnTab{mock_tab().GetHandle(), TaskId(123)}, @@ -297,7 +304,7 @@ UiTabState expected_ui_tab_state{ .actor_overlay = {.is_active = false}, .handoff_button = {.is_active = false}, - .tab_indicator_visible = false, + .tab_indicator = TabIndicatorStatus::kNone, .border_glow_visible = false, }; VerifyUiEvent(StoppedActingOnTab{mock_tab().GetHandle()}, @@ -312,7 +319,7 @@ .mouse_down = false, .mouse_target = gfx::Point(100, 200)}, .handoff_button = {.is_active = true, .controller = kActor}, - .tab_indicator_visible = true, + .tab_indicator = TabIndicatorStatus::kDynamic, .border_glow_visible = true, }; VerifyUiEvent(MouseMove{mock_tab().GetHandle(), gfx::Point(100, 200), @@ -327,7 +334,7 @@ .border_glow_visible = true, .mouse_down = true}, .handoff_button = {.is_active = true, .controller = kActor}, - .tab_indicator_visible = true, + .tab_indicator = TabIndicatorStatus::kDynamic, .border_glow_visible = true, }; VerifyUiEvent(MouseClick{mock_tab().GetHandle(), MouseClickType::kLeft,
diff --git a/chrome/browser/actor/ui/actor_ui_tab_controller.cc b/chrome/browser/actor/ui/actor_ui_tab_controller.cc index d657bba..c485445 100644 --- a/chrome/browser/actor/ui/actor_ui_tab_controller.cc +++ b/chrome/browser/actor/ui/actor_ui_tab_controller.cc
@@ -88,11 +88,6 @@ UpdateUi(std::move(callback)); } -bool ActorUiTabController::ShouldShowActorTabIndicator() { - return features::kGlicActorUiTabIndicator.Get() && - should_show_actor_tab_indicator_; -} - void ActorUiTabController::OnTabWillDetach( tabs::TabInterface* tab_interface, tabs::TabInterface::DetachReason reason) { @@ -167,17 +162,16 @@ } void ActorUiTabController::SetActorTabIndicatorVisibility( - bool should_show_tab_indicator, + TabIndicatorStatus tab_indicator_status, base::OnceClosure callback) { // When GLIC isn't enabled, we never set the tab indicator. - // TODO(crbug.com/422538779) remove GLIC dependency once the ACTOR_ACCESSING + // TODO(crbug.com/461457730) remove GLIC dependency once the ACTOR_ACCESSING // alert migrates away from the GLIC_ACCESSING resources. #if BUILDFLAG(ENABLE_GLIC) - if (should_show_actor_tab_indicator_ != should_show_tab_indicator) { - should_show_actor_tab_indicator_ = should_show_tab_indicator; + if (tab_indicator_ != tab_indicator_status) { + tab_indicator_ = tab_indicator_status; if (on_actor_tab_indicator_changed_callback_) { - on_actor_tab_indicator_changed_callback_.Run( - should_show_actor_tab_indicator_); + on_actor_tab_indicator_changed_callback_.Run(tab_indicator_); // Notify tab strip model of state change. tab_->GetBrowserWindowInterface()->GetTabStripModel()->NotifyTabChanged( base::to_address(tab_), TabChangeType::kAll); @@ -218,7 +212,7 @@ } // Tab Indicator if (features::kGlicActorUiTabIndicator.Get()) { - SetActorTabIndicatorVisibility(current_ui_tab_state_.tab_indicator_visible, + SetActorTabIndicatorVisibility(current_ui_tab_state_.tab_indicator, concurrent_closures.CreateClosure()); } // Border Glow
diff --git a/chrome/browser/actor/ui/actor_ui_tab_controller.h b/chrome/browser/actor/ui/actor_ui_tab_controller.h index ef320ca0..b689023 100644 --- a/chrome/browser/actor/ui/actor_ui_tab_controller.h +++ b/chrome/browser/actor/ui/actor_ui_tab_controller.h
@@ -48,7 +48,6 @@ void OnHandoffButtonHoverStatusChanged() override; void OnHandoffButtonFocusStatusChanged() override; UiTabState GetCurrentUiTabState() const override; - bool ShouldShowActorTabIndicator() override; // ImmersiveModeController::Observer void OnImmersiveFullscreenEntered() override; @@ -92,7 +91,7 @@ void OnUpdateFinished(); // Sets the Tab Indicator visibility. - void SetActorTabIndicatorVisibility(bool should_show_tab_indicator, + void SetActorTabIndicatorVisibility(TabIndicatorStatus tab_indicator_status, base::OnceClosure callback); // Sets the Border Glow visibility. @@ -151,7 +150,7 @@ std::unique_ptr<HandoffButtonController> handoff_button_controller_; std::unique_ptr<ActorUiTabControllerFactoryInterface> controller_factory_; - bool should_show_actor_tab_indicator_ = false; + TabIndicatorStatus tab_indicator_ = TabIndicatorStatus::kNone; base::RetainingOneShotTimer update_scrim_background_debounce_timer_; ::ui::ScopedUnownedUserData<ActorUiTabController> scoped_unowned_user_data_;
diff --git a/chrome/browser/actor/ui/actor_ui_tab_controller_browsertest.cc b/chrome/browser/actor/ui/actor_ui_tab_controller_browsertest.cc index e0dfc738..14071678 100644 --- a/chrome/browser/actor/ui/actor_ui_tab_controller_browsertest.cc +++ b/chrome/browser/actor/ui/actor_ui_tab_controller_browsertest.cc
@@ -29,9 +29,11 @@ #include "chrome/common/actor.mojom.h" #include "chrome/common/actor/task_id.h" #include "chrome/common/chrome_features.h" +#include "chrome/common/webui_url_constants.h" #include "chrome/test/base/in_process_browser_test.h" #include "components/tabs/public/tab_interface.h" #include "content/public/test/browser_test.h" +#include "ui/base/page_transition_types.h" #include "ui/views/controls/animated_image_view.h" #include "url/gurl.h" @@ -150,6 +152,75 @@ } IN_PROC_BROWSER_TEST_F(ActorUiTabControllerTest, + TabSpinnerNotVisibleWhenWaitingOnUser) { + // Start task on tab. + auto* actor_service = actor::ActorKeyedService::Get(browser()->GetProfile()); + actor_service->GetPolicyChecker().SetActOnWebForTesting(true); + actor::TaskId task_id = actor_service->CreateTask(); + actor::ActorTask* task = actor_service->GetTask(task_id); + actor::ui::StartTask start_task_event(task_id); + actor_service->GetActorUiStateManager()->OnUiEvent(start_task_event); + // Need to wait for the AUSM to notify the GlicActorTaskIconManager. + base::PlatformThread::Sleep(actor::ui::kProfileScopedUiUpdateDebounceDelay); + + ASSERT_TRUE(AddTabAtIndexToBrowser(browser(), 0, + GURL(chrome::kChromeUINewTabURL), + ::ui::PAGE_TRANSITION_LINK)); + auto* tab_one = browser()->GetTabStripModel()->GetTabAtIndex(0); + base::RunLoop loop; + task->AddTab( + tab_one->GetHandle(), + base::BindLambdaForTesting([&](actor::mojom::ActionResultPtr result) { + EXPECT_TRUE(actor::IsOk(*result)); + loop.Quit(); + })); + loop.Run(); + + tabs::TabAlertController* const tab_alert_controller = + tabs::TabAlertController::From(tab_one); + + // The indicator should be visible on the actuating tab. + EXPECT_TRUE( + tab_alert_controller->IsAlertActive(tabs::TabAlert::kActorAccessing)); + ASSERT_NE(GetSpinner(), nullptr); + EXPECT_EQ(GetSpinner()->state(), views::AnimatedImageView::State::kPlaying); + EXPECT_TRUE(GetSpinner()->GetVisible()); + EXPECT_FALSE(GetSpinner()->bounds().IsEmpty()); + EXPECT_TRUE(GetSpinner() + ->animated_image() + ->GetPlaybackConfig() + ->ignore_reduced_motion); + + // Wait for user event. + actor_service->GetActorUiStateManager()->OnUiEvent( + actor::ui::TaskStateChanged( + task_id, actor::ActorTask::State::kWaitingOnUser, /*title=*/"")); + // Need to wait for the AUSM to notify the GlicActorTaskIconManager. + base::PlatformThread::Sleep(actor::ui::kProfileScopedUiUpdateDebounceDelay); + + // The static icon should be visible, but not the spinner. + EXPECT_TRUE( + tab_alert_controller->IsAlertActive(tabs::TabAlert::kActorWaitingOnUser)); + EXPECT_FALSE( + tab_alert_controller->IsAlertActive(tabs::TabAlert::kActorAccessing)); + EXPECT_EQ(GetSpinner()->state(), views::AnimatedImageView::State::kStopped); + + // Restart the task + actor_service->GetActorUiStateManager()->OnUiEvent( + actor::ui::TaskStateChanged(task_id, actor::ActorTask::State::kActing, + /*title=*/"")); + // Need to wait for the AUSM to notify the GlicActorTaskIconManager. + base::PlatformThread::Sleep(actor::ui::kProfileScopedUiUpdateDebounceDelay); + + // State should return to before WaitingOnUser + EXPECT_TRUE( + tab_alert_controller->IsAlertActive(tabs::TabAlert::kActorAccessing)); + ASSERT_NE(GetSpinner(), nullptr); + EXPECT_EQ(GetSpinner()->state(), views::AnimatedImageView::State::kPlaying); + EXPECT_TRUE(GetSpinner()->GetVisible()); +} + +IN_PROC_BROWSER_TEST_F(ActorUiTabControllerTest, RecordsUserActionOnActiveStatusChange) { TaskId task_id = actor_keyed_service()->CreateTask();
diff --git a/chrome/browser/actor/ui/actor_ui_tab_controller_interface.h b/chrome/browser/actor/ui/actor_ui_tab_controller_interface.h index d29d5da..d79a6c0 100644 --- a/chrome/browser/actor/ui/actor_ui_tab_controller_interface.h +++ b/chrome/browser/actor/ui/actor_ui_tab_controller_interface.h
@@ -9,6 +9,7 @@ #include "base/time/time.h" #include "chrome/browser/actor/ui/states/actor_overlay_state.h" #include "chrome/browser/actor/ui/states/handoff_button_state.h" +#include "chrome/browser/actor/ui/states/tab_indicator_state.h" #include "chrome/common/actor/task_id.h" #include "components/tabs/public/tab_interface.h" #include "ui/base/unowned_user_data/scoped_unowned_user_data.h" @@ -21,7 +22,7 @@ bool operator==(const UiTabState& other) const = default; ActorOverlayState actor_overlay; HandoffButtonState handoff_button; - bool tab_indicator_visible = false; + TabIndicatorStatus tab_indicator = TabIndicatorStatus::kNone; // TODO(crbug.com/447114657) Deprecate the Tab Level border_glow_visible as it // is now part of the Overlay. bool border_glow_visible = false; @@ -43,8 +44,8 @@ return os << "UiTabState{\n" << " actor_overlay: " << state.actor_overlay << ",\n" << " handoff_button: " << state.handoff_button << "\n" - << " tab_indicator_visible: " << state.tab_indicator_visible - << "\n" + << " tab_indicator_status: " + << static_cast<int>(state.tab_indicator) << "\n" << " border_glow_visible: " << state.border_glow_visible << "\n" << "}"; } @@ -93,9 +94,6 @@ // Called when the focus status changes on the handoff button. virtual void OnHandoffButtonFocusStatusChanged() = 0; - // Returns whether the tab should show the actor tab indicator. - virtual bool ShouldShowActorTabIndicator() = 0; - virtual base::WeakPtr<ActorUiTabControllerInterface> GetWeakPtr() = 0; // Retrieves an ActorUiTabControllerInterface from the provided tab, or @@ -107,7 +105,7 @@ // Callbacks: using ActorTabIndicatorStateChangedCallback = - base::RepeatingCallback<void(bool)>; + base::RepeatingCallback<void(TabIndicatorStatus)>; [[nodiscard]] virtual base::ScopedClosureRunner RegisterActorTabIndicatorStateChangedCallback( ActorTabIndicatorStateChangedCallback callback) = 0;
diff --git a/chrome/browser/actor/ui/actor_ui_tab_controller_unittest.cc b/chrome/browser/actor/ui/actor_ui_tab_controller_unittest.cc index eb4ff95..5e1afe0 100644 --- a/chrome/browser/actor/ui/actor_ui_tab_controller_unittest.cc +++ b/chrome/browser/actor/ui/actor_ui_tab_controller_unittest.cc
@@ -328,18 +328,20 @@ HandoffButtonState handoff_button_state( true, HandoffButtonState::ControlOwnership::kActor); ActorOverlayState actor_overlay_state{.is_active = true}; - UiTabState ui_tab_state_glow_on(actor_overlay_state, handoff_button_state, - /*tab_indicator_visible=*/false, - /*border_glow_visible=*/true); + UiTabState ui_tab_state_glow_on( + actor_overlay_state, handoff_button_state, + /*tab_indicator_visible=*/TabIndicatorStatus::kNone, + /*border_glow_visible=*/true); EXPECT_CALL(callback, Call(&mock_tab(), true)); tab_controller()->OnUiTabStateChange(ui_tab_state_glow_on, base::DoNothing()); testing::Mock::VerifyAndClearExpectations(&callback); - UiTabState ui_tab_state_glow_off(actor_overlay_state, handoff_button_state, - /*tab_indicator_visible=*/false, - /*border_glow_visible=*/false); + UiTabState ui_tab_state_glow_off( + actor_overlay_state, handoff_button_state, + /*tab_indicator_visible=*/TabIndicatorStatus::kNone, + /*border_glow_visible=*/false); EXPECT_CALL(callback, Call(&mock_tab(), false)); tab_controller()->OnUiTabStateChange(ui_tab_state_glow_off, base::DoNothing()); @@ -541,7 +543,7 @@ auto valid_overlay_state_cb = base::BindRepeating([](bool, ActorOverlayState, base::OnceClosure) {}); auto valid_overlay_bg_cb = base::BindRepeating([](bool) {}); - auto valid_tab_indicator_cb = base::BindRepeating([](bool) {}); + auto valid_tab_indicator_cb = base::BindRepeating([](TabIndicatorStatus) {}); // The test fixture's SetUpDefaultOverlayExpectations() method already // registers a default overlay callback. This verifies that attempting to
diff --git a/chrome/browser/actor/ui/mocks/mock_actor_ui_tab_controller.h b/chrome/browser/actor/ui/mocks/mock_actor_ui_tab_controller.h index 8f5b759..3a714a4d 100644 --- a/chrome/browser/actor/ui/mocks/mock_actor_ui_tab_controller.h +++ b/chrome/browser/actor/ui/mocks/mock_actor_ui_tab_controller.h
@@ -51,9 +51,8 @@ MOCK_METHOD(void, OnHandoffButtonHoverStatusChanged, (), (override)); MOCK_METHOD(void, OnHandoffButtonFocusStatusChanged, (), (override)); - MOCK_METHOD(bool, ShouldShowActorTabIndicator, (), (override)); using ActorTabIndicatorStateChangedCallback = - base::RepeatingCallback<void(bool)>; + base::RepeatingCallback<void(TabIndicatorStatus)>; MOCK_METHOD(base::ScopedClosureRunner, RegisterActorTabIndicatorStateChangedCallback, (ActorTabIndicatorStateChangedCallback callback),
diff --git a/chrome/browser/actor/ui/states/tab_indicator_state.h b/chrome/browser/actor/ui/states/tab_indicator_state.h new file mode 100644 index 0000000..ec641ad8 --- /dev/null +++ b/chrome/browser/actor/ui/states/tab_indicator_state.h
@@ -0,0 +1,20 @@ +// 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_ACTOR_UI_STATES_TAB_INDICATOR_STATE_H_ +#define CHROME_BROWSER_ACTOR_UI_STATES_TAB_INDICATOR_STATE_H_ + +namespace actor::ui { +// Enum for status of the tab indicator (icon to the right of the tab title). +enum class TabIndicatorStatus { + // Not visible. + kNone, + // Icon visible. Spinner not visible. + kStatic, + // Spinner visible. Icon not visible. + kDynamic, +}; +} // namespace actor::ui + +#endif // CHROME_BROWSER_ACTOR_UI_STATES_TAB_INDICATOR_STATE_H_
diff --git a/chrome/browser/actor/ui/task_list_bubble/actor_task_list_bubble_interactive_uitest.cc b/chrome/browser/actor/ui/task_list_bubble/actor_task_list_bubble_interactive_uitest.cc index adf5432..95c2548 100644 --- a/chrome/browser/actor/ui/task_list_bubble/actor_task_list_bubble_interactive_uitest.cc +++ b/chrome/browser/actor/ui/task_list_bubble/actor_task_list_bubble_interactive_uitest.cc
@@ -80,8 +80,14 @@ InAnyContext(WaitForHide(kActorTaskListBubbleView))); } +// TODO(crbug.com/458775033): Fix and re-enable this test on macOS. +#if BUILDFLAG(IS_MAC) +#define MAYBE_OnTaskInBubbleActuatesTab DISABLED_OnTaskInBubbleActuatesTab +#else +#define MAYBE_OnTaskInBubbleActuatesTab OnTaskInBubbleActuatesTab +#endif IN_PROC_BROWSER_TEST_F(ActorTaskListBubbleInteractiveUiTest, - ClickingOnTaskInBubbleActuatesTab) { + MAYBE_OnTaskInBubbleActuatesTab) { // Anchor to top container for tests. views::View* anchor_view = BrowserView::GetBrowserViewForBrowser(browser())->top_container();
diff --git a/chrome/browser/ai/ai_on_device_browsertest.cc b/chrome/browser/ai/ai_on_device_interactive_uitest.cc similarity index 100% rename from chrome/browser/ai/ai_on_device_browsertest.cc rename to chrome/browser/ai/ai_on_device_interactive_uitest.cc
diff --git a/chrome/browser/android/customtabs/branding/BUILD.gn b/chrome/browser/android/customtabs/branding/BUILD.gn index 3c5494b7..fca851c 100644 --- a/chrome/browser/android/customtabs/branding/BUILD.gn +++ b/chrome/browser/android/customtabs/branding/BUILD.gn
@@ -94,6 +94,7 @@ "//components/feature_engagement/public:public_java", "//components/prefs/android:java", "//components/signin/public/android:java", + "//components/signin/public/android:signin_java_test_support", "//components/user_prefs/android:java", "//content/public/android:content_full_java", "//google_apis/gaia/android:java",
diff --git a/chrome/browser/android/customtabs/branding/java/src/org/chromium/chrome/browser/customtabs/features/branding/MismatchNotificationCheckerUnitTest.java b/chrome/browser/android/customtabs/branding/java/src/org/chromium/chrome/browser/customtabs/features/branding/MismatchNotificationCheckerUnitTest.java index 6b06f36..fde8cb2 100644 --- a/chrome/browser/android/customtabs/branding/java/src/org/chromium/chrome/browser/customtabs/features/branding/MismatchNotificationCheckerUnitTest.java +++ b/chrome/browser/android/customtabs/branding/java/src/org/chromium/chrome/browser/customtabs/features/branding/MismatchNotificationCheckerUnitTest.java
@@ -27,9 +27,8 @@ import org.chromium.chrome.browser.feature_engagement.TrackerFactory; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.components.feature_engagement.Tracker; -import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.identitymanager.IdentityManager; -import org.chromium.google_apis.gaia.GaiaId; +import org.chromium.components.signin.test.util.TestAccounts; /** Unit test for {@link MismatchNotificationChecker} */ @RunWith(BaseRobolectricTestRunner.class) @@ -114,7 +113,6 @@ private Profile mProfileMock; private Callback<Integer> mCallback; private IdentityManager mIdentityManager; - private CoreAccountInfo mCoreAccountInfo; private Callback<MismatchNotificationData> mOnClose; private final MismatchNotificationData.AppUiData mAppData = @@ -129,10 +127,9 @@ mIphDisplayLock = mock(Tracker.DisplayLockHandle.class); when(mTracker.acquireDisplayLock()).thenReturn(mIphDisplayLock); - mCoreAccountInfo = mock(CoreAccountInfo.class); - when(mCoreAccountInfo.getGaiaId()).thenReturn(new GaiaId("nice-gaia-id")); mIdentityManager = mock(IdentityManager.class); - when(mIdentityManager.getPrimaryAccountInfo(anyInt())).thenReturn(mCoreAccountInfo); + when(mIdentityManager.getPrimaryAccountInfo(anyInt())) + .thenReturn(TestAccounts.ACCOUNT1); mAppData.showCount = INIT_SHOW_COUNT; mAppData.closeType = CloseType.UNKNOWN.getNumber();
diff --git a/chrome/browser/android/omnibox/autocomplete_controller_android.cc b/chrome/browser/android/omnibox/autocomplete_controller_android.cc index 60b24b496..da5351d7 100644 --- a/chrome/browser/android/omnibox/autocomplete_controller_android.cc +++ b/chrome/browser/android/omnibox/autocomplete_controller_android.cc
@@ -57,6 +57,7 @@ #include "components/omnibox/browser/autocomplete_provider_client.h" #include "components/omnibox/browser/autocomplete_result.h" #include "components/omnibox/browser/history_fuzzy_provider.h" +#include "components/omnibox/browser/lens_suggest_inputs_utils.h" #include "components/omnibox/browser/omnibox_event_global_tracker.h" #include "components/omnibox/browser/omnibox_field_trial.h" #include "components/omnibox/browser/omnibox_log.h" @@ -181,8 +182,11 @@ input_.set_allow_exact_keyword_match(allow_exact_keyword_match); input_.set_omit_asynchronous_matches(!want_asynchronous_matches); if (composebox_query_controller_bridge_) { - input_.set_lens_overlay_suggest_inputs( - composebox_query_controller_bridge_->GetLensOverlaySuggestInputs()); + const auto& inputs = + composebox_query_controller_bridge_->GetLensOverlaySuggestInputs(); + if (AreLensSuggestInputsReady(inputs)) { + input_.set_lens_overlay_suggest_inputs(inputs); + } } autocomplete_controller_->Start(input_); } @@ -302,8 +306,11 @@ input_.set_current_title(current_title); input_.set_focus_type(OFT::INTERACTION_FOCUS); if (composebox_query_controller_bridge_) { - input_.set_lens_overlay_suggest_inputs( - composebox_query_controller_bridge_->GetLensOverlaySuggestInputs()); + const auto& inputs = + composebox_query_controller_bridge_->GetLensOverlaySuggestInputs(); + if (AreLensSuggestInputsReady(inputs)) { + input_.set_lens_overlay_suggest_inputs(inputs); + } } autocomplete_controller_->Start(input_);
diff --git a/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc b/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc index 36f5000..9144ac2 100644 --- a/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc +++ b/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
@@ -434,8 +434,7 @@ if (!is_platform_app) { CreateOpenNewSubmenu( extensions::GetLaunchType(extensions::ExtensionPrefs::Get(profile()), - extension) == - extensions::LaunchType::LAUNCH_TYPE_WINDOW + extension) == extensions::LaunchType::kWindow ? IDS_APP_LIST_CONTEXT_MENU_NEW_WINDOW : IDS_APP_LIST_CONTEXT_MENU_NEW_TAB, menu_items);
diff --git a/chrome/browser/apps/platform_apps/extension_app_shim_manager_delegate_mac.cc b/chrome/browser/apps/platform_apps/extension_app_shim_manager_delegate_mac.cc index 038e8e0..4feba11 100644 --- a/chrome/browser/apps/platform_apps/extension_app_shim_manager_delegate_mac.cc +++ b/chrome/browser/apps/platform_apps/extension_app_shim_manager_delegate_mac.cc
@@ -139,7 +139,8 @@ return false; if (extension->is_hosted_app() && extensions::GetLaunchType(extensions::ExtensionPrefs::Get(profile), - extension) == extensions::LAUNCH_TYPE_REGULAR) { + extension) == + extensions::LaunchType::kRegular) { return false; } // Note that this will return true for non-hosted apps (e.g, Chrome Remote
diff --git a/chrome/browser/ash/crostini/crostini_manager.cc b/chrome/browser/ash/crostini/crostini_manager.cc index 40a8d860..e523ff17 100644 --- a/chrome/browser/ash/crostini/crostini_manager.cc +++ b/chrome/browser/ash/crostini/crostini_manager.cc
@@ -1908,6 +1908,7 @@ request.add_group_names("audio"); request.add_group_names("cdrom"); request.add_group_names("dialout"); + request.add_group_names("disk"); request.add_group_names("floppy"); request.add_group_names("kvm"); request.add_group_names("netdev");
diff --git a/chrome/browser/ash/logging/logging.cc b/chrome/browser/ash/logging/logging.cc index 15adbd92..1a24a9b 100644 --- a/chrome/browser/ash/logging/logging.cc +++ b/chrome/browser/ash/logging/logging.cc
@@ -12,6 +12,7 @@ #include "base/files/scoped_file.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/posix/eintr_wrapper.h" #include "base/system/sys_info.h" #include "base/task/thread_pool.h"
diff --git a/chrome/browser/background/BUILD.gn b/chrome/browser/background/BUILD.gn index fce7e2f..b385438 100644 --- a/chrome/browser/background/BUILD.gn +++ b/chrome/browser/background/BUILD.gn
@@ -9,7 +9,6 @@ sources = [ "background_contents.h", "background_contents_service_observer.h", - "startup_launch_manager.h", ] } @@ -35,10 +34,7 @@ source_set("impl") { if (!is_android) { - sources = [ - "background_contents.cc", - "startup_launch_manager.cc", - ] + sources = [ "background_contents.cc" ] } public_deps = [ "//chrome/browser:browser_public_dependencies" ] @@ -73,10 +69,6 @@ testonly = true sources = [] - if (!is_android) { - sources += [ "startup_launch_manager_unittest.cc" ] - } - if (enable_background_contents) { sources += [ "background_contents_service_unittest.cc" ] }
diff --git a/chrome/browser/background/extensions/BUILD.gn b/chrome/browser/background/extensions/BUILD.gn index 2c82e98..59aaa36e 100644 --- a/chrome/browser/background/extensions/BUILD.gn +++ b/chrome/browser/background/extensions/BUILD.gn
@@ -60,6 +60,7 @@ "//chrome/browser/extensions", "//chrome/browser/lifetime:termination_notification", "//chrome/browser/profiles/keep_alive", + "//chrome/browser/startup", "//chrome/browser/status_icons", "//chrome/browser/ui", "//chrome/browser/ui/extensions", @@ -98,6 +99,7 @@ "//base", "//chrome/browser:browser_process", "//chrome/browser/background", + "//chrome/browser/startup", "//chrome/browser/status_icons", "//chrome/test:test_support", "//components/policy/core/common:test_support",
diff --git a/chrome/browser/background/extensions/background_mode_manager.cc b/chrome/browser/background/extensions/background_mode_manager.cc index da0e3a8..0221c165 100644 --- a/chrome/browser/background/extensions/background_mode_manager.cc +++ b/chrome/browser/background/extensions/background_mode_manager.cc
@@ -28,7 +28,6 @@ #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/background/extensions/background_application_list_model.h" #include "chrome/browser/background/extensions/background_mode_optimizer.h" -#include "chrome/browser/background/startup_launch_manager.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/glic/public/glic_enabling.h" @@ -41,6 +40,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_attributes_entry.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/startup/startup_launch_manager.h" #include "chrome/browser/status_icons/status_icon.h" #include "chrome/browser/status_icons/status_tray.h" #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/background/extensions/background_mode_manager_unittest.cc b/chrome/browser/background/extensions/background_mode_manager_unittest.cc index 5d338a6..943270a 100644 --- a/chrome/browser/background/extensions/background_mode_manager_unittest.cc +++ b/chrome/browser/background/extensions/background_mode_manager_unittest.cc
@@ -18,13 +18,13 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/test_simple_task_runner.h" #include "build/build_config.h" -#include "chrome/browser/background/startup_launch_manager.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/test_extension_system.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/lifetime/browser_shutdown.h" #include "chrome/browser/profiles/profile_attributes_entry.h" #include "chrome/browser/profiles/profile_attributes_storage.h" +#include "chrome/browser/startup/startup_launch_manager.h" #include "chrome/browser/status_icons/status_icon_menu_model.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/background/glic/BUILD.gn b/chrome/browser/background/glic/BUILD.gn index 408473c1..176859e 100644 --- a/chrome/browser/background/glic/BUILD.gn +++ b/chrome/browser/background/glic/BUILD.gn
@@ -41,6 +41,7 @@ "//chrome/browser/glic/resources:browser_resources", "//chrome/browser/profiles:profile", "//chrome/browser/resources/glic:resources_grit", + "//chrome/browser/startup", "//chrome/browser/status_icons", "//chrome/browser/ui", "//chrome/browser/ui:browser_element_identifiers", @@ -96,6 +97,7 @@ "//chrome/browser/glic:impl", "//chrome/browser/glic/fre", "//chrome/browser/glic/test_support", + "//chrome/browser/startup", "//chrome/browser/status_icons", "//chrome/browser/ui/views/frame/", "//chrome/common:chrome_features",
diff --git a/chrome/browser/background/glic/glic_background_mode_manager.cc b/chrome/browser/background/glic/glic_background_mode_manager.cc index 582c7da..8e1b6fa 100644 --- a/chrome/browser/background/glic/glic_background_mode_manager.cc +++ b/chrome/browser/background/glic/glic_background_mode_manager.cc
@@ -12,7 +12,6 @@ #include "chrome/browser/background/glic/glic_controller.h" #include "chrome/browser/background/glic/glic_launcher_configuration.h" #include "chrome/browser/background/glic/glic_status_icon.h" -#include "chrome/browser/background/startup_launch_manager.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/glic/host/glic.mojom.h" #include "chrome/browser/glic/public/glic_enabling.h" @@ -20,6 +19,7 @@ #include "chrome/browser/global_features.h" #include "chrome/browser/profiles/nuke_profile_directory_utils.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/startup/startup_launch_manager.h" #include "components/keep_alive_registry/keep_alive_registry.h" #include "components/keep_alive_registry/keep_alive_types.h" #include "components/keep_alive_registry/scoped_keep_alive.h"
diff --git a/chrome/browser/background/glic/glic_background_mode_manager_interactive_uitest.cc b/chrome/browser/background/glic/glic_background_mode_manager_interactive_uitest.cc index 2f61d85..a6b1c53 100644 --- a/chrome/browser/background/glic/glic_background_mode_manager_interactive_uitest.cc +++ b/chrome/browser/background/glic/glic_background_mode_manager_interactive_uitest.cc
@@ -9,7 +9,6 @@ #include "base/values.h" #include "chrome/browser/background/glic/glic_background_mode_manager.h" #include "chrome/browser/background/glic/glic_launcher_configuration.h" -#include "chrome/browser/background/startup_launch_manager.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/glic/fre/glic_fre_controller.h" #include "chrome/browser/glic/glic_pref_names.h" @@ -20,6 +19,7 @@ #include "chrome/browser/global_features.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_test_util.h" +#include "chrome/browser/startup/startup_launch_manager.h" #include "chrome/browser/status_icons/status_tray.h" #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/bar/BookmarkBarSceneLayer.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/bar/BookmarkBarSceneLayer.java index 0f002b4..cce6840 100644 --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/bar/BookmarkBarSceneLayer.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/bar/BookmarkBarSceneLayer.java
@@ -105,7 +105,7 @@ @Override public @Nullable SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { return this; }
diff --git a/chrome/browser/browser_keyevents_browsertest.cc b/chrome/browser/browser_keyevents_interactive_uitest.cc similarity index 100% rename from chrome/browser/browser_keyevents_browsertest.cc rename to chrome/browser/browser_keyevents_interactive_uitest.cc
diff --git a/chrome/browser/chrome_render_widget_host_browsertests.cc b/chrome/browser/chrome_render_widget_host_interactive_uitest.cc similarity index 100% rename from chrome/browser/chrome_render_widget_host_browsertests.cc rename to chrome/browser/chrome_render_widget_host_interactive_uitest.cc
diff --git a/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.cc b/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.cc index fa26e38..1a5a3cc 100644 --- a/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.cc +++ b/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.cc
@@ -3,11 +3,10 @@ // found in the LICENSE file. #include "chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.h" -#include "base/notreached.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/omnibox/omnibox_controller.h" +#include "chrome/browser/ui/webui/searchbox/composebox_handler.h" #include "chrome/browser/ui/webui/searchbox/searchbox_omnibox_client.h" -#include "ui/base/window_open_disposition_utils.h" namespace { @@ -46,96 +45,14 @@ mojo::PendingRemote<composebox::mojom::Page> pending_page, mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_searchbox_handler) - : SearchboxHandler( + : ComposeboxHandler( + std::move(pending_handler), + std::move(pending_page), std::move(pending_searchbox_handler), profile, web_contents, std::make_unique<OmniboxController>( std::make_unique<ContextualTasksOmniboxClient>(profile, - web_contents))), - page_{std::move(pending_page)}, - handler_(this, std::move(pending_handler)) { - autocomplete_controller_observation_.Observe(autocomplete_controller()); -} + web_contents))) {} ContextualTasksComposeboxHandler::~ContextualTasksComposeboxHandler() = default; - -void ContextualTasksComposeboxHandler::NotifySessionStarted() { - // noop. -} - -void ContextualTasksComposeboxHandler::NotifySessionAbandoned() { - // noop. -} - -void ContextualTasksComposeboxHandler::SubmitQuery( - const std::string& query_text, - uint8_t mouse_button, - bool alt_key, - bool ctrl_key, - bool meta_key, - bool shift_key) {} - -void ContextualTasksComposeboxHandler::AddFileContext( - searchbox::mojom::SelectedFileInfoPtr file_info, - mojo_base::BigBuffer file_bytes, - AddFileContextCallback callback) { - // noop. -} - -void ContextualTasksComposeboxHandler::AddTabContext(int32_t tab_id, - bool delay_upload, - AddTabContextCallback) { - // noop. -} - -void ContextualTasksComposeboxHandler::DeleteContext( - const base::UnguessableToken& file_token) { - // noop. -} - -void ContextualTasksComposeboxHandler::ClearFiles() { - // noop. -} - -void ContextualTasksComposeboxHandler::DeleteAutocompleteMatch( - uint8_t line, - const GURL& url) { - // noop. -} - -void ContextualTasksComposeboxHandler::ExecuteAction( - uint8_t line, - uint8_t action_index, - const GURL& url, - base::TimeTicks match_selection_timestamp, - uint8_t mouse_button, - bool alt_key, - bool ctrl_key, - bool meta_key, - bool shift_key) { - // noop. -} - -void ContextualTasksComposeboxHandler::OnThumbnailRemoved() { - // noop. -} - -void ContextualTasksComposeboxHandler::FocusChanged(bool focused) { - // noop. -} - -void ContextualTasksComposeboxHandler::SetDeepSearchMode(bool enabled) { - // Ignore, intentionally unimplemented for Lens. Deep search not implemented - // in Lens. -} - -void ContextualTasksComposeboxHandler::SetCreateImageMode(bool enabled, - bool image_present) { - // Ignore, intentionally unimplemented for Lens. Create image not implemented - // in Lens. -} - -void ContextualTasksComposeboxHandler::HandleLensButtonClick() { - // noop -}
diff --git a/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.h b/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.h index b0459b59..a650ee73 100644 --- a/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.h +++ b/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.h
@@ -4,23 +4,20 @@ #ifndef CHROME_BROWSER_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_COMPOSEBOX_HANDLER_H_ #define CHROME_BROWSER_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_COMPOSEBOX_HANDLER_H_ -#include <string> - -#include "base/memory/raw_ptr.h" -#include "base/unguessable_token.h" -#include "chrome/browser/ui/webui/searchbox/searchbox_handler.h" +#include "chrome/browser/ui/webui/searchbox/composebox_handler.h" #include "components/omnibox/browser/searchbox.mojom.h" #include "content/public/browser/web_contents.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "ui/webui/resources/cr_components/composebox/composebox.mojom.h" -#include "url/gurl.h" class Profile; -class ContextualTasksComposeboxHandler : public composebox::mojom::PageHandler, - public SearchboxHandler { +// ComposeboxHandler for the Contextual Tasks UI. +// TODO (crbug.com/458102018): Add separate implementation for SubmitQuery() +// that issues postmessages to the embedded webpage. +class ContextualTasksComposeboxHandler : public ComposeboxHandler { public: ContextualTasksComposeboxHandler( Profile* profile, @@ -30,48 +27,6 @@ mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_searchbox_handler); ~ContextualTasksComposeboxHandler() override; - - // composebox::mojom::PageHandler: - void NotifySessionStarted() override; - void NotifySessionAbandoned() override; - void SubmitQuery(const std::string& query_text, - uint8_t mouse_button, - bool alt_key, - bool ctrl_key, - bool meta_key, - bool shift_key) override; - void AddFileContext(searchbox::mojom::SelectedFileInfoPtr file_info, - mojo_base::BigBuffer file_bytes, - AddFileContextCallback callback) override; - void AddTabContext(int32_t tab_id, - bool delay_upload, - AddTabContextCallback) override; - void DeleteContext(const base::UnguessableToken& file_token) override; - void ClearFiles() override; - - // searchbox::mojom::PageHandler: - void DeleteAutocompleteMatch(uint8_t line, const GURL& url) override; - void ExecuteAction(uint8_t line, - uint8_t action_index, - const GURL& url, - base::TimeTicks match_selection_timestamp, - uint8_t mouse_button, - bool alt_key, - bool ctrl_key, - bool meta_key, - bool shift_key) override; - void OnThumbnailRemoved() override; - - void FocusChanged(bool focused) override; - void SetDeepSearchMode(bool enabled) override; - void SetCreateImageMode(bool enabled, bool image_present) override; - void HandleLensButtonClick() override; - - private: - // These are located at the end of the list of member variables to ensure the - // WebUI page is disconnected before other members are destroyed. - mojo::Remote<composebox::mojom::Page> page_; - mojo::Receiver<composebox::mojom::PageHandler> handler_; }; #endif // CHROME_BROWSER_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_COMPOSEBOX_HANDLER_H_
diff --git a/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc b/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc index 1570600..d07051f9 100644 --- a/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc +++ b/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc
@@ -16,6 +16,7 @@ #include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h" #include "chrome/browser/ui/views/side_panel/side_panel_entry.h" #include "chrome/browser/ui/views/side_panel/side_panel_entry_scope.h" +#include "chrome/browser/ui/views/side_panel/side_panel_enums.h" #include "chrome/browser/ui/views/side_panel/side_panel_registry.h" #include "chrome/browser/ui/views/side_panel/side_panel_web_ui_view.h" #include "chrome/browser/ui/webui/webui_embedding_context.h" @@ -337,8 +338,9 @@ void ContextualTasksSidePanelCoordinator::Hide() { auto* side_panel_ui = static_cast<SidePanelCoordinator*>( browser_window_->GetFeatures().side_panel_ui()); - side_panel_ui->Close(/*suppress_animations=*/true, - SidePanelEntry::PanelType::kToolbar); + side_panel_ui->Close(SidePanelEntry::PanelType::kToolbar, + SidePanelEntryHideReason::kSidePanelClosed, + /*suppress_animations=*/true); } void ContextualTasksSidePanelCoordinator::Unhide() {
diff --git a/chrome/browser/controlled_frame/controlled_frame_interactive_browsertest.cc b/chrome/browser/controlled_frame/controlled_frame_interactive_uitest.cc similarity index 100% rename from chrome/browser/controlled_frame/controlled_frame_interactive_browsertest.cc rename to chrome/browser/controlled_frame/controlled_frame_interactive_uitest.cc
diff --git a/chrome/browser/default_browser/BUILD.gn b/chrome/browser/default_browser/BUILD.gn index 87369fc9..235fb84 100644 --- a/chrome/browser/default_browser/BUILD.gn +++ b/chrome/browser/default_browser/BUILD.gn
@@ -2,11 +2,14 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -assert(!is_android, "Default browser framework is only for desktop platforms") -assert(!is_chromeos, "Default browser framework doesn't exist on chromeos") +assert(!is_android && !is_chromeos, + "Default browser is for desktop platforms only except ChromeOS.") source_set("default_browser") { - friend = [ ":unit_tests" ] + friend = [ + ":unit_tests", + ":browser_tests", + ] public = [ "default_browser_controller.h", @@ -18,6 +21,8 @@ "default_browser_controller.cc", "default_browser_features.cc", "default_browser_manager.cc", + "default_browser_monitor.cc", + "default_browser_monitor.h", "default_browser_setter.h", "setters/shell_integration_default_browser_setter.cc", "setters/shell_integration_default_browser_setter.h", @@ -26,6 +31,14 @@ public_deps = [ "//base" ] deps = [ "//chrome/browser:shell_integration" ] + + if (is_win) { + sources += [ "default_browser_monitor_win.cc" ] + + deps += [ "//chrome/browser/win:registry_watcher" ] + } else { + sources += [ "default_browser_monitor_stub.cc" ] + } } source_set("unit_tests") { @@ -45,3 +58,21 @@ "//content/test:test_support", ] } + +source_set("browser_tests") { + testonly = true + + defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] + + sources = [ "default_browser_manager_browsertest.cc" ] + + deps = [ + ":default_browser", + "//base/test:test_support", + "//chrome/browser:browser_process", + "//chrome/browser:global_features", + "//chrome/test:test_support_ui", + "//content/test:test_support", + "//ui/base", + ] +}
diff --git a/chrome/browser/default_browser/default_browser_manager.cc b/chrome/browser/default_browser/default_browser_manager.cc index 31e0901..8770ee2 100644 --- a/chrome/browser/default_browser/default_browser_manager.cc +++ b/chrome/browser/default_browser/default_browser_manager.cc
@@ -4,12 +4,20 @@ #include "chrome/browser/default_browser/default_browser_manager.h" +#include <utility> + +#include "base/functional/callback.h" #include "base/memory/scoped_refptr.h" +#include "chrome/browser/default_browser/default_browser_monitor.h" #include "chrome/browser/default_browser/setters/shell_integration_default_browser_setter.h" #include "chrome/browser/shell_integration.h" namespace default_browser { +DefaultBrowserManager::DefaultBrowserManager() = default; + +DefaultBrowserManager::~DefaultBrowserManager() = default; + // Static void DefaultBrowserManager::GetDefaultBrowserState( DefaultBrowserCheckCompletionCallback callback) { @@ -25,4 +33,15 @@ std::make_unique<ShellIntegrationDefaultBrowserSetter>(), entrypoint); } +base::CallbackListSubscription +DefaultBrowserManager::RegisterDefaultBrowserChanged( + base::RepeatingClosure callback) { + if (!monitor_) { + monitor_ = std::make_unique<DefaultBrowserMonitor>(); + monitor_->StartMonitor(); + } + + return monitor_->RegisterDefaultBrowserChanged(std::move(callback)); +} + } // namespace default_browser
diff --git a/chrome/browser/default_browser/default_browser_manager.h b/chrome/browser/default_browser/default_browser_manager.h index 7009c23..a280cb25 100644 --- a/chrome/browser/default_browser/default_browser_manager.h +++ b/chrome/browser/default_browser/default_browser_manager.h
@@ -7,11 +7,14 @@ #include <memory> +#include "base/callback_list.h" #include "base/functional/callback_forward.h" #include "chrome/browser/default_browser/default_browser_controller.h" namespace default_browser { +class DefaultBrowserMonitor; + using DefaultBrowserCheckCompletionCallback = base::OnceCallback<void(DefaultBrowserState)>; @@ -21,8 +24,8 @@ // default-browser utilities. class DefaultBrowserManager { public: - DefaultBrowserManager() = default; - ~DefaultBrowserManager() = default; + DefaultBrowserManager(); + ~DefaultBrowserManager(); DefaultBrowserManager(const DefaultBrowserManager&) = delete; DefaultBrowserManager& operator=(const DefaultBrowserManager&) = delete; @@ -35,6 +38,21 @@ // Utility method to check the current default browser state asynchronously. static void GetDefaultBrowserState( DefaultBrowserCheckCompletionCallback callback); + + // Registers a callback that will be invoked on the manager thread whenever + // the system's default browser for HTTP/HTTPS protocols changes. The returned + // subscription object MUST be kept in scope for as long as the caller wishes + // to receive notifications. Destroying the subscription object will + // unregister the callback. + // + // For now, only Windows platform will notify when a change occur. + base::CallbackListSubscription RegisterDefaultBrowserChanged( + base::RepeatingClosure callback); + + private: + // The platform default browser change monitor that handles the low-level + // logic for detecting when the system's default browser has changed. + std::unique_ptr<DefaultBrowserMonitor> monitor_; }; } // namespace default_browser
diff --git a/chrome/browser/default_browser/default_browser_manager_browsertest.cc b/chrome/browser/default_browser/default_browser_manager_browsertest.cc new file mode 100644 index 0000000..3314ff2 --- /dev/null +++ b/chrome/browser/default_browser/default_browser_manager_browsertest.cc
@@ -0,0 +1,187 @@ +// 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/default_browser/default_browser_manager.h" + +#include <string> + +#include "base/test/test_future.h" +#include "build/build_config.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/global_features.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" + +#if BUILDFLAG(IS_WIN) +#include "base/test/test_reg_util_win.h" +#include "base/win/registry.h" +#endif // BUILDFLAG(IS_WIN) + +namespace default_browser { + +namespace { + +#if BUILDFLAG(IS_WIN) +constexpr wchar_t kProgIdValue[] = L"ProgId"; + +constexpr wchar_t kRegistryPath[] = + L"Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\h" + L"ttp\\UserChoice"; + +void CreateDefaultBrowserKey(const std::wstring& prog_id) { + base::win::RegKey key(HKEY_CURRENT_USER, kRegistryPath, + KEY_WRITE | KEY_CREATE_SUB_KEY); + ASSERT_TRUE(key.Valid()); + ASSERT_EQ(key.WriteValue(kProgIdValue, prog_id.c_str()), ERROR_SUCCESS); +} + +void ChangeDefaultBrowserProgId(const std::wstring& new_prog_id) { + base::win::RegKey key(HKEY_CURRENT_USER, kRegistryPath, KEY_WRITE); + ASSERT_TRUE(key.Valid()); + ASSERT_EQ(key.WriteValue(kProgIdValue, new_prog_id.c_str()), ERROR_SUCCESS); +} +#endif // BUILDFLAG(IS_WIN) + +} // namespace + +#if BUILDFLAG(IS_WIN) +class DefaultBrowserManagerWinBrowserTest : public InProcessBrowserTest { + public: + DefaultBrowserManagerWinBrowserTest() = default; + ~DefaultBrowserManagerWinBrowserTest() override = default; + + void SetUp() override { + ASSERT_NO_FATAL_FAILURE( + registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER)); + base::win::RegKey key; + ASSERT_EQ(ERROR_SUCCESS, + key.Create(HKEY_CURRENT_USER, kRegistryPath, KEY_WRITE)); + InProcessBrowserTest::SetUp(); + } + + protected: + registry_util::RegistryOverrideManager registry_override_manager_; +}; + +IN_PROC_BROWSER_TEST_F(DefaultBrowserManagerWinBrowserTest, + ChangeIsDetectedAndObserverIsNotified) { + CreateDefaultBrowserKey(L"ChromeHTML"); + DefaultBrowserManager* manager = + g_browser_process->GetFeatures()->default_browser_manager(); + ASSERT_TRUE(manager); + + base::test::TestFuture<void> future; + base::CallbackListSubscription subscription = + manager->RegisterDefaultBrowserChanged(future.GetRepeatingCallback()); + ChangeDefaultBrowserProgId(L"VanadiumHTML"); + EXPECT_TRUE(future.Wait()); +} + +IN_PROC_BROWSER_TEST_F(DefaultBrowserManagerWinBrowserTest, + SubscriptionDestroyedPreventsCallback) { + CreateDefaultBrowserKey(L"ChromeHTML"); + DefaultBrowserManager* manager = + g_browser_process->GetFeatures()->default_browser_manager(); + ASSERT_TRUE(manager); + + base::test::TestFuture<void> future; + { + base::CallbackListSubscription subscription = + manager->RegisterDefaultBrowserChanged(future.GetRepeatingCallback()); + } + + ChangeDefaultBrowserProgId(L"VanadiumHTML"); + content::RunAllTasksUntilIdle(); + EXPECT_FALSE(future.IsReady()); +} + +IN_PROC_BROWSER_TEST_F(DefaultBrowserManagerWinBrowserTest, + AllRegisteredObserversAreNotified) { + CreateDefaultBrowserKey(L"ChromeHTML"); + DefaultBrowserManager* manager = + g_browser_process->GetFeatures()->default_browser_manager(); + ASSERT_TRUE(manager); + + base::test::TestFuture<void> future1; + base::test::TestFuture<void> future2; + base::CallbackListSubscription subscription1 = + manager->RegisterDefaultBrowserChanged(future1.GetRepeatingCallback()); + base::CallbackListSubscription subscription2 = + manager->RegisterDefaultBrowserChanged(future2.GetRepeatingCallback()); + + ChangeDefaultBrowserProgId(L"VanadiumHTML"); + EXPECT_TRUE(future1.Wait()); + EXPECT_TRUE(future2.Wait()); +} + +IN_PROC_BROWSER_TEST_F(DefaultBrowserManagerWinBrowserTest, + SubsequentChangesAreAlsoDetected) { + CreateDefaultBrowserKey(L"ChromeHTML"); + DefaultBrowserManager* manager = + g_browser_process->GetFeatures()->default_browser_manager(); + ASSERT_TRUE(manager); + + { + base::test::TestFuture<void> future_change1; + base::CallbackListSubscription subscription = + manager->RegisterDefaultBrowserChanged( + future_change1.GetRepeatingCallback()); + ChangeDefaultBrowserProgId(L"VanadiumHTML"); + ASSERT_TRUE(future_change1.Wait()) << "First change was not detected."; + } + + { + base::test::TestFuture<void> future_change2; + base::CallbackListSubscription subscription = + manager->RegisterDefaultBrowserChanged( + future_change2.GetRepeatingCallback()); + ChangeDefaultBrowserProgId(L"ManganeseHTML"); + EXPECT_TRUE(future_change2.Wait()) << "Second change was not detected."; + } +} + +IN_PROC_BROWSER_TEST_F( + DefaultBrowserManagerWinBrowserTest, + SubsequentChangesAreAlsoDetectedWithTheSameSubscription) { + CreateDefaultBrowserKey(L"ChromeHTML"); + DefaultBrowserManager* manager = + g_browser_process->GetFeatures()->default_browser_manager(); + ASSERT_TRUE(manager); + + int call_count = 0; + base::RunLoop run_loop1; + base::RunLoop run_loop2; + + // This callback will be invoked for each default browser change. + // On the first invocation, it will quit the first `run_loop`. + // On the second, it will quit the second `run_loop`. + auto subscription_callback = base::BindRepeating( + [](int* count, base::RunLoop* loop1, base::RunLoop* loop2) { + (*count)++; + if (*count == 1) { + loop1->Quit(); + } else if (*count == 2) { + loop2->Quit(); + } + }, + &call_count, &run_loop1, &run_loop2); + + // Register the single subscription that will be used for the entire test. + base::CallbackListSubscription subscription = + manager->RegisterDefaultBrowserChanged(subscription_callback); + + // Trigger the first change. + ChangeDefaultBrowserProgId(L"VanadiumHTML"); + run_loop1.Run(); + EXPECT_EQ(call_count, 1) << "First change was not detected."; + + // Trigger the second change. The same subscription should be notified again. + ChangeDefaultBrowserProgId(L"ManganeseHTML"); + run_loop2.Run(); + EXPECT_EQ(call_count, 2) << "Second change was not detected."; +} +#endif // BUILDFLAG(IS_WIN) + +} // namespace default_browser
diff --git a/chrome/browser/default_browser/default_browser_monitor.cc b/chrome/browser/default_browser/default_browser_monitor.cc new file mode 100644 index 0000000..27748ee --- /dev/null +++ b/chrome/browser/default_browser/default_browser_monitor.cc
@@ -0,0 +1,28 @@ +// 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/default_browser/default_browser_monitor.h" + +#include <utility> + +#include "base/functional/callback.h" +#include "chrome/browser/win/registry_watcher.h" + +namespace default_browser { + +DefaultBrowserMonitor::DefaultBrowserMonitor() = default; + +DefaultBrowserMonitor::~DefaultBrowserMonitor() = default; + +base::CallbackListSubscription +DefaultBrowserMonitor::RegisterDefaultBrowserChanged( + base::RepeatingClosure callback) { + return callback_list_.Add(std::move(callback)); +} + +void DefaultBrowserMonitor::NotifyObservers() { + callback_list_.Notify(); +} + +} // namespace default_browser
diff --git a/chrome/browser/default_browser/default_browser_monitor.h b/chrome/browser/default_browser/default_browser_monitor.h new file mode 100644 index 0000000..c93829d --- /dev/null +++ b/chrome/browser/default_browser/default_browser_monitor.h
@@ -0,0 +1,62 @@ +// 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_DEFAULT_BROWSER_DEFAULT_BROWSER_MONITOR_H_ +#define CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_MONITOR_H_ + +#include <memory> + +#include "base/callback_list.h" +#include "base/functional/callback_forward.h" +#include "base/memory/scoped_refptr.h" +#include "build/build_config.h" + +class RegistryWatcher; + +namespace default_browser { + +// Provides a platform-agnostic object for observing changes to the system's +// default browser setting. Observers are notified on the DefaultBrowserManager +// thread. +class DefaultBrowserMonitor { + public: + DefaultBrowserMonitor(); + ~DefaultBrowserMonitor(); + + DefaultBrowserMonitor(const DefaultBrowserMonitor&) = delete; + const DefaultBrowserMonitor& operator=(const DefaultBrowserMonitor&) = delete; + + // Starts the monitoring process. The implementation will be platform + // specific. + void StartMonitor(); + + // Registers a callback to be run on the DefaultBrowserManager thread when a + // change is detected. + base::CallbackListSubscription RegisterDefaultBrowserChanged( + base::RepeatingClosure callback); + + protected: + void NotifyObservers(); + + private: +#if BUILDFLAG(IS_WIN) + // The callback executed on the DefaultBrowserManager thread when the Worker + // detects a change. + void OnDefaultBrowserChangedWin(); + + // The monitor owns the watcher. + std::unique_ptr<RegistryWatcher> registry_watcher_; +#endif // BUILDFLAG(IS_WIN) + + base::RepeatingClosureList callback_list_; + + // Enforces that this class is used on same sequence. + SEQUENCE_CHECKER(sequence_checker_); + + base::WeakPtrFactory<DefaultBrowserMonitor> weak_ptr_factory_{this}; +}; + +} // namespace default_browser + +#endif // CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_MONITOR_H_
diff --git a/chrome/browser/default_browser/default_browser_monitor_stub.cc b/chrome/browser/default_browser/default_browser_monitor_stub.cc new file mode 100644 index 0000000..fa18245 --- /dev/null +++ b/chrome/browser/default_browser/default_browser_monitor_stub.cc
@@ -0,0 +1,13 @@ +// 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/default_browser/default_browser_monitor.h" + +namespace default_browser { + +void DefaultBrowserMonitor::StartMonitor() { + // Do nothing. +} + +} // namespace default_browser
diff --git a/chrome/browser/default_browser/default_browser_monitor_win.cc b/chrome/browser/default_browser/default_browser_monitor_win.cc new file mode 100644 index 0000000..71c4a0b --- /dev/null +++ b/chrome/browser/default_browser/default_browser_monitor_win.cc
@@ -0,0 +1,60 @@ +// 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/default_browser/default_browser_monitor.h" + +#include <windows.h> + +#include <array> +#include <memory> +#include <string> +#include <string_view> +#include <vector> + +#include "base/functional/bind.h" +#include "chrome/browser/win/registry_watcher.h" + +namespace default_browser { + +namespace { + +// The registry paths for the default browser choice for http and https. +constexpr std::array<std::wstring_view, 2> kDefaultBrowserSchemes = { + L"Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http" + L"\\UserChoice", + L"Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\https" + L"\\UserChoice"}; + +} // namespace + +void DefaultBrowserMonitor::StartMonitor() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + // Create a new watcher, transferring ownership to the unique_ptr. + // The watcher will call OnDefaultBrowserChanged when a change is detected. + registry_watcher_ = std::make_unique<RegistryWatcher>( + std::vector<std::wstring>(kDefaultBrowserSchemes.begin(), + kDefaultBrowserSchemes.end()), + base::BindOnce(&DefaultBrowserMonitor::OnDefaultBrowserChangedWin, + // base::Unretained is safe because `this` monitor owns + // the `registry_watcher_`. The watcher will be destroyed + // before the monitor is, so the callback can't be called + // on a dangling pointer. + base::Unretained(this))); +} + +void DefaultBrowserMonitor::OnDefaultBrowserChangedWin() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + // The old watcher has fired and done its job. + registry_watcher_.reset(); + + // Notify observers that a change occurred. + NotifyObservers(); + + // Start a new watch to be notified of the *next* change. + StartMonitor(); +} + +} // namespace default_browser
diff --git a/chrome/browser/devtools/devtools_interactive_browsertest.cc b/chrome/browser/devtools/devtools_interactive_uitest.cc similarity index 100% rename from chrome/browser/devtools/devtools_interactive_browsertest.cc rename to chrome/browser/devtools/devtools_interactive_uitest.cc
diff --git a/chrome/browser/download/download_open_dialog.h b/chrome/browser/download/download_open_dialog.h deleted file mode 100644 index 511df64..0000000 --- a/chrome/browser/download/download_open_dialog.h +++ /dev/null
@@ -1,24 +0,0 @@ -// 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_DOWNLOAD_DOWNLOAD_OPEN_DIALOG_H_ -#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_OPEN_DIALOG_H_ - -#include <string> - -#include "base/files/file_path.h" -#include "base/functional/callback_forward.h" - -namespace content { -class WebContents; -} // namespace content - -// Creates and shows the open confirmation dialog. -void ShowDownloadOpenConfirmationDialog( - content::WebContents* web_contents, - const std::string& extension_name, - const base::FilePath& file_path, - base::OnceCallback<void(bool)> open_callback); - -#endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_OPEN_DIALOG_H_
diff --git a/chrome/browser/enterprise/connectors/connectors_manager.cc b/chrome/browser/enterprise/connectors/connectors_manager.cc index 90aece6..fdd9492 100644 --- a/chrome/browser/enterprise/connectors/connectors_manager.cc +++ b/chrome/browser/enterprise/connectors/connectors_manager.cc
@@ -174,11 +174,6 @@ } #endif // BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS) -void ConnectorsManager::SetTelemetryObserverCallback( - base::RepeatingCallback<void()> callback) { - telemetry_observer_callback_ = callback; -} - void ConnectorsManager::OnPrefChanged(AnalysisConnector connector) { CacheAnalysisConnectorPolicy(connector); #if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS) @@ -233,9 +228,4 @@ } } -const base::RepeatingCallback<void()> -ConnectorsManager::GetTelemetryObserverCallbackForTesting() const { - return telemetry_observer_callback_; -} - } // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/connectors_manager.h b/chrome/browser/enterprise/connectors/connectors_manager.h index c2be374..28d183f 100644 --- a/chrome/browser/enterprise/connectors/connectors_manager.h +++ b/chrome/browser/enterprise/connectors/connectors_manager.h
@@ -67,12 +67,6 @@ bool IsConnectorEnabledForLocalAgent(AnalysisConnector connector) const; #endif - void SetTelemetryObserverCallback(base::RepeatingCallback<void()> callback); - - // Public testing functions. - const base::RepeatingCallback<void()> GetTelemetryObserverCallbackForTesting() - const; - private: #if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS) // BrowserListObserver overrides:
diff --git a/chrome/browser/enterprise/connectors/connectors_service.cc b/chrome/browser/enterprise/connectors/connectors_service.cc index ff59007..821db5f0 100644 --- a/chrome/browser/enterprise/connectors/connectors_service.cc +++ b/chrome/browser/enterprise/connectors/connectors_service.cc
@@ -10,23 +10,17 @@ #include "base/check_op.h" #include "base/memory/singleton.h" #include "base/no_destructor.h" -#include "base/path_service.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/enterprise/connectors/connectors_manager.h" -#include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h" -#include "chrome/browser/enterprise/util/affiliation.h" #include "chrome/browser/policy/chrome_browser_policy_connector.h" #include "chrome/browser/policy/dm_token_utils.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/profiles/profile_attributes_entry.h" -#include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/profiles/reporting_util.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/ui/managed_ui.h" -#include "components/embedder_support/user_agent_utils.h" #include "components/enterprise/browser/controller/browser_dm_token_storage.h" #include "components/enterprise/buildflags/buildflags.h" #include "components/enterprise/common/proto/connectors.pb.h" @@ -35,14 +29,11 @@ #include "components/enterprise/connectors/core/service_provider_config.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/policy/core/common/cloud/cloud_policy_store.h" -#include "components/policy/core/common/cloud/cloud_policy_util.h" #include "components/policy/core/common/cloud/dm_token.h" #include "components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h" #include "components/policy/core/common/cloud/machine_level_user_cloud_policy_store.h" #include "components/policy/core/common/policy_types.h" #include "components/safe_browsing/buildflags.h" -#include "components/safe_browsing/core/common/features.h" -#include "components/signin/public/base/consent_level.h" #include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_prefs/user_prefs.h" #include "components/version_info/version_info.h" @@ -80,8 +71,9 @@ std::string client_id; #if BUILDFLAG(IS_CHROMEOS) auto* manager = profile->GetUserCloudPolicyManagerAsh(); - if (manager && manager->core() && manager->core()->client()) + if (manager && manager->core() && manager->core()->client()) { client_id = manager->core()->client()->client_id(); + } #else client_id = policy::BrowserDMTokenStorage::Get()->RetrieveClientId(); #endif @@ -115,8 +107,9 @@ std::optional<std::string> GetDeviceDMToken() { const enterprise_management::PolicyData* policy_data = ash::DeviceSettingsService::Get()->policy_data(); - if (policy_data && policy_data->has_request_token()) + if (policy_data && policy_data->has_request_token()) { return policy_data->request_token(); + } return std::nullopt; } #endif @@ -134,11 +127,11 @@ // ConnectorsService implementation // -------------------------------- -ConnectorsService::ConnectorsService(content::BrowserContext* context, - std::unique_ptr<ConnectorsManager> manager) - : context_(context), connectors_manager_(std::move(manager)) { +ConnectorsService::ConnectorsService( + content::BrowserContext* context, + std::unique_ptr<ConnectorsManagerBase> manager) + : ConnectorsServiceBase(std::move(manager)), context_(context) { DCHECK(context_); - DCHECK(connectors_manager_); } ConnectorsService::~ConnectorsService() = default; @@ -173,9 +166,10 @@ } std::optional<ReportingSettings> settings = - connectors_manager_->GetReportingSettings(); - if (!settings.has_value()) + connectors_manager_base_->GetReportingSettings(); + if (!settings.has_value()) { return std::nullopt; + } #if BUILDFLAG(SAFE_BROWSING_AVAILABLE) Profile* profile = Profile::FromBrowserContext(context_); @@ -207,11 +201,12 @@ if (url.SchemeIsBlob() || url.SchemeIsFileSystem()) { GURL inner = url.inner_url() ? *url.inner_url() : GURL(url.GetPath()); return GetCommonAnalysisSettings( - connectors_manager_->GetAnalysisSettings(inner, connector), connector); + connectors_manager_base_->GetAnalysisSettings(inner, connector), + connector); } return GetCommonAnalysisSettings( - connectors_manager_->GetAnalysisSettings(url, connector), connector); + connectors_manager_base_->GetAnalysisSettings(url, connector), connector); } #if BUILDFLAG(IS_CHROMEOS) @@ -220,12 +215,16 @@ const storage::FileSystemURL& destination_url, AnalysisConnector connector) { DCHECK_EQ(connector, AnalysisConnector::FILE_TRANSFER); - if (!ConnectorsEnabled()) + if (!ConnectorsEnabled()) { return std::nullopt; + } + + auto* connectors_manager = + static_cast<ConnectorsManager*>(connectors_manager_base_.get()); return GetCommonAnalysisSettings( - connectors_manager_->GetAnalysisSettings(context_, source_url, - destination_url, connector), + connectors_manager->GetAnalysisSettings(context_, source_url, + destination_url, connector), connector); } #endif // BUILDFLAG(IS_CHROMEOS) @@ -233,8 +232,9 @@ std::optional<AnalysisSettings> ConnectorsService::GetCommonAnalysisSettings( std::optional<AnalysisSettings> settings, AnalysisConnector connector) { - if (!settings.has_value()) + if (!settings.has_value()) { return std::nullopt; + } #if !BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS) if (settings->cloud_or_local_settings.is_local_analysis()) { @@ -247,8 +247,9 @@ bool is_cloud = settings.value().cloud_or_local_settings.is_cloud_analysis(); if (is_cloud) { - if (!dm_token.has_value()) + if (!dm_token.has_value()) { return std::nullopt; + } std::get<CloudAnalysisSettings>(settings.value().cloud_or_local_settings) .dm_token = dm_token.value().value; @@ -264,76 +265,16 @@ return settings; } -bool ConnectorsService::IsConnectorEnabled(AnalysisConnector connector) const { - if (!ConnectorsEnabled()) - return false; - - return connectors_manager_->IsAnalysisConnectorEnabled(connector); -} - -std::vector<const AnalysisConfig*> ConnectorsService::GetAnalysisServiceConfigs( - AnalysisConnector connector) { - if (!ConnectorsEnabled()) - return {}; - - return connectors_manager_->GetAnalysisServiceConfigs(connector); -} - -bool ConnectorsService::DelayUntilVerdict(AnalysisConnector connector) { - if (!ConnectorsEnabled()) - return false; - - return connectors_manager_->DelayUntilVerdict(connector); -} - -std::optional<std::u16string> ConnectorsService::GetCustomMessage( - AnalysisConnector connector, - const std::string& tag) { - if (!ConnectorsEnabled()) - return std::nullopt; - - return connectors_manager_->GetCustomMessage(connector, tag); -} - -std::optional<GURL> ConnectorsService::GetLearnMoreUrl( - AnalysisConnector connector, - const std::string& tag) { - if (!ConnectorsEnabled()) - return std::nullopt; - - return connectors_manager_->GetLearnMoreUrl(connector, tag); -} - -bool ConnectorsService::GetBypassJustificationRequired( - AnalysisConnector connector, - const std::string& tag) { - if (!ConnectorsEnabled()) - return false; - - return connectors_manager_->GetBypassJustificationRequired(connector, tag); -} - bool ConnectorsService::HasExtraUiToDisplay(AnalysisConnector connector, const std::string& tag) { return GetCustomMessage(connector, tag) || GetLearnMoreUrl(connector, tag) || GetBypassJustificationRequired(connector, tag); } -std::vector<std::string> ConnectorsService::GetAnalysisServiceProviderNames( - AnalysisConnector connector) { - if (!ConnectorsEnabled()) - return {}; - - if (!GetDmToken(AnalysisConnectorScopePref(connector)).has_value()) { - return {}; - } - - return connectors_manager_->GetAnalysisServiceProviderNames(connector); -} - std::string ConnectorsService::GetManagementDomain() { - if (!ConnectorsEnabled()) + if (!ConnectorsEnabled()) { return std::string(); + } std::optional<policy::PolicyScope> scope = std::nullopt; for (const char* scope_pref : @@ -349,13 +290,15 @@ // Having one CBCM Connector policy set implies that profile ones will be // ignored for another domain, so the loop can stop immediately. - if (scope == policy::PolicyScope::POLICY_SCOPE_MACHINE) + if (scope == policy::PolicyScope::POLICY_SCOPE_MACHINE) { break; + } } } - if (!scope.has_value()) + if (!scope.has_value()) { return std::string(); + } #if BUILDFLAG(IS_CHROMEOS) return GetAccountManagerIdentity(Profile::FromBrowserContext(context_)) @@ -369,8 +312,9 @@ policy::MachineLevelUserCloudPolicyManager* manager = g_browser_process->browser_policy_connector() ->machine_level_user_cloud_policy_manager(); - if (!manager) + if (!manager) { return std::string(); + } policy::CloudPolicyStore* store = manager->store(); return (store && store->has_policy()) @@ -402,15 +346,6 @@ #endif } -ConnectorsManager* ConnectorsService::ConnectorsManagerForTesting() { - return connectors_manager_.get(); -} - -void ConnectorsService::ObserveTelemetryReporting( - base::RepeatingCallback<void()> callback) { - connectors_manager_->SetTelemetryObserverCallback(callback); -} - std::optional<ConnectorsService::DmToken> ConnectorsService::GetDmToken( const char* scope_pref) const { #if BUILDFLAG(IS_CHROMEOS) @@ -436,8 +371,9 @@ policy::DMToken dm_token = policy::GetDMToken(Profile::FromBrowserContext(context_)); - if (!dm_token.is_valid()) + if (!dm_token.is_valid()) { return std::nullopt; + } return dm_token.value(); } @@ -463,12 +399,14 @@ // from guest profiles, the menu item "New incognito window" is not // available. So, if this is a guest session, allow it only if it is a // child OTR profile as well. - if (profile->IsGuestSession()) + if (profile->IsGuestSession()) { return profile->GetOriginalProfile() != profile; + } // Never allow system profiles. - if (profile->IsSystemProfile()) + if (profile->IsSystemProfile()) { return false; + } #endif return !profile->IsOffTheRecord() || profile->IsGuestSession(); @@ -482,15 +420,6 @@ return Profile::FromBrowserContext(context_)->GetPrefs(); } -ConnectorsManagerBase* ConnectorsService::GetConnectorsManagerBase() { - return connectors_manager_.get(); -} - -const ConnectorsManagerBase* ConnectorsService::GetConnectorsManagerBase() - const { - return connectors_manager_.get(); -} - policy::CloudPolicyManager* ConnectorsService::GetManagedUserCloudPolicyManager() const { return Profile::FromBrowserContext(context_)->GetCloudPolicyManager();
diff --git a/chrome/browser/enterprise/connectors/connectors_service.h b/chrome/browser/enterprise/connectors/connectors_service.h index d2f0fe1..0d7b5997 100644 --- a/chrome/browser/enterprise/connectors/connectors_service.h +++ b/chrome/browser/enterprise/connectors/connectors_service.h
@@ -17,7 +17,6 @@ #include "components/enterprise/connectors/core/connectors_service_base.h" #include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "components/keyed_service/core/keyed_service.h" -#include "components/safe_browsing/core/common/safe_browsing_prefs.h" #include "content/public/browser/browser_context.h" namespace base { @@ -35,7 +34,7 @@ class ConnectorsService : public ConnectorsServiceBase, public KeyedService { public: ConnectorsService(content::BrowserContext* context, - std::unique_ptr<ConnectorsManager> manager); + std::unique_ptr<ConnectorsManagerBase> manager); ~ConnectorsService() override; // Accessors that call the corresponding method in ConnectorsManager. @@ -50,30 +49,10 @@ AnalysisConnector connector); #endif // BUILDFLAG(IS_CHROMEOS) - bool DelayUntilVerdict(AnalysisConnector connector); - - // Gets custom message if set by the admin. - std::optional<std::u16string> GetCustomMessage(AnalysisConnector connector, - const std::string& tag); - - // Gets custom learn more URL if provided by the admin. - std::optional<GURL> GetLearnMoreUrl(AnalysisConnector connector, - const std::string& tag); - - // Returns true if the admin enabled Bypass Justification. - bool GetBypassJustificationRequired(AnalysisConnector connector, - const std::string& tag); - // Returns true if the admin has opted into custom message, learn more URL or // letting the user provide bypass justifications in an input dialog. bool HasExtraUiToDisplay(AnalysisConnector connector, const std::string& tag); - std::vector<std::string> GetAnalysisServiceProviderNames( - AnalysisConnector connector); - - std::vector<const AnalysisConfig*> GetAnalysisServiceConfigs( - AnalysisConnector connector); - // Returns the profile email if real-time URL check is set for the profile, // the device ID if it is set for the device, or an empty string if it is // unset. @@ -84,14 +63,7 @@ // precedence. std::string GetManagementDomain(); - // Testing functions. - ConnectorsManager* ConnectorsManagerForTesting(); - - // Observe if reporting policies have changed to include telemetry event. - void ObserveTelemetryReporting(base::RepeatingCallback<void()> callback); - // ConnectorsServiceBase: - bool IsConnectorEnabled(AnalysisConnector connector) const override; std::optional<std::string> GetBrowserDmToken() const override; std::unique_ptr<ClientMetadata> BuildClientMetadata(bool is_cloud) override; @@ -111,8 +83,6 @@ bool ConnectorsEnabled() const override; PrefService* GetPrefs() override; const PrefService* GetPrefs() const override; - ConnectorsManagerBase* GetConnectorsManagerBase() override; - const ConnectorsManagerBase* GetConnectorsManagerBase() const override; policy::CloudPolicyManager* GetManagedUserCloudPolicyManager() const override; // Returns the policy::PolicyScope stored in the given |scope_pref|. @@ -122,7 +92,6 @@ std::unique_ptr<ClientMetadata> GetBasicClientMetadata(Profile* profile); raw_ptr<content::BrowserContext> context_; - std::unique_ptr<ConnectorsManager> connectors_manager_; }; class ConnectorsServiceFactory : public BrowserContextKeyedServiceFactory {
diff --git a/chrome/browser/enterprise/connectors/connectors_service_unittest.cc b/chrome/browser/enterprise/connectors/connectors_service_unittest.cc index 1cbea2f7..1f73ac5 100644 --- a/chrome/browser/enterprise/connectors/connectors_service_unittest.cc +++ b/chrome/browser/enterprise/connectors/connectors_service_unittest.cc
@@ -252,17 +252,18 @@ TEST_P(ConnectorsServiceReportingFeatureTest, CheckTelemetryPolicyObserver) { ConnectorsService* connectors_service = ConnectorsServiceFactory::GetForBrowserContext(profile_); - ConnectorsManager* connectors_manager = - connectors_service->ConnectorsManagerForTesting(); + ConnectorsManagerBase* connectors_manager_base = + connectors_service->ConnectorsManagerBaseForTesting(); base::test::TestFuture<void> future; connectors_service->ObserveTelemetryReporting(future.GetRepeatingCallback()); - ASSERT_FALSE( - connectors_manager->GetTelemetryObserverCallbackForTesting().is_null()); + ASSERT_FALSE(connectors_manager_base->GetTelemetryObserverCallbackForTesting() + .is_null()); // Cache initially empty ASSERT_TRUE( - connectors_manager->GetReportingConnectorsSettingsForTesting().empty()); + connectors_manager_base->GetReportingConnectorsSettingsForTesting() + .empty()); // Enable browser crash event test::SetOnSecurityEventReporting(pref_service(), true, {kBrowserCrashEvent}, @@ -272,7 +273,8 @@ // Clear enabled events (not cached when cleared) test::SetOnSecurityEventReporting(pref_service(), false, {}, {}); ASSERT_TRUE( - connectors_manager->GetReportingConnectorsSettingsForTesting().empty()); + connectors_manager_base->GetReportingConnectorsSettingsForTesting() + .empty()); EXPECT_TRUE(future.WaitAndClear()); // Enable telemetry event
diff --git a/chrome/browser/enterprise/encryption/OWNERS b/chrome/browser/enterprise/encryption/OWNERS new file mode 100644 index 0000000..7b0e0af --- /dev/null +++ b/chrome/browser/enterprise/encryption/OWNERS
@@ -0,0 +1,3 @@ +haihan@google.com + +cep-review@google.com \ No newline at end of file
diff --git a/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.cc b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.cc new file mode 100644 index 0000000..f690d6e --- /dev/null +++ b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.cc
@@ -0,0 +1,31 @@ +// 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/enterprise/encryption/cache_encryption_provider_impl.h" + +#include "components/os_crypt/async/browser/os_crypt_async.h" + +namespace enterprise_encryption { + +CacheEncryptionProviderImpl::CacheEncryptionProviderImpl( + os_crypt_async::OSCryptAsync* os_crypt_async) + : os_crypt_async_(os_crypt_async) {} + +CacheEncryptionProviderImpl::~CacheEncryptionProviderImpl() = default; + +void CacheEncryptionProviderImpl::GetEncryptor(GetEncryptorCallback callback) { + os_crypt_async_->GetInstance(std::move(callback)); +} + +mojo::PendingRemote< + network::mojom::CacheEncryptionProvider> +CacheEncryptionProviderImpl::BindNewRemote() { + mojo::PendingRemote< + network::mojom::CacheEncryptionProvider> + pending_remote; + receivers_.Add(this, pending_remote.InitWithNewPipeAndPassReceiver()); + return pending_remote; +} + +} // namespace enterprise_encryption \ No newline at end of file
diff --git a/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.h b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.h new file mode 100644 index 0000000..9ac8ad7 --- /dev/null +++ b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.h
@@ -0,0 +1,47 @@ +// 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_ENTERPRISE_ENCRYPTION_CACHE_ENCRYPTION_PROVIDER_IMPL_H_ +#define CHROME_BROWSER_ENTERPRISE_ENCRYPTION_CACHE_ENCRYPTION_PROVIDER_IMPL_H_ + +#include "base/component_export.h" +#include "base/memory/raw_ptr.h" +#include "services/network/public/mojom/cache_encryption_provider.mojom.h" +#include "mojo/public/cpp/bindings/receiver_set.h" + +namespace os_crypt_async { +class OSCryptAsync; +} + +namespace enterprise_encryption { + +// Implementation of CacheEncryptionProvider interface. +class CacheEncryptionProviderImpl : public network::mojom::CacheEncryptionProvider { + public: + explicit CacheEncryptionProviderImpl( + os_crypt_async::OSCryptAsync* os_crypt_async); + ~CacheEncryptionProviderImpl() override; + + CacheEncryptionProviderImpl(const CacheEncryptionProviderImpl&) = delete; + CacheEncryptionProviderImpl& operator=(const CacheEncryptionProviderImpl&) = + delete; + + // mojom::CacheEncryptionProvider implementation. + void GetEncryptor(GetEncryptorCallback callback) override; + + // Returns a mojo::PendingRemote to this instance. + mojo::PendingRemote< + network::mojom::CacheEncryptionProvider> + BindNewRemote(); + + private: + mojo::ReceiverSet< + network::mojom::CacheEncryptionProvider> + receivers_; + raw_ptr<os_crypt_async::OSCryptAsync> os_crypt_async_; +}; + +} // namespace enterprise_encryption + +#endif // CHROME_BROWSER_ENTERPRISE_ENCRYPTION_CACHE_ENCRYPTION_PROVIDER_IMPL_H_
diff --git a/chrome/browser/enterprise/encryption/cache_encryption_provider_impl_unittest.cc b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl_unittest.cc new file mode 100644 index 0000000..436fc3f --- /dev/null +++ b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl_unittest.cc
@@ -0,0 +1,88 @@ +// 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/enterprise/encryption/cache_encryption_provider_impl.h" + +#include "base/test/task_environment.h" +#include "components/os_crypt/async/browser/os_crypt_async.h" +#include <optional> + +#include "base/test/bind.h" +#include "components/os_crypt/async/common/encryptor.h" +#include "crypto/aead.h" +#include "mojo/public/cpp/bindings/remote.h" +#include "services/network/public/mojom/cache_encryption_provider.mojom.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace enterprise_encryption { + +namespace { + +class MockOSCryptAsync : public os_crypt_async::OSCryptAsync { + public: + MockOSCryptAsync() : OSCryptAsync({}) {} + ~MockOSCryptAsync() override = default; + + MOCK_METHOD(void, + GetInstance, + (base::OnceCallback<void(os_crypt_async::Encryptor)>, + os_crypt_async::Encryptor::Option), + (override)); +}; + +// Helper for creating an Encryptor for testing. +class TestEncryptor : public os_crypt_async::Encryptor { + public: + TestEncryptor( + KeyRing keys, + const std::string& provider_for_encryption, + const std::string& provider_for_os_crypt_sync_compatible_encryption) + : Encryptor(std::move(keys), + provider_for_encryption, + provider_for_os_crypt_sync_compatible_encryption) {} +}; + +} // namespace + +class CacheEncryptionProviderImplTest : public testing::Test { + public: + CacheEncryptionProviderImplTest() = default; + ~CacheEncryptionProviderImplTest() override = default; + + protected: + base::test::TaskEnvironment task_environment_; + testing::StrictMock<MockOSCryptAsync> os_crypt_async_; + CacheEncryptionProviderImpl provider_{&os_crypt_async_}; +}; + +TEST_F(CacheEncryptionProviderImplTest, GetEncryptor) { + std::optional<os_crypt_async::Encryptor> returned_encryptor; + base::RunLoop run_loop; + EXPECT_CALL(os_crypt_async_, GetInstance) + .WillOnce([&](base::OnceCallback<void(os_crypt_async::Encryptor)> cb, + os_crypt_async::Encryptor::Option option) { + os_crypt_async::Encryptor::KeyRing keys; + keys.emplace("test_provider", + os_crypt_async::Encryptor::Key( + std::vector<uint8_t>(32, 1), + os_crypt_async::mojom::Algorithm::kAES256GCM)); + std::move(cb).Run(TestEncryptor(std::move(keys), "test_provider", + "test_provider")); + }); + + mojo::Remote<network::mojom::CacheEncryptionProvider> remote( + provider_.BindNewRemote()); + + remote->GetEncryptor( + base::BindLambdaForTesting([&](os_crypt_async::Encryptor encryptor_arg) { + returned_encryptor.emplace(std::move(encryptor_arg)); + run_loop.Quit(); + })); + run_loop.Run(); + + EXPECT_TRUE(returned_encryptor.has_value()); +} + +} // namespace enterprise_encryption
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc index 1001a2c..aa381ca 100644 --- a/chrome/browser/extensions/api/downloads/downloads_api.cc +++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -51,6 +51,7 @@ #include "chrome/browser/icon_manager.h" #include "chrome/browser/platform_util.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/extensions/extensions_dialogs.h" #include "chrome/common/extensions/api/downloads.h" #include "components/download/public/common/download_danger_type.h" #include "components/download/public/common/download_interrupt_reasons.h" @@ -87,7 +88,6 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/download/download_danger_prompt.h" -#include "chrome/browser/download/download_open_dialog.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" #endif @@ -1546,7 +1546,7 @@ // TODO(qinmin): check if user prefers to open all download using the same // extension, or check the recent user gesture on the originating webcontents // to avoid showing the prompt. -#if BUILDFLAG(ENABLE_EXTENSIONS) + // For testing, callers can use AcceptDialogForTesting() to pre-determine // the dialog's result. This bypasses showing the dialog. if (g_accept_open_dialog_for_testing) { @@ -1554,16 +1554,13 @@ OpenPromptDone(params->download_id, /*accept=*/true); return RespondLater(); } - ShowDownloadOpenConfirmationDialog( + + extensions::ShowDownloadOpenConfirmationDialog( active_contents, extension()->name(), download_item->GetFullPath(), base::BindOnce(&DownloadsOpenFunction::OpenPromptDone, this, params->download_id)); RecordApiFunctions(DownloadsFunctionName::kDownloadsFunctionOpen); return RespondLater(); -#else - NOTIMPLEMENTED(); - return RespondNow(Error("DownloadOpenPrompt not implemented")); -#endif } // static
diff --git a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc index c91bae7a..e2027d6 100644 --- a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc +++ b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
@@ -38,7 +38,6 @@ #include "chrome/browser/download/download_core_service.h" #include "chrome/browser/download/download_core_service_factory.h" #include "chrome/browser/download/download_file_icon_extractor.h" -#include "chrome/browser/download/download_open_dialog.h" #include "chrome/browser/download/download_prefs.h" #include "chrome/browser/download/download_test_file_activity_observer.h" #include "chrome/browser/extensions/api/downloads/download_extension_errors.h"
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/chrome_desktop_report_request_helper.cc b/chrome/browser/extensions/api/enterprise_reporting_private/chrome_desktop_report_request_helper.cc index 50afe42..a54feb2f 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/chrome_desktop_report_request_helper.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/chrome_desktop_report_request_helper.cc
@@ -32,7 +32,7 @@ #if BUILDFLAG(IS_MAC) #include "base/apple/foundation_util.h" #include "chrome/browser/extensions/api/enterprise_reporting_private/keychain_data_helper_mac.h" -#include "crypto/apple/keychain.h" +#include "crypto/apple/scoped_keychain_user_interaction_allowed.h" #include "crypto/apple/security_framework_lock.h" #endif
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc index cd37abe..f47252a 100644 --- a/chrome/browser/extensions/api/tabs/tabs_api.cc +++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -806,7 +806,6 @@ window_type = tabs::ToString(query_info_.window_type); } - base::Value::List result; Profile* profile = Profile::FromBrowserContext(browser_context()); BrowserWindowInterface* last_active_browser = browser_window_util::GetLastActiveBrowserWithProfile( @@ -822,6 +821,21 @@ // Note: current_browser may still be null. } + base::Value::List result = + BuildTabList(current_browser, last_active_browser, url_patterns, + window_type, window_id, index); + + return RespondNow(WithArguments(std::move(result))); +} + +base::Value::List TabsQueryFunction::BuildTabList( + BrowserWindowInterface* current_browser, + BrowserWindowInterface* last_active_browser, + const URLPatternSet& url_patterns, + const std::string& window_type, + int window_id, + int tab_index) { + base::Value::List result; // Historically, we queried browsers in creation order. Maintain that behavior // (for now). std::vector<BrowserWindowInterface*> all_browsers = @@ -834,7 +848,7 @@ TabListInterface* tab_list = TabListInterface::From(browser); for (int i = 0; i < tab_list->GetTabCount(); ++i) { - if (index > -1 && i != index) { + if (tab_index > -1 && i != tab_index) { continue; } @@ -851,8 +865,7 @@ .ToValue()); } } - - return RespondNow(WithArguments(std::move(result))); + return result; } bool TabsQueryFunction::MatchesProfile(Profile* candidate_profile) { @@ -1508,6 +1521,13 @@ return RespondNow(Error(kCannotDetermineLanguageOfUnloadedTab)); } + // Language detection is asynchronous. + return StartLanguageDetection(contents); +} + +TabsDetectLanguageFunction::ResponseAction +TabsDetectLanguageFunction::StartLanguageDetection( + content::WebContents* contents) { AddRef(); // Balanced in RespondWithLanguage(). ChromeTranslateClient* chrome_translate_client = @@ -1532,7 +1552,6 @@ chrome_translate_client->GetTranslateDriver()->AddLanguageDetectionObserver( this); is_observing_ = true; - return RespondLater(); }
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.h b/chrome/browser/extensions/api/tabs/tabs_api.h index 13302bd..b99335aa 100644 --- a/chrome/browser/extensions/api/tabs/tabs_api.h +++ b/chrome/browser/extensions/api/tabs/tabs_api.h
@@ -252,6 +252,14 @@ private: ~TabsQueryFunction() override = default; + // Builds the list of tab objects to return. + base::Value::List BuildTabList(BrowserWindowInterface* current_browser, + BrowserWindowInterface* last_active_browser, + const URLPatternSet& url_patterns, + const std::string& window_type, + int window_id, + int tab_index); + // Returns true if the given `candidate_profile` matches the calling // extension's profile (taking into account incognito access). bool MatchesProfile(Profile* candidate_profile); @@ -359,6 +367,9 @@ ~TabsDetectLanguageFunction() override = default; ResponseAction Run() override; + // Starts the language detection process, which is asynchronous. + ResponseAction StartLanguageDetection(content::WebContents* contents); + // content::WebContentsObserver: void NavigationEntryCommitted( const content::LoadCommittedDetails& load_details) override;
diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc index 87ccb36..2a1173b 100644 --- a/chrome/browser/extensions/extension_install_prompt.cc +++ b/chrome/browser/extensions/extension_install_prompt.cc
@@ -295,33 +295,48 @@ return l10n_util::GetStringUTF16(id); } -void ExtensionInstallPrompt::Prompt::AppendRatingStars( - StarAppender appender, void* data) const { - CHECK(appender); +std::vector<const gfx::ImageSkia*> +ExtensionInstallPrompt::Prompt::GetRatingStars() const { CHECK(AllowWebstoreData(type_)); - int rating_integer = floor(average_rating_); - double rating_fractional = average_rating_ - rating_integer; + + // The star display logic replicates the one used by the webstore (from + // components.ratingutils.setFractionalYellowStars). + int full_stars = floor(average_rating_); + double rating_fractional = average_rating_ - full_stars; if (rating_fractional > 0.66) { - rating_integer++; + // Show one more full star (e.g. 3.67 stars is shown as 4 full stars) + full_stars += 1; } if (rating_fractional < 0.33 || rating_fractional > 0.66) { + // Do not show a half star. + // E.g.: + // - 3.32 stars is shown as 3 full stars + // - 3.33 stars is shown as 3.5 full stars + // - 3.66 stars is shown as 3.5 full stars + // - 3.67 stars is shown as 4 full stars rating_fractional = 0; } + std::vector<const gfx::ImageSkia*> star_images; ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); - int i; - for (i = 0; i < rating_integer; i++) { - appender(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_ON), data); - } - if (rating_fractional) { - appender(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_HALF_LEFT), data); + + int i = 0; + while (i < full_stars) { + star_images.push_back(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_ON)); i++; } - for (; i < kMaxExtensionRating; i++) { - appender(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_OFF), data); + if (rating_fractional) { + star_images.push_back( + rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_HALF_LEFT)); + i++; } + while (i < kMaxExtensionRating) { + star_images.push_back(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_OFF)); + i++; + } + return star_images; } std::u16string ExtensionInstallPrompt::Prompt::GetRatingCount() const {
diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h index a558d7d5..4aa10ca4 100644 --- a/chrome/browser/extensions/extension_install_prompt.h +++ b/chrome/browser/extensions/extension_install_prompt.h
@@ -141,13 +141,7 @@ // Getters for webstore metadata. Only populated when the type is // INLINE_INSTALL_PROMPT, EXTERNAL_INSTALL_PROMPT, or REPAIR_PROMPT. - - // The star display logic replicates the one used by the webstore (from - // components.ratingutils.setFractionalYellowStars). Callers pass in an - // "appender", which will be repeatedly called back with the star images - // that they append to the star display area. - typedef void(*StarAppender)(const gfx::ImageSkia*, void*); - void AppendRatingStars(StarAppender appender, void* data) const; + std::vector<const gfx::ImageSkia*> GetRatingStars() const; std::u16string GetRatingCount() const; std::u16string GetUserCount() const; size_t GetPermissionCount() const;
diff --git a/chrome/browser/extensions/extension_override_apitest.cc b/chrome/browser/extensions/extension_override_apitest.cc index 2fb5078..6f63d15f 100644 --- a/chrome/browser/extensions/extension_override_apitest.cc +++ b/chrome/browser/extensions/extension_override_apitest.cc
@@ -285,14 +285,7 @@ EXPECT_TRUE(contents->GetRenderWidgetHostView()->HasFocus()); } -// Times out consistently on Win, http://crbug.com/45173. -#if BUILDFLAG(IS_WIN) -#define MAYBE_OverrideHistory DISABLED_OverrideHistory -#else -#define MAYBE_OverrideHistory OverrideHistory -#endif // BUILDFLAG(IS_WIN) - -IN_PROC_BROWSER_TEST_F(ExtensionOverrideTest, MAYBE_OverrideHistory) { +IN_PROC_BROWSER_TEST_F(ExtensionOverrideTest, OverrideHistory) { ASSERT_TRUE(RunExtensionTest("override/history")) << message_; { ResultCatcher catcher;
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 1b949fe..f995e0a 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -5701,7 +5701,7 @@ "owners": [ "//chrome/browser/ui/hats/OWNERS" ], // A debugging and demo flag to allow UI/dev/testing team to always show the UI // components for the survey without being limited by the triggering mechanism. - "expiry_milestone": 140 + "expiry_milestone": 150 }, { "name": "happy-eyeballs-v3", @@ -5718,7 +5718,7 @@ "owners": [ "//chrome/browser/ui/hats/OWNERS" ], - "expiry_milestone": 126 + "expiry_milestone": 150 }, { "name": "hdr-agtm", @@ -8044,11 +8044,6 @@ "expiry_milestone": 150 }, { - "name": "page-content-annotations-persist-salient-image-metadata", - "owners": [ "sophiechang@chromium.org", "chrome-intelligence-core@google.com"], - "expiry_milestone": 130 - }, - { "name": "page-content-annotations-remote-page-metadata", "owners": [ "sophiechang@chromium.org", "chrome-intelligence-core@google.com"], "expiry_milestone": 150 @@ -8513,6 +8508,11 @@ "expiry_milestone": 150 }, { + "name": "profile-creation-friction-reduction-experiment", + "owners": [ "kbajkiewicz@google.com", "chrome-signin-desktop-team@google.com" ], + "expiry_milestone": 160 + }, + { "name": "profile-picker-text-variations", "owners": [ "saskekun@google.com", "chrome-signin-desktop-team@google.com" ], "expiry_milestone": 150
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index c38f322..ba20bde 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -3342,13 +3342,6 @@ inline constexpr char kPageContentAnnotationsDescription[] = "Enables page content to be annotated on-device."; -inline constexpr char kPageContentAnnotationsPersistSalientImageMetadataName[] = - "Page content annotations - Persist salient image metadata"; -inline constexpr char - kPageContentAnnotationsPersistSalientImageMetadataDescription[] = - "Enables salient image metadata per page load to be persisted " - "on-device."; - inline constexpr char kPageContentAnnotationsRemotePageMetadataName[] = "Page content annotations - Remote page metadata"; inline constexpr char kPageContentAnnotationsRemotePageMetadataDescription[] = @@ -4054,6 +4047,12 @@ "As part of the Profile experiments, enables variations of the profile " "picker text."; +inline constexpr char kProfileCreationFrictionReductionExperimentName[] = + "Profile Creation Friction Reduction"; +inline constexpr char kProfileCreationFrictionReductionExperimentDescription[] = + "As part of the Profile experiments, changes parts of the profile creation " + "flow to reduce friction."; + inline constexpr char kShowProfilePickerToAllUsersExperimentName[] = "Show profile picker to all users"; inline constexpr char kShowProfilePickerToAllUsersExperimentDescription[] =
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index 54aacf4..5f5ad9ee 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -511,7 +511,6 @@ &sensitive_content::features::kSensitiveContent, &sensitive_content::features::kSensitiveContentWhileSwitchingTabs, &supervised_user::kPropagateDeviceContentFiltersToSupervisedUser, - &switches::kMitigateLegacySearchEnginePromoOverlap, &switches::kRestrictLegacySearchEnginePromoOnFormFactors, &sync_sessions::kOptimizeAssociateWindowsAndroid, &syncer::kSyncEnableNewSyncDashboardUrl,
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 9cdf82d..7b255a10 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
@@ -500,8 +500,6 @@ "MayLaunchUrlUsesSeparateStoragePartition"; public static final String MEDIA_INDICATORS_ANDROID = "MediaIndicatorsAndroid"; public static final String MINI_ORIGIN_BAR = "MiniOriginBar"; - public static final String MITIGATE_LEGACY_SEARCH_ENGINE_PROMO_OVERLAP = - "MitigateLegacySearchEnginePromoOverlap"; public static final String MOST_VISITED_TILES_CUSTOMIZATION = "MostVisitedTilesCustomization"; public static final String MOST_VISITED_TILES_RESELECT = "MostVisitedTilesReselect"; public static final String MULTI_INSTANCE_APPLICATION_STATUS_CLEANUP = @@ -989,8 +987,6 @@ /* defaultValue= */ false, /* defaultValueInTests= */ true); public static final CachedFlag sMiniOriginBar = newCachedFlag(MINI_ORIGIN_BAR, true, true); - public static final CachedFlag sMitigateLegacySearchEnginePromoOverlap = - newCachedFlag(MITIGATE_LEGACY_SEARCH_ENGINE_PROMO_OVERLAP, true, true); public static final CachedFlag sMostVisitedTilesCustomization = newCachedFlag( MOST_VISITED_TILES_CUSTOMIZATION, @@ -1243,7 +1239,6 @@ sMagicStackAndroid, sMaliciousApkDownloadCheck, sMiniOriginBar, - sMitigateLegacySearchEnginePromoOverlap, sMostVisitedTilesCustomization, sMostVisitedTilesReselect, sMultiInstanceApplicationStatusCleanup,
diff --git a/chrome/browser/focus_ring_browsertest.cc b/chrome/browser/focus_ring_interactive_uitest.cc similarity index 100% rename from chrome/browser/focus_ring_browsertest.cc rename to chrome/browser/focus_ring_interactive_uitest.cc
diff --git a/chrome/browser/glic/BUILD.gn b/chrome/browser/glic/BUILD.gn index 31ed1bb..e355807 100644 --- a/chrome/browser/glic/BUILD.gn +++ b/chrome/browser/glic/BUILD.gn
@@ -366,6 +366,7 @@ "//chrome/browser/glic/media:unit_tests", "//chrome/browser/glic/test_support", "//chrome/browser/prefs", + "//chrome/browser/startup", "//chrome/browser/status_icons", "//chrome/browser/ui", "//chrome/browser/ui:ui_features",
diff --git a/chrome/browser/glic/glic_metrics_unittest.cc b/chrome/browser/glic/glic_metrics_unittest.cc index d2fa0a3..d0ec81c5 100644 --- a/chrome/browser/glic/glic_metrics_unittest.cc +++ b/chrome/browser/glic/glic_metrics_unittest.cc
@@ -9,7 +9,6 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/metrics/user_action_tester.h" #include "base/test/scoped_feature_list.h" -#include "chrome/browser/background/startup_launch_manager.h" #include "chrome/browser/glic/glic_pref_names.h" #include "chrome/browser/glic/host/context/glic_focused_tab_manager.h" #include "chrome/browser/glic/host/context/glic_tab_data.h" @@ -20,6 +19,7 @@ #include "chrome/browser/glic/test_support/glic_test_util.h" #include "chrome/browser/glic/widget/glic_window_controller.h" #include "chrome/browser/global_features.h" +#include "chrome/browser/startup/startup_launch_manager.h" #include "chrome/browser/status_icons/status_icon.h" #include "chrome/browser/status_icons/status_icon_menu_model.h" #include "chrome/browser/status_icons/status_tray.h"
diff --git a/chrome/browser/glic/host/glic_api_browsertest.cc b/chrome/browser/glic/host/glic_api_browsertest.cc index 80644fe..3ae2d1e 100644 --- a/chrome/browser/glic/host/glic_api_browsertest.cc +++ b/chrome/browser/glic/host/glic_api_browsertest.cc
@@ -604,7 +604,9 @@ IN_PROC_BROWSER_TEST_P(GlicApiTest, testLoadWhileWindowClosed) { RunTestSequence( OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kNone), - CloseGlic()); + // Registering a conversation id ensures that the instance isn't deleted + // as soon as the side panel is closed. + RegisterConversation("test-id"), CloseGlic()); ExecuteJsTest(); // Make sure the WebUI transitions to kReady, otherwise the web client may be // destroyed. @@ -617,7 +619,9 @@ // Fail client initialization, should see error page. RunTestSequence( OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kNone), - CloseGlic()); + // Registering a conversation id ensures that the instance isn't deleted + // as soon as the side panel is closed. + RegisterConversation("test-id"), CloseGlic()); ExecuteJsTest(); WaitForWebUiState(mojom::WebUiState::kError); histogram_tester.ExpectUniqueSample( @@ -2116,7 +2120,8 @@ // Client loads, and navigates to a new URL. We try to load the client again, // but it fails. RunTestSequence(OpenGlicWindow(GlicWindowMode::kDetached, - GlicInstrumentMode::kHostAndContents)); + GlicInstrumentMode::kHostAndContents), + RegisterConversation("test-id")); WebUIStateListener listener(GetHost()); listener.WaitForWebUiState(mojom::WebUiState::kReady); ExecuteJsTest({.params = base::Value(0)}); @@ -2635,6 +2640,21 @@ ContinueJsTest(); } +IN_PROC_BROWSER_TEST_P(GlicApiTest, testRemoveBlankInstanceOnClose) { + if (!GetParam().multi_instance) { + GTEST_SKIP() << "Only supported in multi-instance mode."; + } + + RunTestSequence( + InstrumentTab(kFirstTab), + OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kNone)); + ASSERT_EQ(1u, GetService()->window_controller().GetInstances().size()); + ExecuteJsTest(); + ASSERT_TRUE(base::test::RunUntil([&]() { + return GetService()->window_controller().GetInstances().size() == 0u; + })); +} + IN_PROC_BROWSER_TEST_P(GlicApiTestWithOneTab, testSwitchConversationToExistingInstance) { if (!GetParam().multi_instance) {
diff --git a/chrome/browser/glic/host/glic_page_handler.cc b/chrome/browser/glic/host/glic_page_handler.cc index e6580b74..10f5e7a 100644 --- a/chrome/browser/glic/host/glic_page_handler.cc +++ b/chrome/browser/glic/host/glic_page_handler.cc
@@ -1663,8 +1663,12 @@ void NotifyZeroStateSuggestionsChanged( glic::mojom::ZeroStateSuggestionsV2Ptr suggestions, mojom::ZeroStateSuggestionsOptionsPtr options) { - web_client_->NotifyZeroStateSuggestionsChanged(std::move(suggestions), - std::move(options)); + // Ideally, we should redesign this to avoid zss suggestions being delivered + // when there's no client. + if (web_client_) { + web_client_->NotifyZeroStateSuggestionsChanged(std::move(suggestions), + std::move(options)); + } } void NotifyActOnWebCapabilityChanged(bool can_act_on_web) {
diff --git a/chrome/browser/glic/service/glic_instance_impl.cc b/chrome/browser/glic/service/glic_instance_impl.cc index 3aa88eb..0a0bb68 100644 --- a/chrome/browser/glic/service/glic_instance_impl.cc +++ b/chrome/browser/glic/service/glic_instance_impl.cc
@@ -38,6 +38,7 @@ #include "chrome/browser/ui/browser_window/public/browser_window_interface_iterator.h" #include "chrome/browser/ui/tabs/public/tab_features.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h" #include "chrome/common/actor_webui.mojom.h" #include "chrome/common/chrome_features.h" #include "components/prefs/pref_service.h" @@ -56,6 +57,11 @@ base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kGlicBindOnPinFromFloatingUiDoesntShowSidePanel, base::FEATURE_ENABLED_BY_DEFAULT); +BASE_FEATURE(kGlicRemoveBlankInstancesOnClose, + base::FEATURE_ENABLED_BY_DEFAULT); + +const base::FeatureParam<base::TimeDelta> kRemoveBlankInstanceDelay{ + &kGlicRemoveBlankInstancesOnClose, "delay", base::Seconds(1)}; namespace { EmbedderKey CreateSidePanelEmbedderKey(tabs::TabInterface* tab) { @@ -308,7 +314,6 @@ } instance_metrics_.OnClose(); embedder->Close(); - MaybeDeactivateEmbedder(key); } bool GlicInstanceImpl::Toggle(ShowOptions&& options, @@ -546,6 +551,8 @@ } Close(key); + // Avoid dangling raw_ptr. + host_.SetDelegate(&empty_embedder_delegate_); embedders_.erase(key); } @@ -935,6 +942,57 @@ } NotifyInstanceActivationChanged(false); + // This call might delete `this`. + remove_blank_instance_timer_.Start( + FROM_HERE, kRemoveBlankInstanceDelay.Get(), this, + &GlicInstanceImpl::MaybeRemoveBlankInstanceOnClose); +} + +void GlicInstanceImpl::MaybeRemoveBlankInstanceOnClose() { + if (!base::FeatureList::IsEnabled(kGlicRemoveBlankInstancesOnClose)) { + return; + } + // If the conversation id is set, then the instance isn't blank. + if (conversation_id().has_value()) { + return; + } + if (embedders_.size() != 1) { + return; + } + + const auto& [key, entry] = *embedders_.begin(); + tabs::TabInterface* const* tab = std::get_if<tabs::TabInterface*>(&key); + if (!tab) { + // The single embedder is not a side panel (e.g., it's a floating embedder). + return; + } + + GlicSidePanelCoordinator* coordinator = + GlicSidePanelCoordinator::GetForTab(*tab); + if (!coordinator) { + return; + } + // Only delete the instance if the side panel is actually closed, as opposed + // to just being on a backgrounded tab. + if (coordinator->state() != GlicSidePanelCoordinator::State::kClosed) { + return; + } + + // Only remove the instance if there are no pinned tabs, or if the only pinned + // tab is the one for this embedder. + if (sharing_manager_.GetNumPinnedTabs() > 1) { + return; + } + if (sharing_manager_.GetNumPinnedTabs() == 1 && + !sharing_manager_.IsTabPinned((*tab)->GetHandle())) { + return; + } + + UnbindEmbedder(*tab); + if (coordinator_delegate_) { + // This call will delete `this`. + coordinator_delegate_->RemoveInstance(this); + } } void GlicInstanceImpl::NotifyInstanceActivationChanged(bool is_active) { @@ -943,6 +1001,7 @@ if (is_active) { last_active_time_ = base::TimeTicks::Now(); inactivity_timer_.Stop(); + remove_blank_instance_timer_.Stop(); } else { last_active_time_ = base::TimeTicks::Now(); inactivity_timer_.Start(
diff --git a/chrome/browser/glic/service/glic_instance_impl.h b/chrome/browser/glic/service/glic_instance_impl.h index 60178f61..31e03f53 100644 --- a/chrome/browser/glic/service/glic_instance_impl.h +++ b/chrome/browser/glic/service/glic_instance_impl.h
@@ -316,6 +316,7 @@ bool ShouldPinOnBind() const; void MaybeActivateForegroundEmbedder(); + void MaybeRemoveBlankInstanceOnClose(); EmbedderEntry& BindTab(tabs::TabInterface* tab); // For any pinned tab not already bound to a conversation bind it to this one. void OnTabPinningStatusChanged(tabs::TabInterface* tab, bool pinned); @@ -390,6 +391,8 @@ base::OneShotTimer inactivity_timer_; base::TimeTicks last_active_time_; + base::OneShotTimer remove_blank_instance_timer_; + base::WeakPtrFactory<GlicInstanceImpl> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/glic/test_support/interactive_glic_test.h b/chrome/browser/glic/test_support/interactive_glic_test.h index 1cee045b..aebba40 100644 --- a/chrome/browser/glic/test_support/interactive_glic_test.h +++ b/chrome/browser/glic/test_support/interactive_glic_test.h
@@ -502,6 +502,21 @@ }); } + auto RegisterConversation(std::string conversation_id) { + return Api::Do([this, conversation_id]() { + if (base::FeatureList::IsEnabled(features::kGlicMultiInstance)) { + auto* instance = GetGlicInstanceImpl(); + if (!instance) { + return; + } + auto conversation_info = glic::mojom::ConversationInfo::New(); + conversation_info->conversation_id = conversation_id; + instance->RegisterConversation(std::move(conversation_info), + base::DoNothing()); + } + }); + } + auto ClickWebuiCloseButton() { return ClickWebElement(TargetWebContents::kGlicWebUi, ".close-button"); }
diff --git a/chrome/browser/glic/widget/inactive_view_controller.cc b/chrome/browser/glic/widget/inactive_view_controller.cc index 5c6d3bd..097faf5 100644 --- a/chrome/browser/glic/widget/inactive_view_controller.cc +++ b/chrome/browser/glic/widget/inactive_view_controller.cc
@@ -96,6 +96,7 @@ card_view->layer()->SetFillsBoundsOpaquely(false); card_view->SetBackground( views::CreateRoundedRectBackground(kColorSidePanelBackground, 16)); + card_view->SetVisible(false); card_view_tracker_.SetView(card_view.get()); auto icon = std::make_unique<views::ImageView>(ui::ImageModel::FromImageSkia(
diff --git a/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListener.java b/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListener.java index 01404d5..4dba12f 100644 --- a/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListener.java +++ b/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListener.java
@@ -19,12 +19,14 @@ private final Runnable mOnScrollUp; private final Runnable mOnScrollDown; private final long mThrottleMs; - private final int mScrollThreshold; + private final int mScrollUpThreshold; + private final int mScrollDownThreshold; private final Handler mHandler; private boolean mIsThrottled; private static final int DEFAULT_THROTTLE_MS = 50; - private static final int DEFAULT_SCROLL_THRESHOLD = 2; + private static final int DEFAULT_SCROLL_UP_THRESHOLD = 5; + private static final int DEFAULT_SCROLL_DOWN_THRESHOLD = 2; /** * Creates a new instance of {@link DirectionalScrollListener}. @@ -33,7 +35,12 @@ * @param onScrollDown The callback to invoke when scrolling down. */ public DirectionalScrollListener(Runnable onScrollUp, Runnable onScrollDown) { - this(onScrollUp, onScrollDown, DEFAULT_THROTTLE_MS, DEFAULT_SCROLL_THRESHOLD); + this( + onScrollUp, + onScrollDown, + DEFAULT_THROTTLE_MS, + DEFAULT_SCROLL_UP_THRESHOLD, + DEFAULT_SCROLL_DOWN_THRESHOLD); } /** @@ -44,7 +51,12 @@ * @param throttleMs The minimum time in milliseconds between invocations of the callbacks. */ public DirectionalScrollListener(Runnable onScrollUp, Runnable onScrollDown, long throttleMs) { - this(onScrollUp, onScrollDown, throttleMs, DEFAULT_SCROLL_THRESHOLD); + this( + onScrollUp, + onScrollDown, + throttleMs, + DEFAULT_SCROLL_UP_THRESHOLD, + DEFAULT_SCROLL_DOWN_THRESHOLD); } /** @@ -57,10 +69,30 @@ */ public DirectionalScrollListener( Runnable onScrollUp, Runnable onScrollDown, long throttleMs, int scrollThreshold) { + this(onScrollUp, onScrollDown, throttleMs, scrollThreshold, scrollThreshold); + } + + /** + * Creates a new instance of {@link DirectionalScrollListener}. + * + * @param onScrollUp The callback to invoke when scrolling up. + * @param onScrollDown The callback to invoke when scrolling down. + * @param throttleMs The minimum time in milliseconds between invocations of the callbacks. + * @param scrollUpThreshold The minimum scroll up distance in pixels to trigger the callbacks. + * @param scrollDownThreshold The minimum scroll down distance in pixels to trigger the + * callbacks. + */ + public DirectionalScrollListener( + Runnable onScrollUp, + Runnable onScrollDown, + long throttleMs, + int scrollUpThreshold, + int scrollDownThreshold) { mOnScrollUp = onScrollUp; mOnScrollDown = onScrollDown; mThrottleMs = throttleMs; - mScrollThreshold = scrollThreshold; + mScrollUpThreshold = scrollUpThreshold; + mScrollDownThreshold = scrollDownThreshold; mHandler = new Handler(); } @@ -70,16 +102,21 @@ return; } - if (Math.abs(dy) < mScrollThreshold) { + if (dy > 0) { + if (dy < mScrollDownThreshold) { + return; + } + mOnScrollDown.run(); + } else if (dy < 0) { + if (Math.abs(dy) < mScrollUpThreshold) { + return; + } + mOnScrollUp.run(); + } else { return; } mIsThrottled = true; - if (dy > 0) { - mOnScrollDown.run(); - } else if (dy < 0) { - mOnScrollUp.run(); - } mHandler.postDelayed(() -> mIsThrottled = false, mThrottleMs); } }
diff --git a/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListenerUnitTest.java b/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListenerUnitTest.java index 72ca7d8..5e2401a 100644 --- a/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListenerUnitTest.java +++ b/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListenerUnitTest.java
@@ -86,4 +86,36 @@ verify(mOnScrollDown, times(2)).run(); verify(mOnScrollUp, never()).run(); } + + @Test + @SmallTest + public void testDifferentThresholds() { + int scrollUpThreshold = 10; + int scrollDownThreshold = 20; + mListener = + new DirectionalScrollListener( + mOnScrollUp, mOnScrollDown, 50, scrollUpThreshold, scrollDownThreshold); + + // Test scroll down threshold. + mListener.onScrolled(mRecyclerView, 0, 15); + verify(mOnScrollDown, never()).run(); + verify(mOnScrollUp, never()).run(); + + mListener.onScrolled(mRecyclerView, 0, 25); + verify(mOnScrollDown, times(1)).run(); + verify(mOnScrollUp, never()).run(); + + // Wait for the throttle to expire. + ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); + + // Test scroll up threshold. + mListener.onScrolled(mRecyclerView, 0, -5); + verify(mOnScrollUp, never()).run(); + // Verify scroll down didn't run again. + verify(mOnScrollDown, times(1)).run(); + + mListener.onScrolled(mRecyclerView, 0, -15); + verify(mOnScrollUp, times(1)).run(); + verify(mOnScrollDown, times(1)).run(); + } }
diff --git a/chrome/browser/importer/external_process_importer_client.cc b/chrome/browser/importer/external_process_importer_client.cc index 6ee7a95..fd95043c 100644 --- a/chrome/browser/importer/external_process_importer_client.cc +++ b/chrome/browser/importer/external_process_importer_client.cc
@@ -8,7 +8,6 @@ #include "base/functional/bind.h" #include "base/strings/string_number_conversions.h" -#include "build/build_config.h" #include "chrome/browser/importer/external_process_importer_host.h" #include "chrome/browser/importer/in_process_importer_bridge.h" #include "chrome/common/importer/firefox_importer_utils.h" @@ -16,7 +15,6 @@ #include "chrome/grit/generated_resources.h" #include "components/strings/grit/components_strings.h" #include "components/user_data_importer/common/imported_bookmark_entry.h" -#include "content/public/browser/child_process_host.h" #include "content/public/browser/service_process_host.h" #include "ui/base/l10n/l10n_util.h" @@ -43,12 +41,6 @@ profile_import_.BindNewPipeAndPassReceiver(), content::ServiceProcessHost::Options() .WithDisplayName(IDS_UTILITY_PROCESS_PROFILE_IMPORTER_NAME) -#if BUILDFLAG(IS_MAC) - // Importing from Firefox involves loading a Firefox dylib into the - // importer service process. Use the child process that doesn't - // enforce library validation so that this will work. - .WithChildFlags(content::ChildProcessHost::CHILD_PLUGIN) -#endif .Pass()); profile_import_.set_disconnect_handler( base::BindOnce(&ExternalProcessImporterClient::OnProcessCrashed, this));
diff --git a/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java b/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java index 8d385cb5..3d24ba7 100644 --- a/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java +++ b/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java
@@ -88,14 +88,6 @@ */ public interface TabSwitchingDelegate { /** - * A {@link KeyboardAccessoryData.Tab} passed into this function will be represented as item - * at the start of the tab layout. It is meant to trigger various bottom sheets. - * - * @param tab The tab which contains representation data of a bottom sheet. - */ - void addTab(KeyboardAccessoryData.Tab tab); - - /** * The {@link KeyboardAccessoryData.Tab} passed into this function will be completely * removed from the tab layout. *
diff --git a/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupMediator.java b/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupMediator.java index 7caace8a..bdd008c 100644 --- a/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupMediator.java +++ b/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupMediator.java
@@ -88,11 +88,6 @@ } @Override - public void addTab(KeyboardAccessoryData.Tab tab) { - mModel.get(TABS).add(tab); - } - - @Override public void removeTab(KeyboardAccessoryData.Tab tab) { mModel.get(TABS).remove(tab); }
diff --git a/chrome/browser/net/cookie_encryption_provider_browsertest.cc b/chrome/browser/net/cookie_encryption_provider_interactive_uitest.cc similarity index 100% rename from chrome/browser/net/cookie_encryption_provider_browsertest.cc rename to chrome/browser/net/cookie_encryption_provider_interactive_uitest.cc
diff --git a/chrome/browser/os_crypt/app_bound_encryption_test_main.cc b/chrome/browser/os_crypt/app_bound_encryption_test_main.cc index 35034e0f..6bdd38e 100644 --- a/chrome/browser/os_crypt/app_bound_encryption_test_main.cc +++ b/chrome/browser/os_crypt/app_bound_encryption_test_main.cc
@@ -13,6 +13,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/win/scoped_com_initializer.h" #include "chrome/browser/os_crypt/app_bound_encryption_win.h" #include "chrome/browser/os_crypt/test_support.h"
diff --git a/chrome/browser/page_content_annotations/page_content_annotations_service_browsertest.cc b/chrome/browser/page_content_annotations/page_content_annotations_service_browsertest.cc index 2d757fca..73070e9 100644 --- a/chrome/browser/page_content_annotations/page_content_annotations_service_browsertest.cc +++ b/chrome/browser/page_content_annotations/page_content_annotations_service_browsertest.cc
@@ -821,9 +821,7 @@ public: PageContentAnnotationsServiceSalientImageMetadataBrowserTest() { scoped_feature_list_.InitWithFeaturesAndParameters( - {{features::kPageContentAnnotations, {}}, - {features::kPageContentAnnotationsPersistSalientImageMetadata, - {{"supported_countries", "*"}, {"supported_locales", "*"}}}}, + {{features::kPageContentAnnotations, {}}}, /*disabled_features=*/{}); set_load_model_on_startup(false); }
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc index 35e958a..23e980211 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc
@@ -18,7 +18,6 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/test/metrics/histogram_tester.h" -#include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile.h" @@ -34,9 +33,7 @@ #include "components/page_load_metrics/browser/observers/ad_metrics/ad_intervention_browser_test_utils.h" #include "components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h" #include "components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" #include "components/page_load_metrics/browser/page_load_metrics_test_waiter.h" -#include "components/performance_manager/public/v8_memory/v8_detailed_memory.h" #include "components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h" #include "components/subresource_filter/content/shared/browser/ruleset_service.h" #include "components/subresource_filter/core/browser/subresource_filter_features.h" @@ -109,12 +106,6 @@ const char kHeavyAdInterventionTypeHistogramId[] = "PageLoad.Clients.Ads.HeavyAds.InterventionType2"; -const char kMemoryMainFrameMaxHistogramId[] = - "PageLoad.Clients.Ads.Memory.MainFrame.Max"; - -const char kMemoryUpdateCountHistogramId[] = - "PageLoad.Clients.Ads.Memory.UpdateCount"; - } // namespace class AdsPageLoadMetricsObserverBrowserTest @@ -139,8 +130,7 @@ void SetUp() override { std::vector<base::test::FeatureRef> enabled = { - subresource_filter::kAdTagging, - page_load_metrics::features::kV8PerFrameMemoryMonitoring}; + subresource_filter::kAdTagging}; std::vector<base::test::FeatureRef> disabled = {}; scoped_feature_list_.InitWithFeatures(enabled, disabled); @@ -3116,113 +3106,6 @@ "PageLoad.Clients.Ads.FrameCounts.AdFrames.Total", 0); } -class AdsMemoryMeasurementBrowserTest - : public subresource_filter::SubresourceFilterBrowserTest { - public: - AdsMemoryMeasurementBrowserTest() = default; - - AdsMemoryMeasurementBrowserTest(const AdsMemoryMeasurementBrowserTest&) = - delete; - AdsMemoryMeasurementBrowserTest& operator=( - const AdsMemoryMeasurementBrowserTest&) = delete; - - ~AdsMemoryMeasurementBrowserTest() override = default; - - void SetUp() override { - performance_manager::v8_memory::internal:: - SetEagerMemoryMeasurementEnabledForTesting(true); - std::vector<base::test::FeatureRef> enabled = { - subresource_filter::kAdTagging, - page_load_metrics::features::kV8PerFrameMemoryMonitoring}; - std::vector<base::test::FeatureRef> disabled = {}; - scoped_feature_list_.InitWithFeatures(enabled, disabled); - - subresource_filter::SubresourceFilterBrowserTest::SetUp(); - } - - std::unique_ptr<page_load_metrics::PageLoadMetricsTestWaiter> - CreatePageLoadMetricsTestWaiter() { - content::WebContents* web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - return std::make_unique<page_load_metrics::PageLoadMetricsTestWaiter>( - web_contents); - } - - std::unordered_set<content::GlobalRenderFrameHostId, - content::GlobalRenderFrameHostIdHasher> - GetFrameRoutingIds() { - content::WebContents* web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - std::unordered_set<content::GlobalRenderFrameHostId, - content::GlobalRenderFrameHostIdHasher> - frame_routing_ids; - - web_contents->GetPrimaryMainFrame()->ForEachRenderFrameHost( - [&frame_routing_ids](content::RenderFrameHost* frame) { - frame_routing_ids.insert(frame->GetGlobalId()); - }); - - return frame_routing_ids; - } - - private: - std::unique_ptr<page_load_metrics::PageLoadMetricsTestWaiter> waiter_; - base::test::ScopedFeatureList scoped_feature_list_; -}; - -IN_PROC_BROWSER_TEST_F(AdsMemoryMeasurementBrowserTest, - SingleAdFrame_MaxMemoryBytesRecorded) { - base::HistogramTester histogram_tester; - - // Instantiate a memory request and observer to set memory measurement - // polling parameters. PageLoadMetricsMemoryTracker will get results as soon - // as they're available for this request, which is able to use - // kEagerForTesting mode. - using performance_manager::v8_memory::V8DetailedMemoryRequest; - auto memory_request = std::make_unique<V8DetailedMemoryRequest>( - base::Seconds(1), - V8DetailedMemoryRequest::MeasurementMode::kEagerForTesting); - memory_request->StartMeasurement(); - - // cross_site_iframe_factory loads URLs like: - // http://b.com:40919/cross_site_iframe_factory.html?b() - SetRulesetWithRules({subresource_filter::testing::CreateSuffixRule("b()")}); - const GURL main_url(embedded_test_server()->GetURL( - "a.com", "/cross_site_iframe_factory.html?a(b)")); - - // Create a waiter, navigate to the main URL, and prime the waiter with the - // mainframe's routing ID. - auto waiter = CreatePageLoadMetricsTestWaiter(); - - // Navigate to the main URL. - ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), main_url)); - - waiter->AddMemoryUpdateExpectation(browser() - ->tab_strip_model() - ->GetActiveWebContents() - ->GetPrimaryMainFrame() - ->GetGlobalId()); - - // Add any additional frame routing IDs and wait until we get positive - // memory measurements for each frame. - for (content::GlobalRenderFrameHostId id : GetFrameRoutingIds()) { - waiter->AddMemoryUpdateExpectation(id); - } - waiter->Wait(); - - // Navigate away to force the histogram recording. - ASSERT_TRUE( - ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL))); - - histogram_tester.ExpectTotalCount(kMemoryMainFrameMaxHistogramId, 1); - EXPECT_GT( - histogram_tester.GetAllSamples(kMemoryMainFrameMaxHistogramId)[0].min, 0); - - histogram_tester.ExpectTotalCount(kMemoryUpdateCountHistogramId, 1); - EXPECT_GE( - histogram_tester.GetAllSamples(kMemoryUpdateCountHistogramId)[0].min, 1); -} - class AdsPageLoadMetricsObserverPrerenderingBrowserTest : public AdsPageLoadMetricsObserverBrowserTest { public: @@ -3397,6 +3280,7 @@ {"promise_resolve", "Promise.resolve().then($1);"}, {"promise_reject", "Promise.reject().catch($1);"}, {"queueMicrotask", "queueMicrotask($1);"}, + {"postTask", "scheduler.postTask($1);"}, {"dynamic_script_tag", R"SCRIPT( const s = document.createElement("script"); s.innerText = '$1();';
diff --git a/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc index 5eec560..29a9bdc 100644 --- a/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc +++ b/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc
@@ -434,17 +434,6 @@ EXPECT_EQ(rfh_a->GetLifecycleState(), content::RenderFrameHost::LifecycleState::kInBackForwardCache); - auto samples = histogram_tester().GetAllSamples( - internal:: - kHistogramCumulativeShiftScoreMainFrameAfterBackForwardCacheRestore); - EXPECT_EQ(1ul, samples.size()); - EXPECT_EQ(base::Bucket(page_load_metrics::LayoutShiftUmaValue(next_score), 1), - samples[0]); - - histogram_tester().ExpectTotalCount( - internal:: - kHistogramCumulativeShiftScoreMainFrameAfterBackForwardCacheRestore, - 1); histogram_tester().ExpectTotalCount( internal::kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore, 1); @@ -457,8 +446,6 @@ // As back-foward cache is used twice (once for A and once for B), the current // total count is 2. histogram_tester().ExpectBucketCount( - "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame", 0, 2); - histogram_tester().ExpectBucketCount( "PageLoad.LayoutInstability.CumulativeShiftScore", 0, 2); // Go back to A again. @@ -474,10 +461,6 @@ content::RenderFrameHost::LifecycleState::kInBackForwardCache); histogram_tester().ExpectTotalCount( - internal:: - kHistogramCumulativeShiftScoreMainFrameAfterBackForwardCacheRestore, - 2); - histogram_tester().ExpectTotalCount( internal::kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore, 2); ExpectMetricCountForUrl( @@ -485,8 +468,6 @@ // As back-foward cache is used fourth in total. histogram_tester().ExpectBucketCount( - "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame", 0, 4); - histogram_tester().ExpectBucketCount( "PageLoad.LayoutInstability.CumulativeShiftScore", 0, 4); }
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc index 82c74bc9..5f174a1e 100644 --- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
@@ -764,7 +764,7 @@ builder .SetPaintTimingBeforeSoftNavigation_NavigationToLargestContentfulPaint2( largest_contentful_paint.Time().value().InMilliseconds()); - PAGE_LOAD_HISTOGRAM("PageLoad.BeforeSoftNavigation.LargestContentfulPaint2", + PAGE_LOAD_HISTOGRAM("PageLoad.BeforeSoftNavigation.LargestContentfulPaint2", largest_contentful_paint.Time().value()); } builder.Record(ukm::UkmRecorder::Get()); @@ -1363,11 +1363,6 @@ GetDelegate() .GetPageRenderData() .layout_shift_score_before_input_or_scroll)); - - base::UmaHistogramCounts100( - "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame", - page_load_metrics::LayoutShiftUmaValue( - GetDelegate().GetMainFrameRenderData().layout_shift_score)); } void UkmPageLoadMetricsObserver::ReportLayoutInstabilityAfterFirstForeground() {
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc index 32e7d51..3695f8c 100644 --- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc
@@ -2181,11 +2181,6 @@ "PageLoad.LayoutInstability.CumulativeShiftScore"), testing::ElementsAre(base::Bucket(25, 1))); - // Main-frame (DCLS) score includes only the LS scores in the main frame. - EXPECT_THAT(tester()->histogram_tester().GetAllSamples( - "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame"), - testing::ElementsAre(base::Bucket(10, 1))); - const auto& ukm_recorder = tester()->test_ukm_recorder(); std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries = ukm_recorder.GetMergedEntriesByName(PageLoad::kEntryName);
diff --git a/chrome/browser/page_load_metrics/observers/loading_predictor_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/loading_predictor_page_load_metrics_observer.h index 247c94b..03abbc1 100644 --- a/chrome/browser/page_load_metrics/observers/loading_predictor_page_load_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/loading_predictor_page_load_metrics_observer.h
@@ -67,7 +67,6 @@ const page_load_metrics::mojom::PageLoadTiming& timing) override; void OnFirstMeaningfulPaintInMainFrameDocument( const page_load_metrics::mojom::PageLoadTiming& timing) override; - private: raw_ptr<predictors::ResourcePrefetchPredictor> predictor_; raw_ptr<predictors::LoadingPredictorTabHelper> predictor_tab_helper_;
diff --git a/chrome/browser/page_load_metrics/observers/security_state_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/security_state_page_load_metrics_observer.cc index 0320c8e5c..73a91ac5 100644 --- a/chrome/browser/page_load_metrics/observers/security_state_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/security_state_page_load_metrics_observer.cc
@@ -75,7 +75,7 @@ SecurityStatePageLoadMetricsObserver::SecurityStatePageLoadMetricsObserver( site_engagement::SiteEngagementService* engagement_service) - : content::WebContentsObserver(), engagement_service_(engagement_service) {} + : engagement_service_(engagement_service) {} SecurityStatePageLoadMetricsObserver::~SecurityStatePageLoadMetricsObserver() = default;
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc index 06c33bc..88fc195a 100644 --- a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc +++ b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
@@ -432,9 +432,6 @@ kHistogramNavigationTimingNavigationStartToFirstLoaderCallback, expected_count); histogram_tester_->ExpectTotalCount( - internal::kHistogramNavigationTimingNavigationStartToFinalRequestStart, - expected_count); - histogram_tester_->ExpectTotalCount( internal::kHistogramNavigationTimingNavigationStartToFinalResponseStart, expected_count); histogram_tester_->ExpectTotalCount( @@ -1035,10 +1032,6 @@ histogram_tester_->ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); histogram_tester_->ExpectTotalCount(internal::kHistogramLoad, 1); histogram_tester_->ExpectTotalCount(internal::kHistogramFirstPaint, 1); - histogram_tester_->ExpectTotalCount( - internal::kHistogramParseBlockedOnScriptLoad, 1); - histogram_tester_->ExpectTotalCount( - internal::kHistogramParseBlockedOnScriptExecution, 1); // Force navigation to another page, which should force logging of histograms // persisted at the end of the page load lifetime. @@ -1070,10 +1063,6 @@ histogram_tester_->ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); histogram_tester_->ExpectTotalCount(internal::kHistogramLoad, 1); histogram_tester_->ExpectTotalCount(internal::kHistogramFirstPaint, 1); - histogram_tester_->ExpectTotalCount( - internal::kHistogramParseBlockedOnScriptLoad, 1); - histogram_tester_->ExpectTotalCount( - internal::kHistogramParseBlockedOnScriptExecution, 1); // Force navigation to another page, which should force logging of histograms // persisted at the end of the page load lifetime.
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc index 1241cbf..dce86a7 100644 --- a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc +++ b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc
@@ -44,7 +44,6 @@ #include "chrome/browser/page_load_metrics/observers/third_party_cookie_deprecation_page_load_metrics_observer.h" #include "chrome/browser/page_load_metrics/observers/translate_page_load_metrics_observer.h" #include "chrome/browser/page_load_metrics/observers/webui_page_load_metrics_observer.h" -#include "chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h" #include "chrome/browser/preloading/prefetch/no_state_prefetch/chrome_no_state_prefetch_contents_delegate.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search/search.h" @@ -56,7 +55,6 @@ #include "components/page_load_metrics/browser/observers/third_party_metrics_observer.h" #include "components/page_load_metrics/browser/observers/zstd_page_load_metrics_observer.h" #include "components/page_load_metrics/browser/page_load_metrics_embedder_base.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" #include "components/page_load_metrics/browser/page_load_tracker.h" #include "components/page_load_metrics/google/browser/from_gws_abandoned_page_load_metrics_observer.h" #include "components/page_load_metrics/google/browser/gws_abandoned_page_load_metrics_observer.h" @@ -134,10 +132,6 @@ bool IsNonTabWebUI(const GURL& url) override; bool IsInternalWebUI(const GURL& url) override; bool ShouldObserveScheme(std::string_view scheme) override; - page_load_metrics::PageLoadMetricsMemoryTracker* - GetMemoryTrackerForBrowserContext( - content::BrowserContext* browser_context) override; - protected: // page_load_metrics::PageLoadMetricsEmbedderBase: void RegisterObservers(page_load_metrics::PageLoadTracker* tracker, @@ -357,18 +351,6 @@ // BUILDFLAG(IS_CHROMEOS) } -page_load_metrics::PageLoadMetricsMemoryTracker* -PageLoadMetricsEmbedder::GetMemoryTrackerForBrowserContext( - content::BrowserContext* browser_context) { - if (!base::FeatureList::IsEnabled( - page_load_metrics::features::kV8PerFrameMemoryMonitoring)) { - return nullptr; - } - - return page_load_metrics::PageLoadMetricsMemoryTrackerFactory:: - GetForBrowserContext(browser_context); -} - } // namespace void InitializePageLoadMetricsForWebContents(
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.cc b/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.cc deleted file mode 100644 index 8603c1c..0000000 --- a/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.cc +++ /dev/null
@@ -1,50 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h" - -#include "base/no_destructor.h" -#include "components/page_load_metrics/browser/features.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" - -namespace page_load_metrics { - -PageLoadMetricsMemoryTracker* -PageLoadMetricsMemoryTrackerFactory::GetForBrowserContext( - content::BrowserContext* context) { - return static_cast<page_load_metrics::PageLoadMetricsMemoryTracker*>( - GetInstance()->GetServiceForBrowserContext(context, true)); -} - -PageLoadMetricsMemoryTrackerFactory* -PageLoadMetricsMemoryTrackerFactory::GetInstance() { - static base::NoDestructor<PageLoadMetricsMemoryTrackerFactory> instance; - return instance.get(); -} - -PageLoadMetricsMemoryTrackerFactory::PageLoadMetricsMemoryTrackerFactory() - : ProfileKeyedServiceFactory( - "PageLoadMetricsMemoryTracker", - ProfileSelections::Builder() - .WithRegular(ProfileSelection::kOwnInstance) - // TODO(crbug.com/40257657): Check if this service is needed in - // Guest mode. - .WithGuest(ProfileSelection::kOwnInstance) - // TODO(crbug.com/41488885): Check if this service is needed for - // Ash Internals. - .WithAshInternals(ProfileSelection::kOwnInstance) - .Build()) {} - -bool PageLoadMetricsMemoryTrackerFactory::ServiceIsCreatedWithBrowserContext() - const { - return base::FeatureList::IsEnabled(features::kV8PerFrameMemoryMonitoring); -} - -std::unique_ptr<KeyedService> -PageLoadMetricsMemoryTrackerFactory::BuildServiceInstanceForBrowserContext( - content::BrowserContext* context) const { - return std::make_unique<page_load_metrics::PageLoadMetricsMemoryTracker>(); -} - -} // namespace page_load_metrics
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h b/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h deleted file mode 100644 index 98413bda..0000000 --- a/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h +++ /dev/null
@@ -1,33 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PAGE_LOAD_METRICS_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_ -#define CHROME_BROWSER_PAGE_LOAD_METRICS_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_ - -#include "chrome/browser/profiles/profile_keyed_service_factory.h" - -namespace page_load_metrics { - -class PageLoadMetricsMemoryTracker; - -class PageLoadMetricsMemoryTrackerFactory : public ProfileKeyedServiceFactory { - public: - static PageLoadMetricsMemoryTracker* GetForBrowserContext( - content::BrowserContext* context); - - static PageLoadMetricsMemoryTrackerFactory* GetInstance(); - - PageLoadMetricsMemoryTrackerFactory(); - - private: - // BrowserContextKeyedServiceFactory: - bool ServiceIsCreatedWithBrowserContext() const override; - - std::unique_ptr<KeyedService> BuildServiceInstanceForBrowserContext( - content::BrowserContext* context) const override; -}; - -} // namespace page_load_metrics - -#endif // CHROME_BROWSER_PAGE_LOAD_METRICS_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_
diff --git a/chrome/browser/policy/test/autofill_ai_policy_browsertest.cc b/chrome/browser/policy/test/autofill_ai_policy_browsertest.cc index 8ada3312..5249620 100644 --- a/chrome/browser/policy/test/autofill_ai_policy_browsertest.cc +++ b/chrome/browser/policy/test/autofill_ai_policy_browsertest.cc
@@ -41,19 +41,36 @@ static_assert(base::to_underlying(kAllowWithoutLogging) == 1); static_assert(base::to_underlying(kDisable) == 2); +// This test has two parameters: +// * Policy value. +// * kYourSavedInfoSettingsPage feature flag value. When this flag is on, the +// `/autofill` page is replaced with the '/identityDocs' and '/travel' pages. class AutofillAiPolicyTest : public PolicyTest, - public testing::WithParamInterface<ModelExecutionEnterprisePolicyValue> { + public testing::WithParamInterface< + std::tuple<ModelExecutionEnterprisePolicyValue, bool>> { public: AutofillAiPolicyTest() { - scoped_feature_list_.InitWithFeatures( - {autofill::features::kAutofillAiWithDataSchema, - autofill::features::kAutofillAiIgnoreGeoIp}, - {}); + std::vector<base::test::FeatureRef> enabled_features{ + autofill::features::kAutofillAiWithDataSchema, + autofill::features::kAutofillAiIgnoreGeoIp}; + std::vector<base::test::FeatureRef> disabled_features; + + if (is_your_saved_info_settings_page_enabled()) { + enabled_features.push_back( + autofill::features::kYourSavedInfoSettingsPage); + } else { + disabled_features.push_back( + autofill::features::kYourSavedInfoSettingsPage); + } + scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features); } ModelExecutionEnterprisePolicyValue policy_value() const { - return GetParam(); + return std::get<0>(GetParam()); + } + bool is_your_saved_info_settings_page_enabled() const { + return std::get<1>(GetParam()); } bool disabled_by_policy() const { return policy_value() == kDisable; } @@ -91,6 +108,14 @@ base::Unretained(this))); } + void VerifySettingsUrlIsReachable(std::string_view sub_page) { + ASSERT_TRUE(ui_test_utils::NavigateToURL( + browser(), GURL(base::StrCat({"chrome://settings/", sub_page})))); + EXPECT_TRUE(content::WaitForLoadStop(GetWebContents())); + EXPECT_EQ(GetWebContents()->GetURL().GetPath(), + base::StrCat({"/", sub_page})); + } + private: void EnableSignin() { auto account_info = @@ -118,21 +143,21 @@ base::CallbackListSubscription create_services_subscription_; }; -INSTANTIATE_TEST_SUITE_P(, - AutofillAiPolicyTest, - testing::Values(kAllow, - kAllowWithoutLogging, - kDisable)); +INSTANTIATE_TEST_SUITE_P( + , + AutofillAiPolicyTest, + testing::Combine(testing::Values(kAllow, kAllowWithoutLogging, kDisable), + testing::Bool())); // Tests that the chrome://settings entry for Autofill AI is always reachable // even if the policy is disabled. IN_PROC_BROWSER_TEST_P(AutofillAiPolicyTest, SettingsNotDisabledByPolicy) { - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), - GURL(base::StrCat({"chrome://settings/", chrome::kAutofillAiSubPage})))); - EXPECT_TRUE(content::WaitForLoadStop(GetWebContents())); - EXPECT_EQ(GetWebContents()->GetURL().GetPath(), - base::StrCat({"/", chrome::kAutofillAiSubPage})); + if (is_your_saved_info_settings_page_enabled()) { + VerifySettingsUrlIsReachable(chrome::kIdentityDocsSubPage); + VerifySettingsUrlIsReachable(chrome::kTravelSubPage); + } else { + VerifySettingsUrlIsReachable(chrome::kAutofillAiSubPage); + } } } // namespace
diff --git a/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc b/chrome/browser/preloading/prerender/prerender_omnibox_interactive_uitest.cc similarity index 100% rename from chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc rename to chrome/browser/preloading/prerender/prerender_omnibox_interactive_uitest.cc
diff --git a/chrome/browser/privacy_budget/privacy_budget_browsertest.cc b/chrome/browser/privacy_budget/privacy_budget_browsertest.cc index 40ef3ab..08e12aeb 100644 --- a/chrome/browser/privacy_budget/privacy_budget_browsertest.cc +++ b/chrome/browser/privacy_budget/privacy_budget_browsertest.cc
@@ -461,104 +461,6 @@ Contains(Key(navigation_source_id_hash))))))); } -IN_PROC_BROWSER_TEST_F(PrivacyBudgetBrowserTestWithTestRecorder, - CallsCanvasToBlob) { - ASSERT_TRUE(embedded_test_server()->Start()); - - content::DOMMessageQueue messages(web_contents()); - base::RunLoop run_loop; - - // Add a callback checking when the canvas metric is reported. - recorder().SetOnAddEntryCallback( - ukm::builders::Identifiability::kEntryName, - base::BindLambdaForTesting([this, &run_loop]() { - // toBlob() is called on a context-less canvas, hence -1, which is the - // value of blink::CanvasRenderingContext::CanvasRenderingAPI::kUnknown. - constexpr uint64_t input_digest = -1; - const uint64_t canvas_key = - blink::IdentifiableSurface::FromTypeAndToken( - blink::IdentifiableSurface::Type::kCanvasReadback, input_digest) - .ToUkmMetricHash(); - - for (const ukm::mojom::UkmEntry* entry : recorder().GetEntriesByName( - ukm::builders::Identifiability::kEntryName)) { - for (const auto& [key, value] : entry->metrics) { - if (key == canvas_key) { - run_loop.Quit(); - } - } - } - })); - - ASSERT_TRUE(content::NavigateToURL( - web_contents(), embedded_test_server()->GetURL( - "/privacy_budget/calls_canvas_to_blob.html"))); - - // The document calls an instrumented method and sends a message - // back to the test. Receipt of the message indicates that the script - // successfully completed. However, we must also wait for the UKM metric to be - // recorded, which happens on a TaskRunner. - std::string blob_type; - ASSERT_TRUE(messages.WaitForMessage(&blob_type)); - - // Navigating away from the test page causes the document to be unloaded. That - // will cause any buffered metrics to be flushed. - content::NavigateToURLBlockUntilNavigationsComplete(web_contents(), - GURL("about:blank"), 1); - - // Wait for the metrics to come down the pipe. - run_loop.Run(); -} - -IN_PROC_BROWSER_TEST_F(PrivacyBudgetBrowserTestWithTestRecorder, - CanvasToBlobDifferentDocument) { - ASSERT_TRUE(embedded_test_server()->Start()); - - content::DOMMessageQueue messages(web_contents()); - base::RunLoop run_loop; - - // Add a callback checking when the canvas metric is reported. - recorder().SetOnAddEntryCallback( - ukm::builders::Identifiability::kEntryName, - base::BindLambdaForTesting([this, &run_loop]() { - // Key of the entry metric to look for. - constexpr uint64_t input_digest = UINT64_C(10266206452287635496); - const uint64_t canvas_key = - blink::IdentifiableSurface::FromTypeAndToken( - blink::IdentifiableSurface::Type::kCanvasReadback, - input_digest >> blink::IdentifiableSurface::kTypeBits) - .ToUkmMetricHash(); - - for (const ukm::mojom::UkmEntry* entry : recorder().GetEntriesByName( - ukm::builders::Identifiability::kEntryName)) { - for (const auto& [key, value] : entry->metrics) { - if (key == canvas_key) { - run_loop.Quit(); - } - } - } - })); - - ASSERT_TRUE(content::NavigateToURL( - web_contents(), embedded_test_server()->GetURL( - "/privacy_budget/calls_canvas_to_blob_xdoc.html"))); - - // The document calls an instrumented method and sends a message - // back to the test. Receipt of the message indicates that the script - // successfully completed. However, we must also wait for the UKM metric to be - // recorded, which happens on a TaskRunner. - std::string message; - ASSERT_TRUE(messages.WaitForMessage(&message)); - - // Navigating away from the test page causes the document to be unloaded. That - // will cause any buffered metrics to be flushed. - content::NavigateToURLBlockUntilNavigationsComplete(web_contents(), - GURL("about:blank"), 1); - - // Wait for the metrics to come down the pipe. - run_loop.Run(); -} - namespace { // Test class that allows to enable UKM recording.
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc index 1a095bab..761972cf 100644 --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -135,7 +135,6 @@ #include "chrome/browser/page_info/about_this_site_service_factory.h" #include "chrome/browser/page_info/merchant_trust_service_factory.h" #include "chrome/browser/page_load_metrics/observers/https_engagement_metrics/https_engagement_service_factory.h" -#include "chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h" #include "chrome/browser/passage_embeddings/passage_embedder_model_observer_factory.h" #include "chrome/browser/password_manager/account_password_store_factory.h" #include "chrome/browser/password_manager/factories/field_info_manager_factory.h" @@ -1140,7 +1139,6 @@ page_content_annotations::PageContentExtractionServiceFactory::GetInstance(); page_content_annotations::PageContentScreenshotServiceFactory::GetInstance(); page_image_service::ImageServiceFactory::EnsureFactoryBuilt(); - page_load_metrics::PageLoadMetricsMemoryTrackerFactory::GetInstance(); #if !BUILDFLAG(IS_ANDROID) PageColorsControllerFactory::GetInstance(); #endif
diff --git a/chrome/browser/profiles/gaia_info_update_service_unittest.cc b/chrome/browser/profiles/gaia_info_update_service_unittest.cc index 852dc9d5..20da6405 100644 --- a/chrome/browser/profiles/gaia_info_update_service_unittest.cc +++ b/chrome/browser/profiles/gaia_info_update_service_unittest.cc
@@ -53,10 +53,10 @@ #include "ui/gfx/image/image_unittest_util.h" #if BUILDFLAG(ENABLE_GLIC) -#include "chrome/browser/background/startup_launch_manager.h" #include "chrome/browser/glic/glic_pref_names.h" #include "chrome/browser/glic/public/glic_enabling.h" #include "chrome/browser/glic/test_support/glic_test_environment.h" +#include "chrome/browser/startup/startup_launch_manager.h" #endif using signin::constants::kNoHostedDomainFound;
diff --git a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayer.java b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayer.java index 4e27063..18ed32f 100644 --- a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayer.java +++ b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayer.java
@@ -99,10 +99,7 @@ @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, - RectF visibleViewport, - ResourceManager resourceManager, - float topOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { ReadAloudMiniPlayerSceneLayerJni.get() .updateReadAloudMiniPlayerLayer( mNativePtr,
diff --git a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayerUnitTest.java b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayerUnitTest.java index f7597d2..13a96e0 100644 --- a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayerUnitTest.java +++ b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayerUnitTest.java
@@ -59,8 +59,7 @@ .getBottomControlsMinHeightOffset(); mSceneLayer.setSize((int) VIEWPORT.width(), (int) layerHeight); - mSceneLayer.getUpdatedSceneOverlayTree( - VIEWPORT, VIEWPORT, /* resourceManager= */ null, /* topOffset= */ 20f); + mSceneLayer.getUpdatedSceneOverlayTree(VIEWPORT, VIEWPORT, /* resourceManager= */ null); verify(mSceneLayerJni) .updateReadAloudMiniPlayerLayer( @@ -82,8 +81,7 @@ @Test public void testSetColor() { mSceneLayer.setColor(0xAABBCCFF); - mSceneLayer.getUpdatedSceneOverlayTree( - VIEWPORT, VIEWPORT, /* resourceManager= */ null, /* topOffset= */ 20f); + mSceneLayer.getUpdatedSceneOverlayTree(VIEWPORT, VIEWPORT, /* resourceManager= */ null); verify(mSceneLayerJni) .updateReadAloudMiniPlayerLayer(
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn index c44e637..6b377ec 100644 --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn
@@ -130,6 +130,10 @@ ] } + if (is_mac || is_win) { + public_deps += [ "updater:resources" ] + } + if (!is_android && !is_chromeos) { public_deps += [ "inline_login:resources",
diff --git a/chrome/browser/resources/commerce/product_specifications/app.ts b/chrome/browser/resources/commerce/product_specifications/app.ts index 8ab7ff67..460e1331 100644 --- a/chrome/browser/resources/commerce/product_specifications/app.ts +++ b/chrome/browser/resources/commerce/product_specifications/app.ts
@@ -10,8 +10,10 @@ import './table.js'; import './horizontal_carousel.js'; import './comparison_table_list.js'; -import 'chrome://resources/cr_elements/cr_hidden_style.css.js'; +import 'chrome://resources/cr_elements/cr_button/cr_button.js'; import 'chrome://resources/cr_elements/cr_feedback_buttons/cr_feedback_buttons.js'; +import 'chrome://resources/cr_elements/cr_hidden_style.css.js'; +import 'chrome://resources/cr_elements/cr_loading_gradient/cr_loading_gradient.js'; import 'chrome://resources/cr_elements/cr_toast/cr_toast.js'; import './shared_vars.css.js';
diff --git a/chrome/browser/resources/commerce/product_specifications/buying_options_section.ts b/chrome/browser/resources/commerce/product_specifications/buying_options_section.ts index b20da50..2f7d7fd3 100644 --- a/chrome/browser/resources/commerce/product_specifications/buying_options_section.ts +++ b/chrome/browser/resources/commerce/product_specifications/buying_options_section.ts
@@ -3,6 +3,8 @@ // found in the LICENSE file. import 'chrome://resources/cr_elements/cr_icons.css.js'; +import 'chrome://resources/cr_elements/cr_icon/cr_icon.js'; +import 'chrome://resources/cr_elements/icons.html.js'; import {OpenWindowProxyImpl} from 'chrome://resources/js/open_window_proxy.js'; import {CrLitElement} from 'chrome://resources/lit/v3_0/lit.rollup.js';
diff --git a/chrome/browser/resources/commerce/product_specifications/comparison_table_list.ts b/chrome/browser/resources/commerce/product_specifications/comparison_table_list.ts index 70de83ac..077e381 100644 --- a/chrome/browser/resources/commerce/product_specifications/comparison_table_list.ts +++ b/chrome/browser/resources/commerce/product_specifications/comparison_table_list.ts
@@ -10,6 +10,7 @@ import 'chrome://resources/cr_elements/cr_toast/cr_toast.js'; import 'chrome://resources/cr_elements/cr_button/cr_button.js'; import './images/icons.html.js'; +import './comparison_table_list_item.js'; import {ShowSetDisposition} from '//resources/cr_components/commerce/product_specifications.mojom-webui.js'; import type {ProductSpecificationsBrowserProxy} from '//resources/cr_components/commerce/product_specifications_browser_proxy.js';
diff --git a/chrome/browser/resources/commerce/product_specifications/description_section.ts b/chrome/browser/resources/commerce/product_specifications/description_section.ts index f26932a1..9894edee 100644 --- a/chrome/browser/resources/commerce/product_specifications/description_section.ts +++ b/chrome/browser/resources/commerce/product_specifications/description_section.ts
@@ -3,6 +3,7 @@ // found in the LICENSE file. import './description_citation.js'; +import './empty_section.js'; import {CrLitElement} from 'chrome://resources/lit/v3_0/lit.rollup.js'; import type {PropertyValues} from 'chrome://resources/lit/v3_0/lit.rollup.js';
diff --git a/chrome/browser/resources/commerce/product_specifications/product_selection_menu.ts b/chrome/browser/resources/commerce/product_specifications/product_selection_menu.ts index 80f1520..5f2e3d4 100644 --- a/chrome/browser/resources/commerce/product_specifications/product_selection_menu.ts +++ b/chrome/browser/resources/commerce/product_specifications/product_selection_menu.ts
@@ -5,6 +5,7 @@ import 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js'; import 'chrome://resources/cr_elements/cr_collapse/cr_collapse.js'; import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.js'; +import 'chrome://resources/cr_elements/cr_icon/cr_icon.js'; import 'chrome://resources/cr_elements/cr_lazy_render/cr_lazy_render_lit.js'; import 'chrome://resources/cr_elements/cr_url_list_item/cr_url_list_item.js'; import 'chrome://resources/cr_elements/cr_shared_style.css.js';
diff --git a/chrome/browser/resources/contextual_tasks/top_toolbar.html.ts b/chrome/browser/resources/contextual_tasks/top_toolbar.html.ts index 7d32ec18..3de8ada 100644 --- a/chrome/browser/resources/contextual_tasks/top_toolbar.html.ts +++ b/chrome/browser/resources/contextual_tasks/top_toolbar.html.ts
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import '//resources/cr_elements/cr_icon/cr_iconset.js'; - import {html} from '//resources/lit/v3_0/lit.rollup.js'; import type {TopToolbarElement} from './top_toolbar.js';
diff --git a/chrome/browser/resources/contextual_tasks/top_toolbar.ts b/chrome/browser/resources/contextual_tasks/top_toolbar.ts index 75b8a604..5692f79 100644 --- a/chrome/browser/resources/contextual_tasks/top_toolbar.ts +++ b/chrome/browser/resources/contextual_tasks/top_toolbar.ts
@@ -2,8 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import '//resources/cr_elements/cr_icon/cr_icon.js'; +import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; import '//resources/cr_elements/cr_action_menu/cr_action_menu.js'; import '//resources/cr_elements/cr_lazy_render/cr_lazy_render_lit.js'; +import '//resources/cr_elements/icons.html.js'; import type {CrActionMenuElement} from 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js'; import type {CrLazyRenderLitElement} from 'chrome://resources/cr_elements/cr_lazy_render/cr_lazy_render_lit.js';
diff --git a/chrome/browser/resources/lens/overlay/lens_overlay_app.ts b/chrome/browser/resources/lens/overlay/lens_overlay_app.ts index 360a0da..0f89e859 100644 --- a/chrome/browser/resources/lens/overlay/lens_overlay_app.ts +++ b/chrome/browser/resources/lens/overlay/lens_overlay_app.ts
@@ -8,9 +8,11 @@ import './translate_button.js'; import '/lens/shared/searchbox_ghost_loader.js'; import '/lens/shared/searchbox_shared_style.css.js'; -import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; -import '//resources/cr_elements/icons.html.js'; import '//resources/cr_components/searchbox/searchbox.js'; +import '//resources/cr_elements/cr_button/cr_button.js'; +import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; +import '//resources/cr_elements/cr_toast/cr_toast.js'; +import '//resources/cr_elements/icons.html.js'; import {HelpBubbleMixin} from '//resources/cr_components/help_bubble/help_bubble_mixin.js'; import type {SearchboxElement} from '//resources/cr_components/searchbox/searchbox.js';
diff --git a/chrome/browser/resources/lens/overlay/selection_overlay.ts b/chrome/browser/resources/lens/overlay/selection_overlay.ts index 9ac5a9c..26c96d6 100644 --- a/chrome/browser/resources/lens/overlay/selection_overlay.ts +++ b/chrome/browser/resources/lens/overlay/selection_overlay.ts
@@ -11,6 +11,7 @@ import './overlay_shimmer_canvas.js'; import '/strings.m.js'; import '//resources/cr_elements/cr_button/cr_button.js'; +import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; import '//resources/cr_elements/cr_toast/cr_toast.js'; import type {CrIconButtonElement} from '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
diff --git a/chrome/browser/resources/lens/overlay/side_panel/side_panel_app.ts b/chrome/browser/resources/lens/overlay/side_panel/side_panel_app.ts index f28401a4..a37b676 100644 --- a/chrome/browser/resources/lens/overlay/side_panel/side_panel_app.ts +++ b/chrome/browser/resources/lens/overlay/side_panel/side_panel_app.ts
@@ -8,10 +8,12 @@ import '/strings.m.js'; import '/lens/shared/searchbox_ghost_loader.js'; import '/lens/shared/searchbox_shared_style.css.js'; +import '//resources/cr_components/composebox/composebox.js'; import '//resources/cr_components/searchbox/searchbox.js'; +import '//resources/cr_elements/cr_button/cr_button.js'; +import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; import '//resources/cr_elements/cr_icons.css.js'; import '//resources/cr_elements/cr_toast/cr_toast.js'; -import '//resources/cr_components/composebox/composebox.js'; import {ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; import type {ComposeboxElement} from '//resources/cr_components/composebox/composebox.js';
diff --git a/chrome/browser/resources/omnibox_popup/aim_app.css b/chrome/browser/resources/omnibox_popup/aim_app.css index b1b4eac..bf8e91a0 100644 --- a/chrome/browser/resources/omnibox_popup/aim_app.css +++ b/chrome/browser/resources/omnibox_popup/aim_app.css
@@ -52,12 +52,16 @@ --color-composebox-upload-button-disabled: var(--color-omnibox-composebox-foreground-disabled); --cr-composebox-outline-hcm: none; --cr-composebox-submit-button-margin-inline-start: auto; - --cr-composebox-suggestion-activity-bottom: 10px; + --cr-composebox-suggestion-activity-bottom: 0; --cr-composebox-suggestion-activity-margin-top: 0; position: relative; } +cr-composebox[searchbox-layout-mode="Compact"] { + --input-bottom-spacing: 14px; +} + cr-composebox[searchbox-layout-mode="Compact"]::part(context-menu-entrypoint-icon) { --cr-icon-button-size: 28px; left: 12px;
diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.ts b/chrome/browser/resources/settings/settings_menu/settings_menu.ts index 844e9fc..636568f 100644 --- a/chrome/browser/resources/settings/settings_menu/settings_menu.ts +++ b/chrome/browser/resources/settings/settings_menu/settings_menu.ts
@@ -40,6 +40,7 @@ autofill: HTMLLinkElement, menu: CrMenuSelector, people: HTMLLinkElement, + yourSavedInfo: HTMLLinkElement, }; }
diff --git a/chrome/browser/resources/side_panel/bookmarks/commerce/shopping_list.ts b/chrome/browser/resources/side_panel/bookmarks/commerce/shopping_list.ts index c2d3141..ab746f67 100644 --- a/chrome/browser/resources/side_panel/bookmarks/commerce/shopping_list.ts +++ b/chrome/browser/resources/side_panel/bookmarks/commerce/shopping_list.ts
@@ -2,11 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js'; -import 'chrome://resources/cr_elements/cr_shared_vars.css.js'; -import 'chrome://resources/cr_elements/mwb_element_shared_style.css.js'; import 'chrome://resources/cr_elements/cr_auto_img/cr_auto_img.js'; +import 'chrome://resources/cr_elements/cr_button/cr_button.js'; +import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js'; +import 'chrome://resources/cr_elements/cr_icon/cr_icon.js'; +import 'chrome://resources/cr_elements/cr_shared_vars.css.js'; import 'chrome://resources/cr_elements/cr_toast/cr_toast.js'; +import 'chrome://resources/cr_elements/mwb_element_shared_style.css.js'; import './icons.html.js'; import type {PriceTrackingBrowserProxy} from '//resources/cr_components/commerce/price_tracking_browser_proxy.js';
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmark_row.ts b/chrome/browser/resources/side_panel/bookmarks/power_bookmark_row.ts index 56a3c7b0..10dd369b 100644 --- a/chrome/browser/resources/side_panel/bookmarks/power_bookmark_row.ts +++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmark_row.ts
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import '//bookmarks-side-panel.top-chrome/shared/sp_list_item_badge.js'; import 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js'; import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js'; import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.js';
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts index 03c244c..b2b1b99c 100644 --- a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts +++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts
@@ -3,7 +3,10 @@ // found in the LICENSE file. import '/strings.m.js'; +import '//bookmarks-side-panel.top-chrome/shared/sp_heading.js'; +import 'chrome://resources/cr_elements/cr_button/cr_button.js'; import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js'; +import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js'; import 'chrome://resources/cr_elements/cr_input/cr_input.js'; import 'chrome://resources/cr_elements/cr_shared_style.css.js'; import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts index e85533469..40bc59b1 100644 --- a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts +++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts
@@ -19,6 +19,7 @@ import '//resources/cr_elements/cr_action_menu/cr_action_menu.js'; import '//resources/cr_elements/cr_button/cr_button.js'; import '//resources/cr_elements/cr_dialog/cr_dialog.js'; +import '//resources/cr_elements/cr_icon/cr_icon.js'; import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; import '//resources/cr_elements/cr_lazy_render/cr_lazy_render.js'; import '//resources/cr_elements/cr_toast/cr_toast.js';
diff --git a/chrome/browser/resources/side_panel/customize_chrome/app.ts b/chrome/browser/resources/side_panel/customize_chrome/app.ts index d0d4289..e0dba83 100644 --- a/chrome/browser/resources/side_panel/customize_chrome/app.ts +++ b/chrome/browser/resources/side_panel/customize_chrome/app.ts
@@ -4,6 +4,7 @@ import 'chrome://customize-chrome-side-panel.top-chrome/shared/sp_heading.js'; import 'chrome://resources/cr_components/help_bubble/new_badge.js'; +import 'chrome://resources/cr_elements/cr_button/cr_button.js'; import 'chrome://resources/cr_elements/cr_chip/cr_chip.js'; import 'chrome://resources/cr_elements/cr_icon/cr_icon.js'; import 'chrome://resources/cr_elements/cr_page_selector/cr_page_selector.js';
diff --git a/chrome/browser/resources/side_panel/customize_chrome/customize_toolbar/toolbar.ts b/chrome/browser/resources/side_panel/customize_chrome/customize_toolbar/toolbar.ts index f586c5d..175fd92 100644 --- a/chrome/browser/resources/side_panel/customize_chrome/customize_toolbar/toolbar.ts +++ b/chrome/browser/resources/side_panel/customize_chrome/customize_toolbar/toolbar.ts
@@ -3,6 +3,7 @@ // found in the LICENSE file. import 'chrome://customize-chrome-side-panel.top-chrome/shared/sp_heading.js'; +import 'chrome://resources/cr_elements/cr_button/cr_button.js'; import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js'; import type {SpHeadingElement} from 'chrome://customize-chrome-side-panel.top-chrome/shared/sp_heading.js';
diff --git a/chrome/browser/resources/side_panel/read_anything/menus/simple_action_menu.ts b/chrome/browser/resources/side_panel/read_anything/menus/simple_action_menu.ts index b511f24..7ef721ea 100644 --- a/chrome/browser/resources/side_panel/read_anything/menus/simple_action_menu.ts +++ b/chrome/browser/resources/side_panel/read_anything/menus/simple_action_menu.ts
@@ -3,6 +3,7 @@ // found in the LICENSE file. import '//resources/cr_elements/cr_action_menu/cr_action_menu.js'; +import '//resources/cr_elements/cr_icon/cr_icon.js'; import '//resources/cr_elements/cr_lazy_render/cr_lazy_render_lit.js'; import type {CrActionMenuElement} from '//resources/cr_elements/cr_action_menu/cr_action_menu.js';
diff --git a/chrome/browser/resources/side_panel/read_anything/read_aloud/read_aloud_types.ts b/chrome/browser/resources/side_panel/read_anything/read_aloud/read_aloud_types.ts index d5b990c..b42d6297 100644 --- a/chrome/browser/resources/side_panel/read_anything/read_aloud/read_aloud_types.ts +++ b/chrome/browser/resources/side_panel/read_anything/read_aloud/read_aloud_types.ts
@@ -96,6 +96,7 @@ // Represents a node used by read aloud that's based entirely on the DOM. export class DomReadAloudNode extends ReadAloudNode { nearestBlockAncestor: Node|undefined = undefined; + private isSuperscript_?: boolean; protected constructor(protected node: Node) { super(); @@ -126,6 +127,28 @@ this.nearestBlockAncestor = this.getNearestBlockAncestor_(); } + // Returns true if the DOM node associated with this ReadAloudNode is + // part of a superscript (i.e., inside a <sup> tag). + isSuperscript(): boolean { + // Don't recalculate whether this node is a superscript if we've already + // checked. + if (this.isSuperscript_ !== undefined) { + return this.isSuperscript_; + } + + const domNode = this.node; + if (!domNode) { + this.isSuperscript_ = false; // Cache the result + return false; + } + const element = domNode.nodeType === Node.ELEMENT_NODE ? + domNode as Element : + domNode.parentElement; + + this.isSuperscript_ = !!element?.closest('sup'); + return this.isSuperscript_; + } + // The nearest ancestor to the DOM node associated with this ReadAloudNode // that is of a "block" style such that it would constitute a line break. getBlockAncestor(): Node|undefined {
diff --git a/chrome/browser/resources/side_panel/read_anything/read_aloud/ts_model_impl.ts b/chrome/browser/resources/side_panel/read_anything/read_aloud/ts_model_impl.ts index a95c756..e0fce64 100644 --- a/chrome/browser/resources/side_panel/read_anything/read_aloud/ts_model_impl.ts +++ b/chrome/browser/resources/side_panel/read_anything/read_aloud/ts_model_impl.ts
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import {assert} from '//resources/js/assert.js'; + import type {ReadAloudModelBrowserProxy} from './read_aloud_model_browser_proxy.js'; import type {OffsetByNode, Segment, SegmentedSentence, Sentence} from './read_aloud_types.js'; import {DomReadAloudNode, ReadAloudNode} from './read_aloud_types.js'; @@ -102,7 +104,8 @@ // Now map the list of sentences to an array of an array of text segments. // Each list of segments represents a sentence that should be spoken. - this.sentences_ = this.mapSentencesToSegments_(sentences, nodeOffsets); + this.sentences_ = + this.processSentencesAndMapSegments_(sentences, nodeOffsets, fullText); this.initialized_ = true; if (this.sentences_.length > 0) { @@ -110,11 +113,6 @@ } } - resetModel() { - this.resetState_(); - } - - onNodeWillBeDeleted(deletedNode: Node) { if (!this.isInitialized()) { return; @@ -176,7 +174,10 @@ if (!textNode) { continue; } - nodeOffsets.push({node: textNode, startOffset: fullText.length}); + nodeOffsets.push({ + node: textNode, + startOffset: fullText.length, + }); fullText += textNode.getText(); // If there's a node after this one, check to see if there should be @@ -205,27 +206,173 @@ return false; } - // Maps sentence boundaries from the concatenated text back to their + // Process sentences with semantic node information to better segment the + // text. Then map sentence boundaries from the concatenated text back to their // original DOM nodes. // Returns a list of sentences, where each sentence is a list of segments. - private mapSentencesToSegments_( - sentences: Sentence[], nodeOffsets: OffsetByNode[]): SegmentedSentence[] { + private processSentencesAndMapSegments_( + sentences: Sentence[], nodeOffsets: OffsetByNode[], + fullText: string): SegmentedSentence[] { const sentenceSegments: SegmentedSentence[] = []; let nodeIndex = 0; + + // Buffer for the previous sentence being built, potentially including + // superscripts from the next sentence. + let previousSentence: Sentence|null = null; + for (const sentence of sentences) { - const {segments, nextNodeIndex} = - this.createSegmentsForSentence_(sentence, nodeOffsets, nodeIndex); - nodeIndex = nextNodeIndex; + let currentSentence: Sentence|null = sentence; + + // Merge any superscripts that should be merged with the previous + // sentence. + if (previousSentence) { + currentSentence = this.maybeMergeSuperscripts_( + currentSentence, nodeOffsets, fullText, previousSentence); + } + + // Add the completed sentence to the segments array + if (previousSentence) { + // Create segments for the completed sentence in the buffer + const {segments, nextNodeIndex} = this.createSegmentsForSentence_( + previousSentence, nodeOffsets, nodeIndex); + + if (segments.length > 0) { + sentenceSegments.push({ + sentenceInfo: previousSentence, + segments: segments, + }); + } + nodeIndex = nextNodeIndex; + } + + // Set the buffer to the current (potentially remaining) sentence + if (currentSentence) { + previousSentence = currentSentence; + } + } + + if (previousSentence) { + const {segments} = this.createSegmentsForSentence_( + previousSentence, nodeOffsets, nodeIndex); + if (segments.length > 0) { sentenceSegments.push({ - sentenceInfo: sentence, + sentenceInfo: previousSentence, segments: segments, }); } } + return sentenceSegments; } + // Intl.Segmenter tends to group superscripts, particularly citations, with + // the succeeding sentence instead of the sentence. e.g. + // This is a fact.^[1] And this is another fact. + // is segmented as "This is a fact." and "[1] And this is another fact." + // Instead, during postprocessing with the semantic node information, regroup + // the superscripts with the preceding sentence. + // currentSentence represents the current sentence that contains superscripts + // and previousSentence represents the sentence that any superscripts in + // currentSentence should be merged back into. + // Returns null if the entire currentSentence was a superscript and merged + // into previousSentence. If not, returns the remaining part of + // currentSentence that wasn't merged. + private moveSuperscriptsToPrecedingSentence_( + nodes: OffsetByNode[], fullText: string, currentSentence: Sentence|null, + previousSentence: Sentence): Sentence|null { + assert(nodes.length > 0, 'attempting to merge superscript with no nodes'); + const superscriptNode = nodes[0]!; + const superscriptText = superscriptNode.node.getText().trim(); + + const superscriptStartIndex: number = + currentSentence!.text.indexOf(superscriptText); + if (superscriptStartIndex === -1 || + currentSentence!.text.substring(0, superscriptStartIndex).trim() !== + '') { + // This isn't a sentence that starts with a superscript, or there's + // text before the superscript. + return currentSentence; + } + + // The sentence starts with a superscript. Merge it with the previous + // sentence. + const superscriptEndIndex = superscriptStartIndex + superscriptText.length; + + // Update sentence buffer to contain the superscript. + const endOfSuperscriptInSentenceIndex = + currentSentence!.index + superscriptEndIndex; + previousSentence.text = fullText.substring( + previousSentence.index, endOfSuperscriptInSentenceIndex); + + const remainder = currentSentence!.text.substring(superscriptEndIndex); + + if (remainder.trim().length > 0) { + return { + text: remainder, + index: currentSentence!.index + superscriptEndIndex, + }; + } + + return null; + } + + // Returns the list of DomReadAloudNodes associated with the provided. + private findNodesForSentence_( + sentence: Sentence, nodeOffsets: OffsetByNode[]): OffsetByNode[] { + const sentenceStart = sentence.index; + const sentenceEnd = sentence.index + sentence.text.length; + const nodes: OffsetByNode[] = []; + for (const offsetByNode of nodeOffsets) { + const nodeLength = offsetByNode.node.getText().length; + const nodeEndOffset = offsetByNode.startOffset + nodeLength; + if (offsetByNode.startOffset >= sentenceEnd) { + break; + } + if (nodeEndOffset <= sentenceStart) { + continue; + } + nodes.push(offsetByNode); + } + return nodes; + } + + resetModel() { + this.resetState_(); + } + + + // Helper method to handle superscript merging + private maybeMergeSuperscripts_( + currentSentence: Sentence, nodeOffsets: OffsetByNode[], fullText: string, + previousSentence: Sentence): Sentence|null { + let finalSentence: Sentence|null = currentSentence; + + while (finalSentence) { + const nodes = this.findNodesForSentence_(finalSentence, nodeOffsets); + // If there are no nodes in the current sentence or the first node + // is not a superscript, no need to continue with postprocessing. + if (nodes.length === 0 || !nodes[0]!.node.isSuperscript()) { + break; + } + + const nextSentence = this.moveSuperscriptsToPrecedingSentence_( + nodes, fullText, finalSentence, previousSentence); + + // If the sentence returned is the same as the current working sentence, + // the superscripts were unable to be grouped. + if (nextSentence === finalSentence) { + break; + } + + // A merge occurred. The next sentence is either the remainder or null. + finalSentence = nextSentence; + } + + // Returns the unmerged part of the sentence or null + return finalSentence; + } + // Creates a list of segments for a given sentence. private createSegmentsForSentence_( sentence: Sentence,
diff --git a/chrome/browser/resources/support_tool/data_collectors.html b/chrome/browser/resources/support_tool/data_collectors.html index 1ce6fa1..fc336cc 100644 --- a/chrome/browser/resources/support_tool/data_collectors.html +++ b/chrome/browser/resources/support_tool/data_collectors.html
@@ -24,5 +24,5 @@ </div> <template is="dom-if" if="[[enableScreenshot_]]" restamp> - <screenshot-element id="screenshot"></screenshot-element> + <support-tool-screenshot id="screenshot"></support-tool-screenshot> </template>
diff --git a/chrome/browser/resources/support_tool/screenshot.ts b/chrome/browser/resources/support_tool/screenshot.ts index 506c2fb..e403efd 100644 --- a/chrome/browser/resources/support_tool/screenshot.ts +++ b/chrome/browser/resources/support_tool/screenshot.ts
@@ -20,7 +20,7 @@ export class ScreenshotElement extends ScreenshotElementBase { static get is() { - return 'screenshot-element'; + return 'support-tool-screenshot'; } static get template() { @@ -233,7 +233,7 @@ declare global { interface HTMLElementTagNameMap { - 'screenshot-element': ScreenshotElement; + 'support-tool-screenshot': ScreenshotElement; } }
diff --git a/chrome/browser/resources/updater/BUILD.gn b/chrome/browser/resources/updater/BUILD.gn new file mode 100644 index 0000000..afbb6a94 --- /dev/null +++ b/chrome/browser/resources/updater/BUILD.gn
@@ -0,0 +1,26 @@ +# 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. + +import("//ui/webui/resources/tools/build_webui.gni") + +assert(is_mac || is_win) + +build_webui("build") { + grd_prefix = "updater" + + static_files = [ "updater.html" ] + + ts_files = [ + "app.html.ts", + "app.ts", + ] + css_files = [ "app.css" ] + + webui_context_type = "trusted" + + ts_deps = [ + "//third_party/lit/v3_0:build_ts", + "//ui/webui/resources/cr_elements:build_ts", + ] +}
diff --git a/chrome/browser/resources/updater/DIR_METADATA b/chrome/browser/resources/updater/DIR_METADATA new file mode 100644 index 0000000..086971c --- /dev/null +++ b/chrome/browser/resources/updater/DIR_METADATA
@@ -0,0 +1 @@ +mixins: "//chrome/updater/COMMON_METADATA" \ No newline at end of file
diff --git a/chrome/browser/resources/updater/OWNERS b/chrome/browser/resources/updater/OWNERS new file mode 100644 index 0000000..0133be3e --- /dev/null +++ b/chrome/browser/resources/updater/OWNERS
@@ -0,0 +1 @@ +file://chrome/updater/OWNERS \ No newline at end of file
diff --git a/chrome/browser/resources/updater/app.css b/chrome/browser/resources/updater/app.css new file mode 100644 index 0000000..0331f7d --- /dev/null +++ b/chrome/browser/resources/updater/app.css
@@ -0,0 +1,13 @@ +/* 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. */ + +/* #css_wrapper_metadata_start + * #type=style-lit + * #import=//resources/cr_elements/cr_shared_vars.css.js + * #scheme=relative + * #css_wrapper_metadata_end */ + +html { + background-color: white; +}
diff --git a/chrome/browser/resources/updater/app.html.ts b/chrome/browser/resources/updater/app.html.ts new file mode 100644 index 0000000..fb40064 --- /dev/null +++ b/chrome/browser/resources/updater/app.html.ts
@@ -0,0 +1,11 @@ +// 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. + +import {html} from '//resources/lit/v3_0/lit.rollup.js'; + +import type {UpdaterAppElement} from './app.js'; + +export function getHtml(this: UpdaterAppElement) { + return html``; +}
diff --git a/chrome/browser/resources/updater/app.ts b/chrome/browser/resources/updater/app.ts new file mode 100644 index 0000000..f5a08774 --- /dev/null +++ b/chrome/browser/resources/updater/app.ts
@@ -0,0 +1,30 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import {CrLitElement} from '//resources/lit/v3_0/lit.rollup.js'; + +import {getCss} from './app.css.js'; +import {getHtml} from './app.html.js'; + +export class UpdaterAppElement extends CrLitElement { + static get is() { + return 'updater-app'; + } + + static override get styles() { + return getCss(); + } + + override render() { + return getHtml.bind(this)(); + } +} + +declare global { + interface HTMLElementTagNameMap { + 'updater-app': UpdaterAppElement; + } +} + +customElements.define(UpdaterAppElement.is, UpdaterAppElement);
diff --git a/chrome/browser/resources/updater/updater.html b/chrome/browser/resources/updater/updater.html new file mode 100644 index 0000000..882fa071 --- /dev/null +++ b/chrome/browser/resources/updater/updater.html
@@ -0,0 +1,11 @@ +<!DOCTYPE HTML> +<html> + <head> + <title>Updater</title> + <meta charset="utf-8"> + </head> + <body> + <updater-app></updater-app> + <script type="module" src="app.js"></script> + </body> +</html> \ No newline at end of file
diff --git a/chrome/browser/resources/webui_browser/app.html.ts b/chrome/browser/resources/webui_browser/app.html.ts index b43c020..27743b6 100644 --- a/chrome/browser/resources/webui_browser/app.html.ts +++ b/chrome/browser/resources/webui_browser/app.html.ts
@@ -13,12 +13,12 @@ <div id="topContainer"> <div class="titlebarDiv" @mousedown="${this.onTabDragMouseDown_}"> <div class="tabstripDiv" style="margin-left:${this.tabStripInset_}px"> - <webui-browser-tabstrip id="tabstrip" + <webui-browser-tab-strip id="tabstrip" @tab-click="${this.onTabClick_}" @tab-drag-out-of-bounds="${this.onTabDragOutOfBounds_}" @tab-close="${this.onTabClosed_}" @tab-add="${this.onAddTabClick_}"> - </webui-browser-tabstrip> + </webui-browser-tab-strip> </div> <if expr="not is_macosx"> <div class="captionButtonsDiv">
diff --git a/chrome/browser/resources/webui_browser/app.ts b/chrome/browser/resources/webui_browser/app.ts index 00c9028..afbd51f 100644 --- a/chrome/browser/resources/webui_browser/app.ts +++ b/chrome/browser/resources/webui_browser/app.ts
@@ -11,6 +11,9 @@ import './tab_strip.js'; import './webview.js'; import 'chrome://resources/cr_components/searchbox/searchbox.js'; +import 'chrome://resources/cr_elements/cr_button/cr_button.js'; +import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js'; +import 'chrome://resources/cr_elements/cr_icon/cr_icon.js'; import {ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; import {assert} from '//resources/js/assert.js';
diff --git a/chrome/browser/resources/webui_browser/bookmark_element.ts b/chrome/browser/resources/webui_browser/bookmark_element.ts index 6ca51aa..bedc9a91 100644 --- a/chrome/browser/resources/webui_browser/bookmark_element.ts +++ b/chrome/browser/resources/webui_browser/bookmark_element.ts
@@ -3,6 +3,7 @@ // found in the LICENSE file. import './icons.html.js'; +import '//resources/cr_elements/cr_icon/cr_icon.js'; import {getFaviconForPageURL} from '//resources/js/icon.js'; import {CrLitElement, type PropertyValues} from '//resources/lit/v3_0/lit.rollup.js';
diff --git a/chrome/browser/resources/webui_browser/extension_element.ts b/chrome/browser/resources/webui_browser/extension_element.ts index 70f7c9a1..17180909 100644 --- a/chrome/browser/resources/webui_browser/extension_element.ts +++ b/chrome/browser/resources/webui_browser/extension_element.ts
@@ -3,6 +3,7 @@ // found in the LICENSE file. import './icons.html.js'; +import '//resources/cr_elements/cr_button/cr_button.js'; import {CrLitElement, type PropertyValues} from '//resources/lit/v3_0/lit.rollup.js'; import {MenuSourceType} from '//resources/mojo/ui/base/mojom/menu_source_type.mojom-webui.js';
diff --git a/chrome/browser/resources/webui_browser/side_panel.ts b/chrome/browser/resources/webui_browser/side_panel.ts index 05be51c..fefe247 100644 --- a/chrome/browser/resources/webui_browser/side_panel.ts +++ b/chrome/browser/resources/webui_browser/side_panel.ts
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; + import {CrLitElement} from '//resources/lit/v3_0/lit.rollup.js'; import {BrowserProxy} from './browser_proxy.js';
diff --git a/chrome/browser/resources/webui_browser/tab_element.ts b/chrome/browser/resources/webui_browser/tab_element.ts index 9197fdb7..01859264 100644 --- a/chrome/browser/resources/webui_browser/tab_element.ts +++ b/chrome/browser/resources/webui_browser/tab_element.ts
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; + import type {PropertyValues} from '//resources/lit/v3_0/lit.rollup.js'; import {CrLitElement} from '//resources/lit/v3_0/lit.rollup.js'; import type {Tab as TabData} from '/tab_strip_api/tab_strip_api_data_model.mojom-webui.js'; @@ -89,7 +91,7 @@ declare global { interface HTMLElementTagNameMap { - 'webui-browser-tabstrip': TabStrip; + 'webui-browser-tab-strip': TabStrip; 'webui-browser-tab': TabElement; } }
diff --git a/chrome/browser/resources/webui_browser/tab_strip.ts b/chrome/browser/resources/webui_browser/tab_strip.ts index 3d4e341..94efd80 100644 --- a/chrome/browser/resources/webui_browser/tab_strip.ts +++ b/chrome/browser/resources/webui_browser/tab_strip.ts
@@ -24,7 +24,7 @@ export class TabStrip extends CrLitElement { static get is() { - return 'webui-browser-tabstrip'; + return 'webui-browser-tab-strip'; } static override get styles() {
diff --git a/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc b/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc index 0614b76..384baf1 100644 --- a/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc +++ b/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/barrier_callback.h" +#include "base/barrier_closure.h" #include "base/compiler_specific.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" @@ -1335,8 +1336,12 @@ ClientSideDetectionHostCreditCardFormTest() { scoped_feature_list_.InitAndEnableFeatureWithParameters( kClientSideDetectionCreditCardForm, - {{kCsdCreditCardFormHCAcceptanceRate.name, "0.0"}, - {kCsdCreditCardFormSampleRate.name, "1.0"}}); + { + {kCsdCreditCardFormPingOnDetection.name, "true"}, + {kCsdCreditCardFormPingOnInteraction.name, "true"}, + {kCsdCreditCardFormHCAcceptanceRate.name, "0.0"}, + {kCsdCreditCardFormSampleRate.name, "1.0"}, + }); } ClientSideDetectionHostCreditCardFormTest( @@ -1412,26 +1417,23 @@ histogram_tester.ExpectTotalCount( "SBClientPhishing.PreClassificationCheckResult.CreditCardForm", 0); - // Navigation will trigger preclassification on credit card form detection. + // Navigation trigger preclassification on credit card form detection. + // Form focus will trigger preclassification on credit card form interaction. base::RunLoop run_loop; + base::RepeatingClosure barrier = + base::BarrierClosure(2, run_loop.QuitClosure()); csd_host->set_preclassification_done_callback_for_testing( base::BindLambdaForTesting([&](ClientSideDetectionType detection_type) { if (detection_type == ClientSideDetectionType::CREDIT_CARD_FORM) { - run_loop.Quit(); + barrier.Run(); } })); NavigateToCreditCardForm(); + FocusOnCreditCardNumberField(); run_loop.Run(); histogram_tester.ExpectTotalCount( - "SBClientPhishing.PreClassificationCheckResult.CreditCardForm", 1); - - // Interaction with the form will trigger preclassification that exits early - // because of URL deduplication. - FocusOnCreditCardNumberField(); - - histogram_tester.ExpectTotalCount( - "SBClientPhishing.PreClassificationCheckResult.CreditCardForm", 1); + "SBClientPhishing.PreClassificationCheckResult.CreditCardForm", 2); } IN_PROC_BROWSER_TEST_F(ClientSideDetectionHostCreditCardFormTest, @@ -1473,7 +1475,6 @@ csd_host->set_preclassification_started_callback_for_testing( base::BarrierCallback<ClientSideDetectionType>(2, future.GetCallback())); GURL url = NavigateToCreditCardForm(); - FocusOnCreditCardNumberField(); EXPECT_THAT(future.Take(), testing::Contains(ClientSideDetectionType::CREDIT_CARD_FORM));
diff --git a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc index c8f1468..734c624d 100644 --- a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc +++ b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
@@ -2241,8 +2241,9 @@ auto form_data = autofill::test::CreateTestEmailOrLoyaltyCardFormData(); autofill_manager()->OnFormsSeen({form_data}, {}); - // Preclassification should not have been triggered by OnFormsSeen. EXPECT_FALSE(future.IsReady()); + + // The event was not even logged (before pre-classification). histogram_tester_.ExpectTotalCount( "SBClientPhishing.CreditCardFormEvent.OnFieldTypesDetermined", 0); } @@ -2271,8 +2272,9 @@ autofill_manager()->OnFocusOnFormField( form_data, form_data.fields().begin()->global_id()); - // Preclassification should not have been triggered by OnFocusOnFormField. EXPECT_FALSE(future.IsReady()); + + // The event was not even logged (before pre-classification). histogram_tester_.ExpectTotalCount( "SBClientPhishing.CreditCardFormEvent.OnBeforeFocusOnFormField", 0); } @@ -2301,8 +2303,9 @@ /*is_https=*/true, /*use_month_type=*/true); autofill_manager()->OnFormsSeen({form_data}, {}); - // Preclassification should not have been triggered by OnFormsSeen. EXPECT_FALSE(future.IsReady()); + + // The event was not even logged (before pre-classification). histogram_tester_.ExpectTotalCount( "SBClientPhishing.CreditCardFormEvent.OnFieldTypesDetermined", 0); } @@ -2333,8 +2336,9 @@ autofill_manager()->OnFocusOnFormField( form_data, form_data.fields().begin()->global_id()); - // Preclassification should not have been triggered by OnFormsSeen. EXPECT_FALSE(future.IsReady()); + + // The event was not even logged (before pre-classification). histogram_tester_.ExpectTotalCount( "SBClientPhishing.CreditCardFormEvent.OnBeforeFocusOnFormField", 0); } @@ -2345,9 +2349,11 @@ GTEST_SKIP(); } - // Feature enabled, 100% HC allowlist acceptance, 0% sample rate - // (default params): - feature_list_.InitAndEnableFeature(kClientSideDetectionCreditCardForm); + // Feature enabled, detection pings enabled, 100% HC allowlist acceptance: + feature_list_.InitAndEnableFeatureWithParameters( + kClientSideDetectionCreditCardForm, + {{kCsdCreditCardFormPingOnDetection.name, "true"}, + {kCsdCreditCardFormHCAcceptanceRate.name, "1.0"}}); SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true); GURL url("http://host.com/"); @@ -2396,9 +2402,11 @@ GTEST_SKIP(); } - // Feature enabled, 100% HC allowlist acceptance, 0% sample rate - // (default params): - feature_list_.InitAndEnableFeature(kClientSideDetectionCreditCardForm); + // Feature enabled, interaction pings enabled, 100% HC allowlist acceptance: + feature_list_.InitAndEnableFeatureWithParameters( + kClientSideDetectionCreditCardForm, + {{kCsdCreditCardFormPingOnInteraction.name, "true"}, + {kCsdCreditCardFormHCAcceptanceRate.name, "1.0"}}); SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true); GURL url("http://host.com/"); @@ -2447,10 +2455,12 @@ GTEST_SKIP(); } - // Feature enabled, 0% HC allowlist acceptance, 0% sample rate: + // Feature enabled, detection pings enabled, 100% HC allowlist acceptance, + // 0% sample rate: feature_list_.InitAndEnableFeatureWithParameters( kClientSideDetectionCreditCardForm, - {{kCsdCreditCardFormHCAcceptanceRate.name, "0.0"}, + {{kCsdCreditCardFormPingOnDetection.name, "true"}, + {kCsdCreditCardFormHCAcceptanceRate.name, "0.0"}, {kCsdCreditCardFormSampleRate.name, "0.0"}}); SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true); @@ -2500,10 +2510,12 @@ GTEST_SKIP(); } - // Feature enabled, 0% HC allowlist acceptance, 0% sample rate: + // Feature enabled, interaction pings enabled, 100% HC allowlist acceptance, + // 0% sample rate: feature_list_.InitAndEnableFeatureWithParameters( kClientSideDetectionCreditCardForm, - {{kCsdCreditCardFormHCAcceptanceRate.name, "0.0"}, + {{kCsdCreditCardFormPingOnInteraction.name, "true"}, + {kCsdCreditCardFormHCAcceptanceRate.name, "0.0"}, {kCsdCreditCardFormSampleRate.name, "0.0"}}); SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true); @@ -2555,10 +2567,12 @@ GTEST_SKIP(); } - // Feature enabled, 100% sample rate, max site engagement = 1 (new visit) + // Feature enabled, detection pings enabled, 100% sample rate, + // max site engagement = 1 (new visit): feature_list_.InitAndEnableFeatureWithParameters( kClientSideDetectionCreditCardForm, { + {kCsdCreditCardFormPingOnDetection.name, "true"}, {kCsdCreditCardFormSampleRate.name, "1.0"}, {kCsdCreditCardFormMaxUserVisit.name, "1"}, }); @@ -2603,10 +2617,12 @@ GTEST_SKIP(); } - // Feature enabled, 100% sample rate, max site engagement = 2 visits + // Feature enabled, interaction pings enabled, 100% sample rate, + // max site engagement = 1 (new visit): feature_list_.InitAndEnableFeatureWithParameters( kClientSideDetectionCreditCardForm, { + {kCsdCreditCardFormPingOnInteraction.name, "true"}, {kCsdCreditCardFormSampleRate.name, "1.0"}, {kCsdCreditCardFormMaxUserVisit.name, "1"}, }); @@ -2653,10 +2669,12 @@ GTEST_SKIP(); } - // Feature enabled, 100% sample rate, max site engagement = 2 visits + // Feature enabled, detection pings enabled, 100% sample rate, + // max site engagement = 2 visits feature_list_.InitAndEnableFeatureWithParameters( kClientSideDetectionCreditCardForm, { + {kCsdCreditCardFormPingOnDetection.name, "true"}, {kCsdCreditCardFormSampleRate.name, "1.0"}, {kCsdCreditCardFormMaxUserVisit.name, "2"}, }); @@ -2705,12 +2723,15 @@ GTEST_SKIP(); } - // Feature enabled, 100% sample rate, max site engagement = 2 visits + // Feature enabled, interaction pings enabled, 100% sample rate, + // max site engagement = 2 visits feature_list_.InitAndEnableFeatureWithParameters( kClientSideDetectionCreditCardForm, { + {kCsdCreditCardFormPingOnDetection.name, "true"}, + {kCsdCreditCardFormPingOnInteraction.name, "true"}, {kCsdCreditCardFormSampleRate.name, "1.0"}, - {kCsdCreditCardFormMaxUserVisit.name, "1"}, + {kCsdCreditCardFormMaxUserVisit.name, "2"}, }); SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true); @@ -2734,32 +2755,32 @@ histogram_tester_.ExpectTotalCount( "SBClientPhishing.HistoryServiceDuration.GetVisibleVisitCountToHost", 0); - ExpectPreClassificationChecks(url, &kFalse, &kFalse, nullptr, nullptr, - nullptr); auto form_data = autofill::test::CreateTestCreditCardFormData( /*is_https=*/true, /*use_month_type=*/true); + ExpectPreClassificationChecks(url, &kFalse, &kFalse, nullptr, nullptr, + nullptr); autofill_manager()->OnFormsSeen({form_data}, {}); WaitUntilHighConfidenceAllowlistCheckDone(); WaitAndCheckPreClassificationChecks(); - TestFuture<ClientSideDetectionType> future; - csd_host_->set_preclassification_started_callback_for_testing( - future.GetRepeatingCallback()); + ExpectPreClassificationChecks(url, &kFalse, &kFalse, nullptr, nullptr, + nullptr); autofill_manager()->OnFocusOnFormField( form_data, form_data.fields().begin()->global_id()); - EXPECT_FALSE(future.IsReady()); + WaitUntilHighConfidenceAllowlistCheckDone(); + WaitAndCheckPreClassificationChecks(); // Pre-classification should have proceeded to classification - // on the first event (detection). + // for both events. ExpectOnlyBucketCount( "SBClientPhishing.CreditCardFormEvent.OnFieldTypesDetermined", credit_card_form::kNewSiteVisitNoReferringAppAutofillLocalHeuristic, 1); ExpectOnlyBucketCount( "SBClientPhishing.CreditCardFormEvent.OnBeforeFocusOnFormField", - credit_card_form::kNewSiteVisitNoReferringAppAutofillServerHeuristic, 0); + credit_card_form::kNewSiteVisitNoReferringAppAutofillServerHeuristic, 1); ExpectOnlyBucketCount( "SBClientPhishing.PreClassificationCheckResult.CreditCardForm", - PreClassificationCheckResult::CLASSIFY, 1); + PreClassificationCheckResult::CLASSIFY, 2); // Note also that HistoryService was not called a second time either. histogram_tester_.ExpectTotalCount( @@ -2772,10 +2793,13 @@ GTEST_SKIP(); } - // Feature enabled, 100% sample rate: + // Feature enabled, detection pings enabled, 100% sample rate: feature_list_.InitAndEnableFeatureWithParameters( kClientSideDetectionCreditCardForm, - {{kCsdCreditCardFormSampleRate.name, "1.0"}}); + { + {kCsdCreditCardFormPingOnDetection.name, "true"}, + {kCsdCreditCardFormSampleRate.name, "1.0"}, + }); SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true); GURL url("http://host.com/"); @@ -2827,10 +2851,13 @@ GTEST_SKIP(); } - // Feature enabled, 100% sample rate: + // Feature enabled, interaction pings enabled, 100% sample rate: feature_list_.InitAndEnableFeatureWithParameters( kClientSideDetectionCreditCardForm, - {{kCsdCreditCardFormSampleRate.name, "1.0"}}); + { + {kCsdCreditCardFormPingOnInteraction.name, "true"}, + {kCsdCreditCardFormSampleRate.name, "1.0"}, + }); SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true); GURL url("http://host.com/");
diff --git a/chrome/browser/select_popup_browsertest.cc b/chrome/browser/select_popup_interactive_uitest.cc similarity index 100% rename from chrome/browser/select_popup_browsertest.cc rename to chrome/browser/select_popup_interactive_uitest.cc
diff --git a/chrome/browser/shell_integration_win.cc b/chrome/browser/shell_integration_win.cc index ad6f61f..71fb966 100644 --- a/chrome/browser/shell_integration_win.cc +++ b/chrome/browser/shell_integration_win.cc
@@ -48,6 +48,7 @@ #include "chrome/browser/shell_integration.h" #include "chrome/browser/shortcuts/platform_util_win.h" #include "chrome/browser/web_applications/web_app_helpers.h" +#include "chrome/browser/win/registry_watcher.h" #include "chrome/browser/win/settings_app_monitor.h" #include "chrome/browser/win/util_win_service.h" #include "chrome/common/chrome_constants.h" @@ -339,13 +340,13 @@ base::OnceClosure on_finished_callback) : on_finished_callback_(std::move(on_finished_callback)) { for (const wchar_t* const* scan = &schemes[0]; *scan != nullptr; ++scan) { - AddRegistryKeyWatcher(base::StrCat({L"SOFTWARE\\Microsoft\\Windows\\Shell" - L"\\Associations\\UrlAssociations\\", - *scan, L"\\UserChoice"}) - .c_str()); + AddRegistryWatcher(base::StrCat({L"SOFTWARE\\Microsoft\\Windows\\Shell" + L"\\Associations\\UrlAssociations\\", + *scan, L"\\UserChoice"}) + .c_str()); } - // Only the watchers that were succesfully initialized are counted. - registry_watcher_count_ = registry_key_watchers_.size(); + // Only the watchers that were successfully initialized are counted. + registry_watcher_count_ = registry_watchers_.size(); timer_.Start(FROM_HERE, base::Minutes(2), base::BindOnce(&OpenSystemSettingsHelper::ConcludeInteraction, @@ -386,16 +387,23 @@ // Helper function to create a registry watcher for a given |key_path|. Do // nothing on initialization failure. - void AddRegistryKeyWatcher(const wchar_t* key_path) { + void AddRegistryWatcher(const wchar_t* key_path) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto reg_key = std::make_unique<base::win::RegKey>(HKEY_CURRENT_USER, key_path, KEY_NOTIFY); - if (reg_key->Valid() && reg_key->StartWatching(base::BindOnce( - &OpenSystemSettingsHelper::OnRegistryKeyChanged, - weak_ptr_factory_.GetWeakPtr()))) { - registry_key_watchers_.push_back(std::move(reg_key)); + if (reg_key->Valid()) { + std::vector<std::wstring> key_paths = {key_path}; + auto registry_watcher = std::make_unique<RegistryWatcher>( + key_paths, + base::BindOnce(&OpenSystemSettingsHelper::OnRegistryKeyChanged, + weak_ptr_factory_.GetWeakPtr())); + + // Verify that the watcher is watching at least one registry key. + if (registry_watcher->GetRegistryKeyCount() >= 1u) { + registry_watchers_.push_back(std::move(registry_watcher)); + } } } @@ -412,7 +420,7 @@ // There can be multiple registry key watchers as some settings modify // multiple scheme associations. e.g. Changing the default browser modifies // the http and https associations. - std::vector<std::unique_ptr<base::win::RegKey>> registry_key_watchers_; + std::vector<std::unique_ptr<RegistryWatcher>> registry_watchers_; base::OneShotTimer timer_;
diff --git a/chrome/browser/signin/dice_web_signin_interceptor.cc b/chrome/browser/signin/dice_web_signin_interceptor.cc index 1e56a00..904cb9a 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor.cc
@@ -80,6 +80,7 @@ #include "components/signin/public/base/signin_metrics.h" #include "components/signin/public/base/signin_pref_names.h" #include "components/signin/public/base/signin_prefs.h" +#include "components/signin/public/base/signin_switches.h" #include "components/signin/public/identity_manager/account_capabilities.h" #include "components/signin/public/identity_manager/account_info.h" #include "components/signin/public/identity_manager/account_managed_status_finder.h" @@ -105,11 +106,20 @@ // The user will only see the Chrome Signin bubble reprompt a maximum of 4 times // (not including the initial time the bubble was declined). static constexpr int kMaxChromeSigninBubbleRepromptCountAllowed = 4; +// Same as for kMaxChromeSigninBubbleRepromptCountAllowed, with different value +// to be used in SigninPromoLimitsExperiment. +static constexpr int + kMaxChromeSigninBubbleRepromptCountAllowedForLimitsExperiment = 10; // The Chrome Signin bubble can be reprompted only if a minimum duration time // has passed since the last bubble was shown (either initial bubble or a // reprompt). static constexpr base::TimeDelta kMinimumDurationForChromeSigninBubbleReprompt = base::Days(60); +// Same as for kMinimumDurationForChromeSigninBubbleReprompt, with different +// value to be used in SigninPromoLimitsExperiment. +static constexpr base::TimeDelta + kMinimumDurationForChromeSigninBubbleRepromptForLimitsExperiment = + base::Days(7); // Helper function to return the primary account info. The returned info is // empty if there is no primary account, and non-empty otherwise. Extended @@ -188,7 +198,11 @@ // Maximum reprompt count check. int reprompt_count = signin_prefs.GetChromeSigninBubbleRepromptCount(gaia_id); - if (reprompt_count >= kMaxChromeSigninBubbleRepromptCountAllowed) { + int max_reprompt_count = + base::FeatureList::IsEnabled(switches::kSigninPromoLimitsExperiment) + ? kMaxChromeSigninBubbleRepromptCountAllowedForLimitsExperiment + : kMaxChromeSigninBubbleRepromptCountAllowed; + if (reprompt_count >= max_reprompt_count) { return false; } @@ -198,8 +212,11 @@ GetTimeSinceLastChromeSigninDecline(signin_prefs, gaia_id); // Minimum duration since last chrome signin decline check. - return time_since_last_decline >= - kMinimumDurationForChromeSigninBubbleReprompt; + const base::TimeDelta minimum_duration = + base::FeatureList::IsEnabled(switches::kSigninPromoLimitsExperiment) + ? kMinimumDurationForChromeSigninBubbleRepromptForLimitsExperiment + : kMinimumDurationForChromeSigninBubbleReprompt; + return time_since_last_decline >= minimum_duration; } // Set showing the bubble as a reprompt if the user previously declined the @@ -227,7 +244,6 @@ gaia_id, base::Time::Now()); int new_reprompt_count = signin_prefs.IncrementChromeSigninBubbleRepromptCount(gaia_id); - base::UmaHistogramExactLinear("Signin.Intercept.ChromeSignin.RepromptCount", new_reprompt_count, kMaxChromeSigninBubbleRepromptCountAllowed + 1);
diff --git a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc index 6c0610f..4fcfb10 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc
@@ -1293,6 +1293,66 @@ ChromeSigninUserChoice::kSignin); } +class DiceWebSigninInterceptorUnoBubbleLimitsExperimentBrowserTest + : public DiceWebSigninInterceptorWithExplicitSigninEnabledBrowserTest { + private: + base::test::ScopedFeatureList feature_list_{ + switches::kSigninPromoLimitsExperiment}; +}; + +IN_PROC_BROWSER_TEST_F( + DiceWebSigninInterceptorUnoBubbleLimitsExperimentBrowserTest, + ChromeSigninInterceptDeclinesRepromptThenRepromptsAfter10Days) { + // Setup account for interception. + AccountInfo info = MakeAccountInfoAvailableAndUpdate("alice@example.com", + kNoHostedDomainFound); + // Makes sure Chrome is not signed in to trigger the Chrome Signin intercept + // bubble. + ASSERT_FALSE(IsChromeSignedIn()); + + SigninPrefs signin_prefs(*GetProfile()->GetPrefs()); + ASSERT_FALSE( + signin_prefs.GetChromeSigninInterceptionLastBubbleDeclineTime(info.gaia) + .has_value()); + ASSERT_EQ(signin_prefs.GetChromeSigninBubbleRepromptCount(info.gaia), 0); + + ShowAndCompleteSigninBubbleWithResult(info, + SigninInterceptionResult::kDeclined); + EXPECT_FALSE(IsChromeSignedIn()); + // Decline time pref is set. + std::optional<base::Time> initial_decline_time = + signin_prefs.GetChromeSigninInterceptionLastBubbleDeclineTime(info.gaia); + ASSERT_TRUE(initial_decline_time.has_value()); + // Reprompt count is 0. + EXPECT_EQ(signin_prefs.GetChromeSigninBubbleRepromptCount(info.gaia), 0); + + // Immediate attempt to show the bubble should not succeed, since not enough + // time has passed. + ExpectAttemptToShowChromeSigninBubbleNotToShow(info); + + SimulateChromeSigninDeclinedAdvanceTime(info.gaia, base::Days(6)); + + // Attempt before the minimum duration for reprompt has passed, it should + // fail. + ExpectAttemptToShowChromeSigninBubbleNotToShow(info); + + SimulateChromeSigninDeclinedAdvanceTime(info.gaia, base::Days(4)); + + // Bubble should show as we are in the first period where the bubble can be + // reprompted. Decline it to proceed with the reprompts. + ASSERT_GT(time_since_last_reprompt(info.gaia), base::Days(10)); + ShowAndCompleteSigninBubbleWithResult(info, + SigninInterceptionResult::kDeclined); + // Last bubble time pref is still set. + std::optional<base::Time> updated_last_decline_time = + signin_prefs.GetChromeSigninInterceptionLastBubbleDeclineTime(info.gaia); + ASSERT_TRUE(updated_last_decline_time.has_value()); + // And different from the initial decline time. + EXPECT_LT(initial_decline_time.value(), updated_last_decline_time.value()); + // Reprompt count updated + EXPECT_EQ(signin_prefs.GetChromeSigninBubbleRepromptCount(info.gaia), 1); +} + // This test mainly checks the combination of dismissal and the effect it has on // the user choice. Simulating multiple accounts and checks that they do not // affect each other:
diff --git a/chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc b/chrome/browser/site_isolation/site_per_process_interactive_uitest.cc similarity index 100% rename from chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc rename to chrome/browser/site_isolation/site_per_process_interactive_uitest.cc
diff --git a/chrome/browser/site_isolation/site_per_process_text_input_browsertest.cc b/chrome/browser/site_isolation/site_per_process_text_input_interactive_uitest.cc similarity index 100% rename from chrome/browser/site_isolation/site_per_process_text_input_browsertest.cc rename to chrome/browser/site_isolation/site_per_process_text_input_interactive_uitest.cc
diff --git a/chrome/browser/ssl/ask_before_http_dialog_controller_uitest.cc b/chrome/browser/ssl/ask_before_http_dialog_controller_interactive_uitest.cc similarity index 100% rename from chrome/browser/ssl/ask_before_http_dialog_controller_uitest.cc rename to chrome/browser/ssl/ask_before_http_dialog_controller_interactive_uitest.cc
diff --git a/chrome/browser/ssl/typed_navigation_upgrade_throttle_browsertest.cc b/chrome/browser/ssl/typed_navigation_upgrade_throttle_interactive_uitest.cc similarity index 100% rename from chrome/browser/ssl/typed_navigation_upgrade_throttle_browsertest.cc rename to chrome/browser/ssl/typed_navigation_upgrade_throttle_interactive_uitest.cc
diff --git a/chrome/browser/startup/BUILD.gn b/chrome/browser/startup/BUILD.gn new file mode 100644 index 0000000..192147f --- /dev/null +++ b/chrome/browser/startup/BUILD.gn
@@ -0,0 +1,29 @@ +# 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. + +assert(!is_android, "Startup launch manager is only for desktop platforms") + +source_set("startup") { + public = [ "startup_launch_manager.h" ] + + sources = [ "startup_launch_manager.cc" ] + + deps = [ + "//base", + "//chrome/common:non_code_constants", + "//chrome/installer/util:with_no_strings", + ] +} + +source_set("unit_tests") { + testonly = true + sources = [ "startup_launch_manager_unittest.cc" ] + + deps = [ + ":startup", + "//base", + "//chrome/test:test_support", + "//testing/gmock", + ] +}
diff --git a/chrome/browser/startup/OWNERS b/chrome/browser/startup/OWNERS new file mode 100644 index 0000000..e612b1d --- /dev/null +++ b/chrome/browser/startup/OWNERS
@@ -0,0 +1,5 @@ +agale@chromium.org +alsan@chromium.org +atharvmaan@chromium.org +estalin@chromium.org +stluong@chromium.org
diff --git a/chrome/browser/background/startup_launch_manager.cc b/chrome/browser/startup/startup_launch_manager.cc similarity index 97% rename from chrome/browser/background/startup_launch_manager.cc rename to chrome/browser/startup/startup_launch_manager.cc index 402fc10..bf38d138 100644 --- a/chrome/browser/background/startup_launch_manager.cc +++ b/chrome/browser/startup/startup_launch_manager.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/background/startup_launch_manager.h" +#include "chrome/browser/startup/startup_launch_manager.h" #include "base/command_line.h" #include "base/functional/bind.h"
diff --git a/chrome/browser/background/startup_launch_manager.h b/chrome/browser/startup/startup_launch_manager.h similarity index 87% rename from chrome/browser/background/startup_launch_manager.h rename to chrome/browser/startup/startup_launch_manager.h index d4ef694..8ecc387 100644 --- a/chrome/browser/background/startup_launch_manager.h +++ b/chrome/browser/startup/startup_launch_manager.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_BACKGROUND_STARTUP_LAUNCH_MANAGER_H_ -#define CHROME_BROWSER_BACKGROUND_STARTUP_LAUNCH_MANAGER_H_ +#ifndef CHROME_BROWSER_STARTUP_STARTUP_LAUNCH_MANAGER_H_ +#define CHROME_BROWSER_STARTUP_STARTUP_LAUNCH_MANAGER_H_ #include <set> @@ -42,4 +42,4 @@ std::set<StartupLaunchReason> registered_launch_reasons_; }; -#endif // CHROME_BROWSER_BACKGROUND_STARTUP_LAUNCH_MANAGER_H_ +#endif // CHROME_BROWSER_STARTUP_STARTUP_LAUNCH_MANAGER_H_
diff --git a/chrome/browser/background/startup_launch_manager_unittest.cc b/chrome/browser/startup/startup_launch_manager_unittest.cc similarity index 98% rename from chrome/browser/background/startup_launch_manager_unittest.cc rename to chrome/browser/startup/startup_launch_manager_unittest.cc index 4bdb20d..66e9f49d 100644 --- a/chrome/browser/background/startup_launch_manager_unittest.cc +++ b/chrome/browser/startup/startup_launch_manager_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/background/startup_launch_manager.h" +#include "chrome/browser/startup/startup_launch_manager.h" #include <memory>
diff --git a/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc b/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc index 92c816b..80cc5fa 100644 --- a/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
@@ -2371,7 +2371,7 @@ // Setup a primary account, but don't actually enable Sync-the-feature (so // that Sync will start in transport mode). - ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount()); + ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly)); // Note: Depending on the state of feature flags (specifically // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered // selected by default. @@ -2435,7 +2435,7 @@ // Setup a primary account, but don't actually enable Sync-the-feature (so // that Sync will start in transport mode). - ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount()); + ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly)); // Note: Depending on the state of feature flags (specifically // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered // selected by default. @@ -2513,7 +2513,7 @@ // Setup a primary account, but don't actually enable Sync-the-feature (so // that Sync will start in transport mode). - ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount()); + ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly)); // Note: Depending on the state of feature flags (specifically // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered // selected by default. @@ -2582,7 +2582,7 @@ // Setup a primary account, but don't actually enable Sync-the-feature (so // that Sync will start in transport mode). - ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount()); + ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly)); // Note: Depending on the state of feature flags (specifically // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered // selected by default. @@ -2640,7 +2640,7 @@ // Setup a primary account, but don't actually enable Sync-the-feature (so // that Sync will start in transport mode). - ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount()); + ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly)); // Note: Depending on the state of feature flags (specifically // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered // selected by default. @@ -2699,7 +2699,7 @@ // Setup a primary account, but don't actually enable Sync-the-feature (so // that Sync will start in transport mode). - ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount()); + ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly)); // Note: Depending on the state of feature flags (specifically // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered // selected by default. @@ -2778,7 +2778,7 @@ ->SetBookmarksLimitForTesting(4); // Setup a primary account, but don't actually enable Sync-the-feature (so // that Sync will start in transport mode). - ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount()); + ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly)); // Note: Depending on the state of feature flags (specifically // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered // selected by default. @@ -2932,7 +2932,7 @@ // Sign in again, but don't actually enable Sync-the-feature (so that Sync // will start in transport mode). - ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount()); + ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly)); // Note: Depending on the state of feature flags (specifically // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered // selected by default.
diff --git a/chrome/browser/sync/test/integration/single_client_dictionary_sync_test.cc b/chrome/browser/sync/test/integration/single_client_dictionary_sync_test.cc index 4746c3fc..3243326 100644 --- a/chrome/browser/sync/test/integration/single_client_dictionary_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_dictionary_sync_test.cc
@@ -52,18 +52,33 @@ EXPECT_THAT(dictionary_helper::GetDictionaryWords(0), IsEmpty()); } -// History datatype is not supported in transport mode on ChromeOS yet. -#if !BUILDFLAG(IS_CHROMEOS) -IN_PROC_BROWSER_TEST_P(SingleClientDictionarySyncTest, +INSTANTIATE_TEST_SUITE_P(, SingleClientDictionarySyncTest, ::testing::Bool()); + +class SingleClientDictionaryTransportModeSyncTest + : public SingleClientDictionarySyncTest { + public: + SingleClientDictionaryTransportModeSyncTest() { + feature_list_.InitWithFeatures( + /*enabled_features=*/ + {// `kEnablePreferencesAccountStorage` and + // `kSeparateLocalAndAccountSearchEngines` + // are required for enabling dictionary sync in transport mode because + // it shares the same user toggle as preferences and search engines. + switches::kEnablePreferencesAccountStorage, + syncer::kSeparateLocalAndAccountSearchEngines}, + /*disabled_features=*/{}); + } + + private: + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_P(SingleClientDictionaryTransportModeSyncTest, ShouldStartDataTypeInTransportModeIfFeatureEnabled) { ASSERT_TRUE(SetupClients()); // Sign in the primary account. ASSERT_TRUE(GetClient(0)->SignInPrimaryAccount()); - // Enable history to enable DICTIONARY. - GetSyncService(0)->GetUserSettings()->SetSelectedType( - syncer::UserSelectableType::kHistory, true); - ASSERT_TRUE(GetClient(0)->AwaitSyncTransportActive()); // Whether or not the type is enabled in transport mode depends on the @@ -71,43 +86,10 @@ EXPECT_EQ(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY), GetParam()); } -#endif // !BUILDFLAG(IS_CHROMEOS) -INSTANTIATE_TEST_SUITE_P(, SingleClientDictionarySyncTest, ::testing::Bool()); - -class SingleClientDictionaryWithoutAccountStorageSyncTest : public SyncTest { - protected: - SingleClientDictionaryWithoutAccountStorageSyncTest() - : SyncTest(SINGLE_CLIENT) { - feature_list_.InitAndDisableFeature( - syncer::kSpellcheckSeparateLocalAndAccountDictionaries); - } - - base::test::ScopedFeatureList feature_list_; -}; - -IN_PROC_BROWSER_TEST_F(SingleClientDictionaryWithoutAccountStorageSyncTest, - ShouldNotBeBehindHistoryToggle) { - ASSERT_TRUE(SetupSync()); - - ASSERT_TRUE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY)); - - // DICTIONARY is not behind the history toggle. - ASSERT_TRUE(GetSyncService(0)->GetUserSettings()->GetSelectedTypes().Has( - syncer::UserSelectableType::kHistory)); - ASSERT_TRUE( - GetClient(0)->DisableSyncForType(syncer::UserSelectableType::kHistory)); - EXPECT_TRUE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY)); - - GetSyncService(0)->GetUserSettings()->SetSelectedType( - syncer::UserSelectableType::kHistory, true); - // DICTIONARY is behind the settings toggle. - ASSERT_TRUE(GetSyncService(0)->GetUserSettings()->GetSelectedTypes().Has( - syncer::UserSelectableType::kPreferences)); - ASSERT_TRUE(GetClient(0)->DisableSyncForType( - syncer::UserSelectableType::kPreferences)); - EXPECT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY)); -} +INSTANTIATE_TEST_SUITE_P(, + SingleClientDictionaryTransportModeSyncTest, + ::testing::Bool()); class SingleClientDictionaryWithAccountStorageSyncTest : public SyncTest { protected: @@ -119,29 +101,6 @@ }; IN_PROC_BROWSER_TEST_F(SingleClientDictionaryWithAccountStorageSyncTest, - ShouldBeBehindHistoryOptIn) { - ASSERT_TRUE(SetupSync()); - - ASSERT_TRUE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY)); - - // DICTIONARY is not behind the settings toggle. - ASSERT_TRUE(GetSyncService(0)->GetUserSettings()->GetSelectedTypes().Has( - syncer::UserSelectableType::kPreferences)); - ASSERT_TRUE(GetClient(0)->DisableSyncForType( - syncer::UserSelectableType::kPreferences)); - EXPECT_TRUE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY)); - - ASSERT_TRUE(GetClient(0)->EnableSyncForType( - syncer::UserSelectableType::kPreferences)); - // DICTIONARY is behind the history toggle. - ASSERT_TRUE(GetSyncService(0)->GetUserSettings()->GetSelectedTypes().Has( - syncer::UserSelectableType::kHistory)); - ASSERT_TRUE( - GetClient(0)->DisableSyncForType(syncer::UserSelectableType::kHistory)); - EXPECT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY)); -} - -IN_PROC_BROWSER_TEST_F(SingleClientDictionaryWithAccountStorageSyncTest, ShouldNotUploadLocalWordsToTheAccount) { ASSERT_TRUE(SetupClients()); dictionary_helper::LoadDictionaries(); @@ -187,8 +146,8 @@ UnorderedElementsAre(kLocalWord, kAccountWord)); // Disable syncing dictionary, which is behind the preferences toggle. - ASSERT_TRUE( - GetClient(0)->DisableSyncForType(syncer::UserSelectableType::kHistory)); + ASSERT_TRUE(GetClient(0)->DisableSyncForType( + syncer::UserSelectableType::kPreferences)); ASSERT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY)); // Account words should be cleared. @@ -247,9 +206,9 @@ // Clear the error to allow sync to become active again. GetFakeServer()->ClearHttpError(); - // Disable syncing dictionary, which is behind the history toggle. - ASSERT_TRUE( - GetClient(0)->DisableSyncForType(syncer::UserSelectableType::kHistory)); + // Disable syncing dictionary, which is behind the preferences toggle. + ASSERT_TRUE(GetClient(0)->DisableSyncForType( + syncer::UserSelectableType::kPreferences)); ASSERT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY)); // Account words should be cleared.
diff --git a/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc b/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc index ddb63d2..9398bab 100644 --- a/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc
@@ -38,21 +38,15 @@ using testing::ContainerEq; -syncer::DataTypeSet GetTypesGatedBehindHistoryOptIn() { - syncer::DataTypeSet types = {syncer::COLLABORATION_GROUP, - syncer::HISTORY, - syncer::HISTORY_DELETE_DIRECTIVES, - syncer::SAVED_TAB_GROUP, - syncer::SHARED_TAB_GROUP_DATA, - syncer::SHARED_TAB_GROUP_ACCOUNT_DATA, - syncer::SESSIONS, - syncer::USER_EVENTS}; - if (base::FeatureList::IsEnabled( - syncer::kSpellcheckSeparateLocalAndAccountDictionaries)) { - types.Put(syncer::DICTIONARY); - } - return types; -} +constexpr syncer::DataTypeSet kTypesGatedBehindHistoryOptIn{ + syncer::COLLABORATION_GROUP, + syncer::HISTORY, + syncer::HISTORY_DELETE_DIRECTIVES, + syncer::SAVED_TAB_GROUP, + syncer::SHARED_TAB_GROUP_DATA, + syncer::SHARED_TAB_GROUP_ACCOUNT_DATA, + syncer::SESSIONS, + syncer::USER_EVENTS}; base::FilePath GetTestFilePathForCacheGuid() { base::FilePath user_data_path; @@ -161,9 +155,8 @@ GetSyncService(0)->GetTransportState()); ASSERT_FALSE(GetSyncService(0)->IsSyncFeatureActive()); - syncer::DataTypeSet expected_types = - Difference(AllowedTypesInStandaloneTransportMode(), - GetTypesGatedBehindHistoryOptIn()); + syncer::DataTypeSet expected_types = Difference( + AllowedTypesInStandaloneTransportMode(), kTypesGatedBehindHistoryOptIn); // Bookmarks and reading list require a separate opt in, unless // `syncer::kReplaceSyncPromosWithSignInPromos` is enabled. @@ -335,9 +328,8 @@ syncer::UserSelectableType::kHistory)); // Make sure that only the allowed types got activated. - syncer::DataTypeSet expected_types = - Difference(AllowedTypesInStandaloneTransportMode(), - GetTypesGatedBehindHistoryOptIn()); + syncer::DataTypeSet expected_types = Difference( + AllowedTypesInStandaloneTransportMode(), kTypesGatedBehindHistoryOptIn); // Bookmarks and reading list require a separate opt in, unless // `syncer::kReplaceSyncPromosWithSignInPromos` is enabled. @@ -456,9 +448,8 @@ ASSERT_FALSE(GetSyncService(0)->IsSyncFeatureEnabled()); // Make sure that only the allowed types got activated. - syncer::DataTypeSet expected_types = - Difference(AllowedTypesInStandaloneTransportMode(), - GetTypesGatedBehindHistoryOptIn()); + syncer::DataTypeSet expected_types = Difference( + AllowedTypesInStandaloneTransportMode(), kTypesGatedBehindHistoryOptIn); if (GetParam()) { #if !(BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX))
diff --git a/chrome/browser/sync/test/integration/sync_app_helper.cc b/chrome/browser/sync/test/integration/sync_app_helper.cc index 34ad1fe..590a363bc 100644 --- a/chrome/browser/sync/test/integration/sync_app_helper.cc +++ b/chrome/browser/sync/test/integration/sync_app_helper.cc
@@ -41,7 +41,7 @@ syncer::StringOrdinal app_launch_ordinal; syncer::StringOrdinal page_ordinal; - extensions::LaunchType launch_type = extensions::LAUNCH_TYPE_INVALID; + extensions::LaunchType launch_type = extensions::LaunchType::kInvalid; GURL launch_web_url; std::string description; std::string name;
diff --git a/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc b/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc index 97d788c..bde90b8 100644 --- a/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc
@@ -333,22 +333,22 @@ // Change the launch type to window. extensions::SetLaunchType(GetProfile(1), extensions::kWebStoreAppId, - extensions::LAUNCH_TYPE_WINDOW); + extensions::LaunchType::kWindow); ASSERT_TRUE(AppsMatchChecker().Wait()); ASSERT_EQ(extensions::GetLaunchTypePrefValue( extensions::ExtensionPrefs::Get(GetProfile(0)), extensions::kWebStoreAppId), - extensions::LAUNCH_TYPE_WINDOW); + extensions::LaunchType::kWindow); // Change the launch type to regular tab. extensions::SetLaunchType(GetProfile(1), extensions::kWebStoreAppId, - extensions::LAUNCH_TYPE_REGULAR); + extensions::LaunchType::kRegular); ASSERT_TRUE(AppsMatchChecker().Wait()); ASSERT_EQ(extensions::GetLaunchTypePrefValue( extensions::ExtensionPrefs::Get(GetProfile(0)), extensions::kWebStoreAppId), - extensions::LAUNCH_TYPE_REGULAR); + extensions::LaunchType::kRegular); } IN_PROC_BROWSER_TEST_F(TwoClientExtensionAppsSyncTest, UnexpectedLaunchType) { @@ -358,7 +358,7 @@ ASSERT_TRUE(AllProfilesHaveSameApps()); extensions::SetLaunchType(GetProfile(1), extensions::kWebStoreAppId, - extensions::LAUNCH_TYPE_REGULAR); + extensions::LaunchType::kRegular); ASSERT_TRUE(AppsMatchChecker().Wait()); const extensions::Extension* extension = @@ -380,7 +380,7 @@ *extension, original_data.enabled(), original_data.disable_reasons(), original_data.incognito_enabled(), original_data.remote_install(), original_data.update_url(), original_data.app_launch_ordinal(), - original_data.page_ordinal(), extensions::NUM_LAUNCH_TYPES); + original_data.page_ordinal(), extensions::LaunchType::kNumLaunchTypes); extension_sync_service->ApplySyncData(invalid_launch_type_data); // The launch type should remain the same.
diff --git a/chrome/browser/tab_ui/android/BUILD.gn b/chrome/browser/tab_ui/android/BUILD.gn index 8c5c694..1ee923d 100644 --- a/chrome/browser/tab_ui/android/BUILD.gn +++ b/chrome/browser/tab_ui/android/BUILD.gn
@@ -156,6 +156,7 @@ "//components/saved_tab_groups/public:java", "//components/saved_tab_groups/public:test_support_java", "//components/signin/public/android:java", + "//components/signin/public/android:signin_java_test_support", "//components/sync/android:sync_java", "//components/tab_groups:tab_groups_java", "//components/user_prefs/android:java",
diff --git a/chrome/browser/tab_ui/android/junit/src/org/chromium/chrome/browser/tab_ui/ActionConfirmationManagerUnitTest.java b/chrome/browser/tab_ui/android/junit/src/org/chromium/chrome/browser/tab_ui/ActionConfirmationManagerUnitTest.java index 0e1e09d15..aaeccb4 100644 --- a/chrome/browser/tab_ui/android/junit/src/org/chromium/chrome/browser/tab_ui/ActionConfirmationManagerUnitTest.java +++ b/chrome/browser/tab_ui/android/junit/src/org/chromium/chrome/browser/tab_ui/ActionConfirmationManagerUnitTest.java
@@ -45,9 +45,9 @@ import org.chromium.chrome.browser.tab_ui.ActionConfirmationManager.MaybeBlockingResult; import org.chromium.components.browser_ui.widget.ActionConfirmationResult; import org.chromium.components.prefs.PrefService; -import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.identitymanager.ConsentLevel; import org.chromium.components.signin.identitymanager.IdentityManager; +import org.chromium.components.signin.test.util.TestAccounts; import org.chromium.components.sync.DataType; import org.chromium.components.sync.SyncService; import org.chromium.components.user_prefs.UserPrefs; @@ -65,7 +65,6 @@ /** Unit tests for {@link ActionConfirmationManager}. */ @RunWith(BaseRobolectricTestRunner.class) public class ActionConfirmationManagerUnitTest { - private static final String TEST_EMAIL = "test@gmail.com"; private static final String GROUP_TITLE = "Group1"; @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); @@ -83,7 +82,6 @@ @Mock private UserPrefs.Natives mUserPrefsJni; @Mock private IdentityServicesProvider mIdentityServicesProvider; @Mock private IdentityManager mIdentityManager; - @Mock private CoreAccountInfo mCoreAccountInfo; @Captor private ArgumentCaptor<PropertyModel> mPropertyModelArgumentCaptor; @Captor private ArgumentCaptor<MaybeBlockingResult> mMaybeBlockingResultCaptor; @@ -103,7 +101,7 @@ IdentityServicesProvider.setInstanceForTests(mIdentityServicesProvider); when(mIdentityServicesProvider.getIdentityManager(mProfile)).thenReturn(mIdentityManager); when(mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN)) - .thenReturn(mCoreAccountInfo); + .thenReturn(TestAccounts.ACCOUNT1); mActivityScenarioRule.getScenario().onActivity(this::onActivity); } @@ -248,7 +246,6 @@ @Test public void testProcessUngroupTabAttempt_SignInButNoSync() { - when(mCoreAccountInfo.getEmail()).thenReturn(TEST_EMAIL); when(mSyncService.getActiveDataTypes()).thenReturn(Collections.emptySet()); ActionConfirmationManager actionConfirmationManager = @@ -266,7 +263,6 @@ @Test public void testProcessUngroupTabAttempt_SignInAndSync() { - when(mCoreAccountInfo.getEmail()).thenReturn(TEST_EMAIL); when(mSyncService.getActiveDataTypes()) .thenReturn(Collections.singleton(DataType.SAVED_TAB_GROUP));
diff --git a/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodControllerRobolectricTest.java b/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodControllerRobolectricTest.java index a949e07..a7860c8 100644 --- a/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodControllerRobolectricTest.java +++ b/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodControllerRobolectricTest.java
@@ -24,7 +24,9 @@ import static org.chromium.chrome.browser.autofill.AutofillTestHelper.createVirtualCreditCard; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_AFFILIATED_LOYALTY_CARDS_SCREEN_INDEX_SELECTED; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_ALL_LOYALTY_CARDS_SCREEN_INDEX_SELECTED; +import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_LINKED_ISSUER_SELECTED; +import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_UNLINKED_ISSUER_SELECTED; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_CREDIT_CARD_INDEX_SELECTED; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_CREDIT_CARD_OUTCOME_HISTOGRAM; @@ -1142,6 +1144,86 @@ } @Test + public void testShowOneBnplIssuerRecordsHistograms() { + HistogramWatcher issuerSelectionScreenShownHistogram = + HistogramWatcher.newSingleRecordWatcher( + TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN, 1); + HistogramWatcher numIssuersShownHistogram = + HistogramWatcher.newSingleRecordWatcher( + TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN, 1); + mCoordinator + .getMediatorForTesting() + .showBnplIssuers(List.of(BNPL_ISSUER_CONTEXT_AFFIRM_LINKED)); + + issuerSelectionScreenShownHistogram.assertExpected(); + numIssuersShownHistogram.assertExpected(); + } + + @Test + public void testShowTwoBnplIssuersRecordsHistograms() { + HistogramWatcher issuerSelectionScreenShownHistogram = + HistogramWatcher.newSingleRecordWatcher( + TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN, 1); + HistogramWatcher numIssuersShownHistogram = + HistogramWatcher.newSingleRecordWatcher( + TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN, 2); + mCoordinator + .getMediatorForTesting() + .showBnplIssuers( + List.of( + BNPL_ISSUER_CONTEXT_AFFIRM_LINKED, + BNPL_ISSUER_CONTEXT_KLARNA_LINKED)); + + issuerSelectionScreenShownHistogram.assertExpected(); + numIssuersShownHistogram.assertExpected(); + } + + @Test + public void testShowBnplIssuerTwiceRecordsHistograms() { + // Show the initial payment method selection screen. + mCoordinator.showPaymentMethods( + List.of(VISA_SUGGESTION, MASTERCARD_SUGGESTION), + /* shouldShowScanCreditCard= */ false); + assertThat(mTouchToFillPaymentMethodModel.get(CURRENT_SCREEN), is(HOME_SCREEN)); + + // Simulate showing the BNPL issuer selection bottom sheet for the first time. + mCoordinator + .getMediatorForTesting() + .showBnplIssuers(List.of(BNPL_ISSUER_CONTEXT_AFFIRM_LINKED)); + assertThat( + mTouchToFillPaymentMethodModel.get(CURRENT_SCREEN), + is(BNPL_ISSUER_SELECTION_SCREEN)); + + // Simulate pressing the back button to return to the payment method selection screen. + ModelList sheetItems = mTouchToFillPaymentMethodModel.get(SHEET_ITEMS); + assertThat(sheetItems.get(0).type, is(BNPL_SELECTION_PROGRESS_HEADER)); + PropertyModel bnplSelectionProgressHeaderModel = sheetItems.get(0).model; + bnplSelectionProgressHeaderModel + .get( + TouchToFillPaymentMethodProperties.BnplSelectionProgressHeaderProperties + .BNPL_ON_BACK_BUTTON_CLICKED) + .run(); + assertThat(mTouchToFillPaymentMethodModel.get(CURRENT_SCREEN), is(HOME_SCREEN)); + + // Simulate showing the BNPL issuer selection bottom sheet again. + mCoordinator + .getMediatorForTesting() + .showBnplIssuers(List.of(BNPL_ISSUER_CONTEXT_AFFIRM_LINKED)); + assertThat( + mTouchToFillPaymentMethodModel.get(CURRENT_SCREEN), + is(BNPL_ISSUER_SELECTION_SCREEN)); + + assertEquals( + 2, + RecordHistogram.getHistogramValueCountForTesting( + TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN, /* sample= */ 1)); + assertEquals( + 2, + RecordHistogram.getHistogramValueCountForTesting( + TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN, /* sample= */ 1)); + } + + @Test public void testUpdateBnplPaymentMethodWithUnSupportedAmount() throws TimeoutException { mCoordinator.showPaymentMethods( List.of(VISA_SUGGESTION, BNPL_SUGGESTION), /* shouldShowScanCreditCard= */ false); @@ -1239,7 +1321,8 @@ R.string.autofill_bnpl_issuer_tos_bottom_sheet_half_height, R.string.autofill_bnpl_issuer_tos_bottom_sheet_full_height, R.string.autofill_bnpl_issuer_tos_bottom_sheet_closed, - org.chromium.chrome.browser.touch_to_fill.payments.R.id.touch_to_fill_bnpl_issuer_tos_screen); + org.chromium.chrome.browser.touch_to_fill.payments.R.id + .touch_to_fill_bnpl_issuer_tos_screen); List<PropertyModel> headerModel = getModelsOfType(itemList, HEADER); assertThat(headerModel.size(), is(1));
diff --git a/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodMediator.java b/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodMediator.java index b5c5053a..6797845 100644 --- a/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodMediator.java +++ b/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodMediator.java
@@ -281,6 +281,14 @@ static final String TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_UNLINKED_ISSUER_SELECTED = "Autofill.TouchToFill.Bnpl.SelectIssuerScreen.UnlinkedIssuerSelected"; + @VisibleForTesting + static final String TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN = + "Autofill.TouchToFill.Bnpl.SelectIssuerScreen.NumberOfIssuersShown"; + + @VisibleForTesting + static final String TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN = + "Autofill.TouchToFill.Bnpl.SelectIssuerScreen.Shown"; + // LINT.IfChange private static final String WALLET_LINK_TEXT = "wallet.google.com"; @@ -649,6 +657,12 @@ FOCUSED_VIEW_ID_FOR_ACCESSIBILITY, R.id.touch_to_fill_bnpl_issuer_selection_screen); mModel.set(SHEET_ITEMS, sheetItems); mModel.set(VISIBLE, true); + + RecordHistogram.recordBooleanHistogram( + TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN, /* sample= */ true); + RecordHistogram.recordCount100Histogram( + TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN, + mBnplIssuerContexts.size()); } public void showErrorScreen(String title, String description) {
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 47027a2d..3e5389f0 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1549,6 +1549,8 @@ "//chrome/browser/ui/toolbar/pinned_toolbar:impl", "//chrome/browser/ui/user_education", "//chrome/browser/ui/user_education:impl", + "//chrome/browser/ui/views/contextual_tasks", + "//chrome/browser/ui/views/contextual_tasks:impl", "//chrome/browser/ui/views/location_bar", "//chrome/browser/ui/views/new_tab_footer", "//chrome/browser/ui/views/side_panel:side_panel_enums", @@ -1738,6 +1740,7 @@ "//chrome/browser/ui/tabs/saved_tab_groups:impl", "//chrome/browser/ui/toasts:impl", "//chrome/browser/ui/webui/customize_buttons", + "//chrome/browser/ui/views/contextual_tasks:impl", "//chrome/browser/ui/webui/customize_buttons:impl", "//chrome/browser/ui/views/toolbar", "//chrome/browser/ui/views/toolbar:impl", @@ -3054,6 +3057,10 @@ } if (is_win || is_mac) { + sources += [ + "webui/updater/updater_ui.cc", + "webui/updater/updater_ui.h", + ] deps += [ "//chrome/browser/ui/pdf/infobar", "//chrome/browser/ui/startup/default_browser_prompt/pin_infobar",
diff --git a/chrome/browser/ui/actions/chrome_action_id.h b/chrome/browser/ui/actions/chrome_action_id.h index 7149109..936a150b3 100644 --- a/chrome/browser/ui/actions/chrome_action_id.h +++ b/chrome/browser/ui/actions/chrome_action_id.h
@@ -92,6 +92,7 @@ E(kActionPasswordsAndAutofillMenu, IDC_PASSWORDS_AND_AUTOFILL_MENU) \ E(kActionShowMemorySaverChip) \ E(kActionShowCookieControls) \ + E(kActionContextualPanelPageActionChip) \ /* Page-manipulation commands that target a specified tab, which may not */ \ /* be the active one. */ \ E(kActionMuteTargetSite, IDC_MUTE_TARGET_SITE) \
diff --git a/chrome/browser/ui/android/device_lock/BUILD.gn b/chrome/browser/ui/android/device_lock/BUILD.gn index 976f0a4f..8262bd4bc 100644 --- a/chrome/browser/ui/android/device_lock/BUILD.gn +++ b/chrome/browser/ui/android/device_lock/BUILD.gn
@@ -68,6 +68,7 @@ "//components/browser_ui/device_lock/android:java", "//components/browser_ui/widget/android:java", "//components/signin/public/android:java", + "//components/signin/public/android:signin_java_test_support", "//content/public/test/android:content_java_test_support", "//third_party/android_deps:espresso_java", "//third_party/androidx:androidx_annotation_annotation_java",
diff --git a/chrome/browser/ui/android/device_lock/javatests/src/org/chromium/chrome/browser/ui/device_lock/MissingDeviceLockLauncherTest.java b/chrome/browser/ui/android/device_lock/javatests/src/org/chromium/chrome/browser/ui/device_lock/MissingDeviceLockLauncherTest.java index 2348e14..d8545db 100644 --- a/chrome/browser/ui/android/device_lock/javatests/src/org/chromium/chrome/browser/ui/device_lock/MissingDeviceLockLauncherTest.java +++ b/chrome/browser/ui/android/device_lock/javatests/src/org/chromium/chrome/browser/ui/device_lock/MissingDeviceLockLauncherTest.java
@@ -47,8 +47,8 @@ import org.chromium.chrome.browser.signin.services.SigninManager; import org.chromium.chrome.browser.signin.services.SigninManager.DataWipeOption; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.identitymanager.IdentityManager; +import org.chromium.components.signin.test.util.TestAccounts; import org.chromium.ui.modaldialog.DialogDismissalCause; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.test.util.BlankUiTestActivity; @@ -74,7 +74,6 @@ @Mock private IdentityManager mIdentityManager; @Mock private PersonalDataManager mPersonalDataManager; @Mock private Profile mProfile; - @Mock private CoreAccountInfo mCoreAccountInfo; @Mock private PasswordStoreBridge mPasswordStoreBridge; private MissingDeviceLockLauncher mMissingDeviceLockLauncher; @@ -91,7 +90,6 @@ mIdentityManager = Mockito.mock(IdentityManager.class); mPersonalDataManager = Mockito.mock(PersonalDataManager.class); mProfile = Mockito.mock(Profile.class); - mCoreAccountInfo = Mockito.mock(CoreAccountInfo.class); mSharedPreferencesManager = ChromeSharedPreferences.getInstance(); mSharedPreferencesManager.removeKey(ChromePreferenceKeys.DEVICE_LOCK_SHOW_ALERT_IF_REMOVED); @@ -202,7 +200,7 @@ mSharedPreferencesManager.writeBoolean( ChromePreferenceKeys.DEVICE_LOCK_SHOW_ALERT_IF_REMOVED, true); - doReturn(mCoreAccountInfo).when(mIdentityManager).getPrimaryAccountInfo(anyInt()); + doReturn(TestAccounts.ACCOUNT1).when(mIdentityManager).getPrimaryAccountInfo(anyInt()); doAnswer( (invocation) -> { SigninManager.SignOutCallback callback = invocation.getArgument(1); @@ -237,7 +235,7 @@ mSharedPreferencesManager.writeBoolean( ChromePreferenceKeys.DEVICE_LOCK_SHOW_ALERT_IF_REMOVED, true); - doReturn(mCoreAccountInfo).when(mIdentityManager).getPrimaryAccountInfo(anyInt()); + doReturn(TestAccounts.ACCOUNT1).when(mIdentityManager).getPrimaryAccountInfo(anyInt()); doAnswer( (invocation) -> { SigninManager.SignOutCallback callback = invocation.getArgument(1);
diff --git a/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayerTest.java b/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayerTest.java index bc0e3470..dd1a781 100644 --- a/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayerTest.java +++ b/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayerTest.java
@@ -66,7 +66,7 @@ mSceneLayer.setOffsetTag(offsetTag); RectF viewport = new RectF(0, 0, 100, 400); - mSceneLayer.getUpdatedSceneOverlayTree(viewport, viewport, null, 0); + mSceneLayer.getUpdatedSceneOverlayTree(viewport, viewport, null); verify(mSceneLayerJni) .updateEdgeToEdgeBottomChinLayer( 123,
diff --git a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayer.java b/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayer.java index 927f043..ecce330e 100644 --- a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayer.java +++ b/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayer.java
@@ -134,7 +134,7 @@ @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { EdgeToEdgeBottomChinSceneLayerJni.get() .updateEdgeToEdgeBottomChinLayer( mNativePtr,
diff --git a/chrome/browser/ui/android/layouts/java/src/org/chromium/chrome/browser/layouts/SceneOverlay.java b/chrome/browser/ui/android/layouts/java/src/org/chromium/chrome/browser/layouts/SceneOverlay.java index d2ed5c5..7da1189 100644 --- a/chrome/browser/ui/android/layouts/java/src/org/chromium/chrome/browser/layouts/SceneOverlay.java +++ b/chrome/browser/ui/android/layouts/java/src/org/chromium/chrome/browser/layouts/SceneOverlay.java
@@ -24,12 +24,11 @@ * @param viewport The viewport of the window. * @param visibleViewport The viewport accounting for browser controls. * @param resourceManager A resource manager. - * @param yOffset Current browser controls offset in dp. * @return A {@link SceneOverlayLayer} that represents an scene overlay. Or {@code null} if this * {@link SceneOverlay} doesn't have a tree. */ @Nullable SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset); + RectF viewport, RectF visibleViewport, ResourceManager resourceManager); /** Notify the {@link SceneOverlayLayer} that it should be removed from its parent. */ void removeFromParent();
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index bae5821..a85d03c 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -2961,6 +2961,9 @@ <message name="IDS_CONTEXTMENU_OPEN_IN_NEW_CHROME_TAB" desc="Context sensitive menu item to open the selected link in a new Chrome tab from Chrome Custom Tab. [CHAR_LIMIT=30]"> Open in new Chrome tab </message> + <message name="IDS_CONTEXTMENU_OPEN_IN_CHROME_WINDOW" desc="Context sensitive menu item to open the selected link in a Chrome window from Chrome Custom Tab. Used when there is a dedicated window for Incognito tabs. [CHAR_LIMIT=30]"> + Open in Chrome window + </message> <message name="IDS_CONTEXTMENU_OPEN_IN_CHROME_INCOGNITO_TAB" desc="Context sensitive menu item to open the selected link in a Chrome Incognito tab from Chrome Custom Tab. [CHAR_LIMIT=30]"> Open in Incognito tab </message>
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTMENU_OPEN_IN_CHROME_WINDOW.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTMENU_OPEN_IN_CHROME_WINDOW.png.sha1 new file mode 100644 index 0000000..a8136f24 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTMENU_OPEN_IN_CHROME_WINDOW.png.sha1
@@ -0,0 +1 @@ +44058b2dff8420b224afdafd89baca3ed1842b22 \ No newline at end of file
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 ffba264..ecb23b5 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
@@ -384,7 +384,9 @@ } case MiniOriginState.ANIMATING -> { return switch (miniOriginEvent) { - case MiniOriginEvent.CONTROLS_POSITION_BECAME_TOP -> MiniOriginState.NOT_READY; + case MiniOriginEvent.FORM_FIELD_LOST_FOCUS, + MiniOriginEvent.CONTROLS_POSITION_BECAME_TOP -> + MiniOriginState.NOT_READY; // A predictive back hide animation for the keyboard can be cancelled, // ending in a transient state where the keyboard insets are not applied but // it remains visible. To avoid visual glitches from hiding and reshowing,
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 e960ba1..d6352f8b 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
@@ -483,6 +483,27 @@ } @Test + public void testLoseFormFocusDuringAnimation() { + doReturn(ControlsPosition.BOTTOM).when(mBrowserControlsSizer).getControlsPosition(); + mMiniOriginBarController.onControlsPositionChanged(ControlsPosition.BOTTOM); + final MiniOriginWindowInsetsAnimationListener animationListener = + mMiniOriginBarController.getAnimationListenerForTesting(); + final BoundsCompat bounds = new BoundsCompat(Insets.NONE, Insets.of(0, 0, 0, 100)); + + mIsFormFieldFocused.onNodeAttributeUpdated(true, false); + + animationListener.onPrepare(mImeAnimation); + animationListener.onStart(mImeAnimation, bounds); + mKeyboardVisibilityDelegate.setVisibilityForTests(true); + Assert.assertEquals( + MiniOriginState.ANIMATING, mMiniOriginBarController.getCurrentStateForTesting()); + + mIsFormFieldFocused.onNodeAttributeUpdated(false, false); + Assert.assertEquals( + MiniOriginState.NOT_READY, mMiniOriginBarController.getCurrentStateForTesting()); + } + + @Test public void testAnimateWithKeyboard_animationFinishesInStartingState() { // Predictive back gestures can cause an IME hide animation to run but finish with the IME // still showing if the gesture is cancelled.
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java index a139d90..997bc3077 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java
@@ -119,7 +119,7 @@ @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { boolean isShadowVisible; if (ChromeFeatureList.sBcivBottomControls.isEnabled()) { isShadowVisible = true;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarPreference.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarPreference.java index d99d3a59..c487044 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarPreference.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarPreference.java
@@ -4,7 +4,10 @@ package org.chromium.chrome.browser.toolbar.settings; +import android.animation.ArgbEvaluator; +import android.animation.ValueAnimator; import android.content.Context; +import android.os.Handler; import android.util.AttributeSet; import android.widget.RadioGroup; @@ -22,7 +25,9 @@ import org.chromium.chrome.browser.prefs.LocalStatePrefs; import org.chromium.chrome.browser.toolbar.R; import org.chromium.chrome.browser.toolbar.ToolbarPositionController.ToolbarPositionAndSource; +import org.chromium.chrome.browser.toolbar.settings.AddressBarSettingsFragment.HighlightedOption; import org.chromium.components.browser_ui.settings.ContainedRadioButtonGroupPreference; +import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.widget.RadioButtonWithDescription; import org.chromium.components.browser_ui.widget.RadioButtonWithDescriptionLayout; import org.chromium.components.prefs.PrefService; @@ -31,9 +36,13 @@ @NullMarked public class AddressBarPreference extends ContainedRadioButtonGroupPreference implements RadioGroup.OnCheckedChangeListener { + private static final int HIGHLIGHT_ANIMATION_DELAY_MS = 3000; + private static final int HIGHLIGHT_ANIMATION_DURATION_MS = 1000; + private RadioButtonWithDescriptionLayout mGroup; private RadioButtonWithDescription mTopButton; private RadioButtonWithDescription mBottomButton; + private @HighlightedOption int mHighlightedOption; // We choose this as a "default return value" because top omnibox is the default today. Choose // TOP_SETTINGS because TOP_LONG_PRESS causes an animation (see ToolbarPositionController). @@ -46,6 +55,15 @@ setLayoutResource(R.layout.address_bar_preference); } + /** + * Set Address Bar highlighted option. Called before onBindViewHolder. + * + * @param highlightedOption The highlighted option for this preference. + */ + public void init(@HighlightedOption int highlightedOption) { + mHighlightedOption = highlightedOption; + } + /** If native is initialized, writes the toolbar position and source. */ public static void setToolbarPositionAndSource(@ToolbarPositionAndSource int sharedPref) { SharedPreferencesManager sharedPreferencesManager = ChromeSharedPreferences.getInstance(); @@ -162,6 +180,30 @@ mTopButton = (RadioButtonWithDescription) holder.findViewById(R.id.address_bar_top); mBottomButton = (RadioButtonWithDescription) holder.findViewById(R.id.address_bar_bottom); + if (mHighlightedOption == HighlightedOption.BOTTOM_TOOLBAR) { + int highlightColor = SemanticColorUtils.getSettingsBackgroundColor(getContext()); + int defaultColor = SemanticColorUtils.getDefaultBgColor(getContext()); + mBottomButton.setBackgroundColor(highlightColor); + + // Add a post delayed task to make the highlight fade out after a period of time. + new Handler() + .postDelayed( + () -> { + if (!mBottomButton.isAttachedToWindow()) return; + + ValueAnimator colorAnimation = + ValueAnimator.ofObject( + new ArgbEvaluator(), highlightColor, defaultColor); + colorAnimation.setDuration(HIGHLIGHT_ANIMATION_DURATION_MS); + colorAnimation.addUpdateListener( + animator -> + mBottomButton.setBackgroundColor( + (int) animator.getAnimatedValue())); + colorAnimation.start(); + }, + HIGHLIGHT_ANIMATION_DELAY_MS); + } + if (ChromeFeatureList.sAndroidSettingsContainment.isEnabled()) { // TODO(crbug.com/439911511): Set the value directly in the layout instead. int verticalPadding =
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragment.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragment.java index 419cbb1..99a4ba29 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragment.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragment.java
@@ -8,9 +8,11 @@ import android.content.res.Configuration; import android.os.Bundle; +import androidx.annotation.IntDef; import androidx.annotation.VisibleForTesting; import org.chromium.base.DeviceInfo; +import org.chromium.base.IntentUtils; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.build.annotations.NullMarked; @@ -22,12 +24,23 @@ import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.ui.base.DeviceFormFactor; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** Fragment for address bar settings. */ @NullMarked public class AddressBarSettingsFragment extends ChromeBaseSettingsFragment { + @IntDef({HighlightedOption.NONE, HighlightedOption.BOTTOM_TOOLBAR}) + @Retention(RetentionPolicy.SOURCE) + public @interface HighlightedOption { + int NONE = 0; + int BOTTOM_TOOLBAR = 1; + } + @VisibleForTesting static final String PREF_ADDRESS_BAR_HEADER = "address_bar_header"; @VisibleForTesting static final String PREF_ADDRESS_BAR_PREFERENCE = "address_bar_preference"; @VisibleForTesting static final String PREF_ADDRESS_BAR_TITLE = "address_bar_title"; + public static final String HIGHLIGHTED_OPTION = "AddressBarSettingsFragment.HighlightedOption"; private final ObservableSupplierImpl<String> mPageTitle = new ObservableSupplierImpl<>(); @@ -39,6 +52,13 @@ if (!ChromeFeatureList.sAndroidSettingsContainment.isEnabled()) { findPreference(PREF_ADDRESS_BAR_TITLE).setTitle(summary); } + + @HighlightedOption + int highlightedOption = + IntentUtils.safeGetInt(getArguments(), HIGHLIGHTED_OPTION, HighlightedOption.NONE); + ((AddressBarPreference) findPreference(PREF_ADDRESS_BAR_PREFERENCE)) + .init(highlightedOption); + overrideDescriptionIfFoldable(); } @@ -67,6 +87,17 @@ return context.getString(R.string.address_bar_settings); } + /** + * Creates an argument bundle to open the Address Bar settings page. + * + * @param highlightedOption The highlighted option for the Address Bar settings page. + */ + public static Bundle createArguments(@HighlightedOption int highlightedOption) { + Bundle result = new Bundle(); + result.putInt(HIGHLIGHTED_OPTION, highlightedOption); + return result; + } + @Override public @AnimationType int getAnimationType() { return AnimationType.PROPERTY;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragmentUnitTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragmentUnitTest.java index 903c50e2..d16c6ed 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragmentUnitTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragmentUnitTest.java
@@ -18,6 +18,8 @@ import android.app.Activity; import android.content.pm.PackageManager; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; import android.widget.ImageView; import androidx.fragment.app.FragmentManager; @@ -36,6 +38,7 @@ import org.mockito.junit.MockitoRule; import org.robolectric.Shadows; import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowLooper; import org.robolectric.shadows.ShadowPackageManager; import org.chromium.base.ContextUtils; @@ -49,6 +52,8 @@ import org.chromium.chrome.browser.prefs.LocalStatePrefs; import org.chromium.chrome.browser.prefs.LocalStatePrefsJni; import org.chromium.chrome.browser.toolbar.ToolbarPositionController.ToolbarPositionAndSource; +import org.chromium.chrome.browser.toolbar.settings.AddressBarSettingsFragment.HighlightedOption; +import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.widget.RadioButtonWithDescription; import org.chromium.components.prefs.PrefService; import org.chromium.ui.base.TestActivity; @@ -105,7 +110,25 @@ mActivity = (TestActivity) activity; } - private void launchFragment() { + @Test + @SmallTest + public void testBottomButtonHighlight() { + launchFragmentWithArgs( + AddressBarSettingsFragment.createArguments(HighlightedOption.BOTTOM_TOOLBAR)); + + ColorDrawable initialBackground = (ColorDrawable) mBottomButton.getBackground(); + assertEquals( + SemanticColorUtils.getSettingsBackgroundColor(mActivity), + initialBackground.getColor()); + + // Run delayed animation that reverts the color. + ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); + + ColorDrawable finalBackground = (ColorDrawable) mBottomButton.getBackground(); + assertEquals(SemanticColorUtils.getDefaultBgColor(mActivity), finalBackground.getColor()); + } + + private void launchFragmentWithArgs(Bundle args) { FragmentManager fragmentManager = mActivity.getSupportFragmentManager(); mSettings = (AddressBarSettingsFragment) @@ -114,6 +137,7 @@ .instantiate( AddressBarSettingsFragment.class.getClassLoader(), AddressBarSettingsFragment.class.getName()); + mSettings.setArguments(args); fragmentManager.beginTransaction().replace(android.R.id.content, mSettings).commit(); mActivityScenarioRule.getScenario().moveToState(State.STARTED); @@ -143,7 +167,7 @@ mSharedPreferencesManager.writeInt( ChromePreferenceKeys.TOOLBAR_TOP_ANCHORED, ToolbarPositionAndSource.TOP_SETTINGS); - launchFragment(); + launchFragmentWithArgs(null); assertEquals( mActivity.getString(R.string.address_bar_settings_description), mAddressBarTitle.getSummary()); @@ -176,7 +200,7 @@ ChromePreferenceKeys.TOOLBAR_TOP_ANCHORED, ToolbarPositionAndSource.BOTTOM_SETTINGS); - launchFragment(); + launchFragmentWithArgs(null); assertFalse(mTopButton.isChecked()); assertTrue(mBottomButton.isChecked()); assertFalse(mToolbarPositionImage.isSelected()); @@ -202,7 +226,7 @@ ChromePreferenceKeys.TOOLBAR_TOP_ANCHORED, ToolbarPositionAndSource.BOTTOM_SETTINGS); - launchFragment(); + launchFragmentWithArgs(null); assertFalse(mTopButton.isChecked()); assertTrue(mBottomButton.isChecked()); assertFalse(mToolbarPositionImage.isSelected()); @@ -228,7 +252,7 @@ shadowPackageManager.setSystemFeature(PackageManager.FEATURE_SENSOR_HINGE_ANGLE, true); mSharedPreferencesManager.writeBoolean(ChromePreferenceKeys.TOOLBAR_TOP_ANCHORED, true); - launchFragment(); + launchFragmentWithArgs(null); assertEquals( mActivity.getString(R.string.address_bar_settings_description_foldable), mAddressBarTitle.getSummary());
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java index 39566b8..6e63b55 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java
@@ -141,7 +141,7 @@ @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { return mSceneLayer; }
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc index 294e979..ec503007 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.cc +++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -1052,17 +1052,15 @@ } bool ChromeAutofillClient::IsAutofillEnabled() const { - return IsAutofillProfileEnabled() || IsAutofillPaymentMethodsEnabled(); + return IsAutofillProfileEnabled() || + AutofillClient::GetPaymentsAutofillClient() + ->IsAutofillPaymentMethodsEnabled(); } bool ChromeAutofillClient::IsAutofillProfileEnabled() const { return prefs::IsAutofillProfileEnabled(GetPrefs()); } -bool ChromeAutofillClient::IsAutofillPaymentMethodsEnabled() const { - return prefs::IsAutofillPaymentMethodsEnabled(GetPrefs()); -} - bool ChromeAutofillClient::IsAutocompleteEnabled() const { return prefs::IsAutocompleteEnabled(GetPrefs()); }
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.h b/chrome/browser/ui/autofill/chrome_autofill_client.h index 1b4fb80..639ff617 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.h +++ b/chrome/browser/ui/autofill/chrome_autofill_client.h
@@ -196,7 +196,6 @@ const base::flat_set<EntityTypeName>& saved_entities) final; bool IsAutofillEnabled() const final; bool IsAutofillProfileEnabled() const final; - bool IsAutofillPaymentMethodsEnabled() const final; bool IsAutocompleteEnabled() const final; bool IsWalletStorageEnabled() const final; bool IsPasswordManagerEnabled() const final;
diff --git a/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc b/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc index fb739c1c..b0bf883 100644 --- a/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc +++ b/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc
@@ -67,6 +67,7 @@ #include "components/autofill/core/browser/ui/payments/card_unmask_prompt_view.h" #include "components/autofill/core/browser/ui/payments/save_and_fill_dialog_controller_impl.h" #include "components/autofill/core/common/autofill_payments_features.h" +#include "components/autofill/core/common/autofill_prefs.h" #include "components/feature_engagement/public/feature_constants.h" #include "components/feature_engagement/public/tracker.h" #include "components/signin/public/identity_manager/account_info.h" @@ -825,6 +826,12 @@ #endif } +bool ChromePaymentsAutofillClient::IsAutofillPaymentMethodsEnabled() const { + return prefs::IsAutofillPaymentMethodsEnabled( + Profile::FromBrowserContext(web_contents()->GetBrowserContext()) + ->GetPrefs()); +} + IbanManager* ChromePaymentsAutofillClient::GetIbanManager() { Profile* profile = Profile::FromBrowserContext(web_contents()->GetBrowserContext());
diff --git a/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.h b/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.h index 518ceda..2752801 100644 --- a/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.h +++ b/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.h
@@ -191,6 +191,7 @@ base::OnceClosure cancel_mandatory_reauth_callback, base::RepeatingClosure close_mandatory_reauth_callback) override; void ShowMandatoryReauthOptInConfirmation() override; + bool IsAutofillPaymentMethodsEnabled() const final; IbanManager* GetIbanManager() override; IbanAccessManager* GetIbanAccessManager() override; MerchantPromoCodeManager* GetMerchantPromoCodeManager() override;
diff --git a/chrome/browser/ui/browser_actions.cc b/chrome/browser/ui/browser_actions.cc index 72ef6de1..b975b34 100644 --- a/chrome/browser/ui/browser_actions.cc +++ b/chrome/browser/ui/browser_actions.cc
@@ -1280,6 +1280,35 @@ vector_icons::kChatIcon, kActionSidePanelShowContextualTasks, bwi, false) .Build()); + + if (contextual_tasks::kShowEntryPoint.Get() == + contextual_tasks::EntryPointOption::kPageActionRevisit) { + actions::ActionItem::InvokeActionCallback contextual_task_callback = + base::BindRepeating( + [](BrowserWindowInterface* bwi, actions::ActionItem* item, + actions::ActionInvocationContext context) { + if (!bwi) { + return; + } + chrome::ShowContextualTasksSidePanel(bwi); + }, + bwi); + root_action_item_->AddChild( + actions::ActionItem::Builder(contextual_task_callback) + .SetActionId(kActionContextualPanelPageActionChip) + .SetText(l10n_util::GetStringUTF16( + IDS_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_TITLE)) + .SetTooltipText(l10n_util::GetStringUTF16( + IDS_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_TITLE)) + .SetImage(ui::ImageModel::FromVectorIcon(vector_icons::kChatIcon, + ui::kColorIcon)) + .SetProperty( + actions::kActionItemPinnableKey, + static_cast< + std::underlying_type_t<actions::ActionPinnableState>>( + actions::ActionPinnableState::kPinnable)) + .Build()); + } } // TODO(crbug.com/454112198): Delete this after Multi Instance launches. This // is currently only used in the experimental single instance side panel.
diff --git a/chrome/browser/ui/browser_command_controller_interactive_browsertest.cc b/chrome/browser/ui/browser_command_controller_interactive_uitest.cc similarity index 100% rename from chrome/browser/ui/browser_command_controller_interactive_browsertest.cc rename to chrome/browser/ui/browser_command_controller_interactive_uitest.cc
diff --git a/chrome/browser/ui/browser_element_identifiers.cc b/chrome/browser/ui/browser_element_identifiers.cc index 4f2c48a..b3ab1c8 100644 --- a/chrome/browser/ui/browser_element_identifiers.cc +++ b/chrome/browser/ui/browser_element_identifiers.cc
@@ -27,6 +27,7 @@ DEFINE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTopEdgeElementId); DEFINE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTrailingEdgeElementId); DEFINE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTrailingTopCornerElementId); +DEFINE_ELEMENT_IDENTIFIER_VALUE(kContextualTasksPageActionElementId); DEFINE_ELEMENT_IDENTIFIER_VALUE(kContextualTasksSidePanelWebViewElementId); DEFINE_ELEMENT_IDENTIFIER_VALUE(kCookieControlsIconElementId); DEFINE_ELEMENT_IDENTIFIER_VALUE(kCustomizeChromeSidePanelWebViewElementId);
diff --git a/chrome/browser/ui/browser_element_identifiers.h b/chrome/browser/ui/browser_element_identifiers.h index adfb2d19..8016aac9 100644 --- a/chrome/browser/ui/browser_element_identifiers.h +++ b/chrome/browser/ui/browser_element_identifiers.h
@@ -36,6 +36,7 @@ DECLARE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTopEdgeElementId); DECLARE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTrailingEdgeElementId); DECLARE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTrailingTopCornerElementId); +DECLARE_ELEMENT_IDENTIFIER_VALUE(kContextualTasksPageActionElementId); DECLARE_ELEMENT_IDENTIFIER_VALUE(kContextualTasksSidePanelWebViewElementId); DECLARE_ELEMENT_IDENTIFIER_VALUE(kCookieControlsIconElementId); DECLARE_ELEMENT_IDENTIFIER_VALUE(kCustomizeChromeSidePanelWebViewElementId);
diff --git a/chrome/browser/ui/browser_focus_uitest.cc b/chrome/browser/ui/browser_focus_interactive_uitest.cc similarity index 100% rename from chrome/browser/ui/browser_focus_uitest.cc rename to chrome/browser/ui/browser_focus_interactive_uitest.cc
diff --git a/chrome/browser/ui/cocoa/history_menu_bridge.mm b/chrome/browser/ui/cocoa/history_menu_bridge.mm index 4dd6941..976904a 100644 --- a/chrome/browser/ui/cocoa/history_menu_bridge.mm +++ b/chrome/browser/ui/cocoa/history_menu_bridge.mm
@@ -603,6 +603,10 @@ void HistoryMenuBridge::OnURLVisited( history::HistoryService* history_service, const history::VisitedURLInfo& visited_url_info) { + if (visited_url_info.response_code_category == + history::VisitResponseCodeCategory::k404) { + return; + } OnHistoryChanged(); }
diff --git a/chrome/browser/ui/color/chrome_color_id.h b/chrome/browser/ui/color/chrome_color_id.h index b633dd7e..41a8faa3 100644 --- a/chrome/browser/ui/color/chrome_color_id.h +++ b/chrome/browser/ui/color/chrome_color_id.h
@@ -36,6 +36,7 @@ E_CPONLY(kColorAvatarButtonHighlightGuest) \ E_CPONLY(kColorAvatarButtonHighlightSyncError) \ E_CPONLY(kColorAvatarButtonHighlightSyncPaused) \ + E_CPONLY(kColorAvatarButtonHighlightPasskeysLocked) \ E_CPONLY(kColorAvatarButtonHighlightSigninPaused) \ E_CPONLY(kColorAvatarButtonHighlightExplicitText) \ E_CPONLY(kColorAvatarButtonHighlightIncognito) \
diff --git a/chrome/browser/ui/color/chrome_color_mixer.cc b/chrome/browser/ui/color/chrome_color_mixer.cc index 127072e..47d72f3 100644 --- a/chrome/browser/ui/color/chrome_color_mixer.cc +++ b/chrome/browser/ui/color/chrome_color_mixer.cc
@@ -121,6 +121,8 @@ ui::kColorAlertHighSeverity, kColorToolbar); mixer[kColorAvatarButtonHighlightSyncPaused] = { kColorAvatarButtonHighlightDefault}; + mixer[kColorAvatarButtonHighlightPasskeysLocked] = { + kColorAvatarButtonHighlightDefault}; mixer[kColorAvatarButtonHighlightSigninPaused] = { kColorAvatarButtonHighlightDefault}; mixer[kColorAvatarButtonHighlightExplicitText] = {
diff --git a/chrome/browser/ui/color/material_chrome_color_mixer.cc b/chrome/browser/ui/color/material_chrome_color_mixer.cc index 36268c1..206c112d 100644 --- a/chrome/browser/ui/color/material_chrome_color_mixer.cc +++ b/chrome/browser/ui/color/material_chrome_color_mixer.cc
@@ -278,6 +278,8 @@ mixer[kColorAppMenuChipInkDropRipple] = {ui::kColorSysStateRipplePrimary}; mixer[kColorAvatarButtonHighlightSyncPaused] = { kColorAvatarButtonHighlightDefault}; + mixer[kColorAvatarButtonHighlightPasskeysLocked] = { + kColorAvatarButtonHighlightDefault}; mixer[kColorAvatarButtonHighlightSigninPaused] = { kColorAvatarButtonHighlightDefault}; mixer[kColorAvatarButtonHighlightSyncError] = {ui::kColorSysErrorContainer};
diff --git a/chrome/browser/ui/extensions/BUILD.gn b/chrome/browser/ui/extensions/BUILD.gn index 22244874..787cbd3 100644 --- a/chrome/browser/ui/extensions/BUILD.gn +++ b/chrome/browser/ui/extensions/BUILD.gn
@@ -109,6 +109,7 @@ sources += [ "controlled_home_dialog.cc", "controlled_home_dialog_controller.cc", + "download_open_dialog.cc", "extension_action_view_model.cc", "extension_install_blocked_dialog.cc", "extension_install_friction_dialog.cc",
diff --git a/chrome/browser/download/download_open_dialog.cc b/chrome/browser/ui/extensions/download_open_dialog.cc similarity index 97% rename from chrome/browser/download/download_open_dialog.cc rename to chrome/browser/ui/extensions/download_open_dialog.cc index 1ec2741..b79735e1 100644 --- a/chrome/browser/download/download_open_dialog.cc +++ b/chrome/browser/ui/extensions/download_open_dialog.cc
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/download/download_open_dialog.h" - #include <memory> #include <utility> @@ -40,6 +38,8 @@ } // namespace +namespace extensions { + void ShowDownloadOpenConfirmationDialog( content::WebContents* web_contents, const std::string& extension_name, @@ -86,3 +86,5 @@ ShowWebModalDialog(web_contents, std::move(dialog)); } + +} // namespace extensions
diff --git a/chrome/browser/ui/extensions/extensions_dialogs.h b/chrome/browser/ui/extensions/extensions_dialogs.h index 3d8238b..c5c27fb 100644 --- a/chrome/browser/ui/extensions/extensions_dialogs.h +++ b/chrome/browser/ui/extensions/extensions_dialogs.h
@@ -72,6 +72,15 @@ gfx::NativeWindow parent, std::unique_ptr<ControlledHomeDialogControllerInterface> controller); +// Shows a dialog that prompts the user for whether to open a DownloadItem using +// native UI. This step is necessary to prevent a malicious extension from +// opening any downloaded file. +void ShowDownloadOpenConfirmationDialog( + content::WebContents* web_contents, + const std::string& extension_name, + const base::FilePath& file_path, + base::OnceCallback<void(bool)> open_callback); + // Shows a modal dialog to Enhanced Safe Browsing users before the extension // install dialog if the extension is not included in the Safe Browsing CRX // allowlist. `callback` will be invoked with `true` if the user accepts or
diff --git a/chrome/browser/ui/keyboard_lock_interactive_browsertest.cc b/chrome/browser/ui/keyboard_lock_interactive_uitest.cc similarity index 100% rename from chrome/browser/ui/keyboard_lock_interactive_browsertest.cc rename to chrome/browser/ui/keyboard_lock_interactive_uitest.cc
diff --git a/chrome/browser/ui/lens/lens_overlay_controller.cc b/chrome/browser/ui/lens/lens_overlay_controller.cc index fcb8d094..ac373c8 100644 --- a/chrome/browser/ui/lens/lens_overlay_controller.cc +++ b/chrome/browser/ui/lens/lens_overlay_controller.cc
@@ -63,7 +63,6 @@ #include "chrome/browser/ui/user_education/browser_user_education_interface.h" #include "chrome/browser/ui/views/interaction/browser_elements_views.h" #include "chrome/browser/ui/views/side_panel/side_panel.h" -#include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h" #include "chrome/browser/ui/views/side_panel/side_panel_entry.h" #include "chrome/browser/ui/views/side_panel/side_panel_entry_key.h" #include "chrome/browser/ui/views/side_panel/side_panel_enums.h" @@ -964,9 +963,9 @@ Profile* profile = Profile::FromBrowserContext(tab_->GetContents()->GetBrowserContext()); - auto* side_panel_coordinator = - tab_->GetBrowserWindowInterface()->GetFeatures().side_panel_coordinator(); - CHECK(side_panel_coordinator); + auto* const side_panel_ui = + tab_->GetBrowserWindowInterface()->GetFeatures().side_panel_ui(); + CHECK(side_panel_ui); // Create the languages controller. languages_controller_ = @@ -975,11 +974,10 @@ // Setup observer to be notified of side panel opens and closes. SidePanelEntry::PanelType panel_type = GetLensOverlaySidePanelCoordinator()->GetPanelType(); - side_panel_shown_subscription_ = - side_panel_coordinator->RegisterSidePanelShown( - panel_type, - base::BindRepeating(&LensOverlayController::OnSidePanelDidOpen, - weak_factory_.GetWeakPtr())); + side_panel_shown_subscription_ = side_panel_ui->RegisterSidePanelShown( + panel_type, + base::BindRepeating(&LensOverlayController::OnSidePanelDidOpen, + weak_factory_.GetWeakPtr())); if (find_in_page::FindTabHelper* const find_tab_helper = find_in_page::FindTabHelper::FromWebContents(tab_->GetContents())) { @@ -1027,12 +1025,13 @@ // This should be the last thing called in ShowUI, so if something goes wrong // in capturing the screenshot, the state gets cleaned up correctly. - if (side_panel_coordinator->IsSidePanelShowing(panel_type) && + if (side_panel_ui->IsSidePanelShowing(panel_type) && !IsResultsSidePanelShowing()) { // Close the currently opened side panel synchronously if it's not the Lens // panel. Postpone the screenshot for a fixed time to allow reflow. state_ = State::kClosingOpenedSidePanel; - side_panel_coordinator->Close(/*suppress_animations=*/true, panel_type); + side_panel_ui->Close(panel_type, SidePanelEntryHideReason::kSidePanelClosed, + /*suppress_animations=*/true); base::SingleThreadTaskRunner::GetCurrentDefault() ->PostNonNestableDelayedTask( FROM_HERE,
diff --git a/chrome/browser/ui/page_action/page_action_icon_type.cc b/chrome/browser/ui/page_action/page_action_icon_type.cc index 5c6a81b5..77b7072 100644 --- a/chrome/browser/ui/page_action/page_action_icon_type.cc +++ b/chrome/browser/ui/page_action/page_action_icon_type.cc
@@ -71,6 +71,10 @@ } // namespace bool IsPageActionMigrated(PageActionIconType page_action) { + if (page_action == PageActionIconType::kContextualSidePanel) { + return true; + } + const auto* feature_param = GetPageActionsMigrationParam(page_action); if (feature_param == nullptr) { return false;
diff --git a/chrome/browser/ui/page_action/page_action_icon_type.h b/chrome/browser/ui/page_action/page_action_icon_type.h index 91ec354..c8e184c 100644 --- a/chrome/browser/ui/page_action/page_action_icon_type.h +++ b/chrome/browser/ui/page_action/page_action_icon_type.h
@@ -50,7 +50,8 @@ kLensOverlayHomework = 34, kAiMode = 35, kReadingMode = 36, - kMaxValue = kReadingMode, + kContextualSidePanel = 37, + kMaxValue = kContextualSidePanel, }; // LINT.ThenChange(//tools/metrics/histograms/metadata/page/enums.xml:PageActionIconType) @@ -87,6 +88,7 @@ static_assert(static_cast<int>(PageActionIconType::kLensOverlayHomework) == 34); static_assert(static_cast<int>(PageActionIconType::kAiMode) == 35); static_assert(static_cast<int>(PageActionIconType::kReadingMode) == 36); +static_assert(static_cast<int>(PageActionIconType::kContextualSidePanel) == 37); // Returns a bool indicating whether the given page action type has been // migrated to the new framework, which is based on ActionItems instead of
diff --git a/chrome/browser/ui/read_anything/read_anything_side_panel_controller.cc b/chrome/browser/ui/read_anything/read_anything_side_panel_controller.cc index bef7979..5e3f9a47 100644 --- a/chrome/browser/ui/read_anything/read_anything_side_panel_controller.cc +++ b/chrome/browser/ui/read_anything/read_anything_side_panel_controller.cc
@@ -20,9 +20,9 @@ #include "chrome/browser/ui/read_anything/read_anything_side_panel_web_view.h" #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/interaction/browser_elements_views.h" -#include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h" #include "chrome/browser/ui/views/side_panel/side_panel_entry.h" #include "chrome/browser/ui/views/side_panel/side_panel_registry.h" +#include "chrome/browser/ui/views/side_panel/side_panel_ui.h" #include "chrome/browser/ui/views/side_panel/side_panel_web_ui_view.h" #include "chrome/browser/ui/webui/side_panel/read_anything/read_anything_prefs.h" #include "chrome/browser/ui/webui/side_panel/read_anything/read_anything_untrusted_page_handler.h" @@ -254,12 +254,12 @@ if (!tab_->IsActivated()) { return; } - auto* coordinator = - tab_->GetBrowserWindowInterface()->GetFeatures().side_panel_coordinator(); + auto* const side_panel_ui = + tab_->GetBrowserWindowInterface()->GetFeatures().side_panel_ui(); // TODO(https://crbug.com/360163254): BrowserWithTestWindowTest currently does // not create a SidePanelCoordinator. This block will be unnecessary once that // changes. - if (!coordinator) { + if (!side_panel_ui) { // TODO(webium): create a SidePanelCoordinator for WebUIBrowser. // This is a temporary solution to avoid a crash. if (!webui_browser::IsWebUIBrowserEnabled()) { @@ -269,11 +269,13 @@ } SidePanelEntry::Key read_anything_key(SidePanelEntry::Id::kReadAnything); - if (coordinator->IsSidePanelEntryShowing(read_anything_key)) { + if (side_panel_ui->IsSidePanelEntryShowing(read_anything_key)) { SidePanelEntry* const entry = side_panel_registry_->GetEntryForKey(read_anything_key); CHECK(entry); - coordinator->Close(/*suppress_animations=*/true, entry->type()); + side_panel_ui->Close(entry->type(), + SidePanelEntryHideReason::kSidePanelClosed, + /*suppress_animations=*/true); } }
diff --git a/chrome/browser/ui/tabs/BUILD.gn b/chrome/browser/ui/tabs/BUILD.gn index 3438cfe..37660edf 100644 --- a/chrome/browser/ui/tabs/BUILD.gn +++ b/chrome/browser/ui/tabs/BUILD.gn
@@ -547,6 +547,7 @@ "//chrome/browser/ui/toolbar", "//chrome/browser/ui/toolbar/pinned_toolbar", "//chrome/browser/ui/user_education", + "//chrome/browser/ui/views/contextual_tasks", "//chrome/browser/ui/views/intent_picker:intent_picker_page_action", "//chrome/browser/ui/views/interaction", "//chrome/browser/ui/views/location_bar", @@ -561,6 +562,7 @@ "//chrome/browser/web_applications", "//components/browsing_topics", "//components/content_settings/core/browser", + "//components/contextual_tasks/public", "//components/favicon/content", "//components/favicon/core", "//components/fingerprinting_protection_filter/common:features",
diff --git a/chrome/browser/ui/tabs/alert/BUILD.gn b/chrome/browser/ui/tabs/alert/BUILD.gn index 91845d7..b7ce5b36 100644 --- a/chrome/browser/ui/tabs/alert/BUILD.gn +++ b/chrome/browser/ui/tabs/alert/BUILD.gn
@@ -24,6 +24,7 @@ ] deps = [ + "//chrome/browser/actor/ui", "//chrome/browser/media/webrtc", "//chrome/browser/ui/color:color_headers", "//chrome/browser/ui/tabs",
diff --git a/chrome/browser/ui/tabs/alert/tab_alert.h b/chrome/browser/ui/tabs/alert/tab_alert.h index c709b22..00ddcc55 100644 --- a/chrome/browser/ui/tabs/alert/tab_alert.h +++ b/chrome/browser/ui/tabs/alert/tab_alert.h
@@ -26,6 +26,7 @@ kGlicAccessing, // Glic is accessing the tab's contents. kGlicSharing, // The tab's contents are shared with glic. kActorAccessing, // Actor is accessing the tab's contents. + kActorWaitingOnUser, // Actor is waiting on user to respond. }; // Any changes to the TabAlert enum needs to be updated in CompareAlerts as // well.
diff --git a/chrome/browser/ui/tabs/alert/tab_alert_controller.cc b/chrome/browser/ui/tabs/alert/tab_alert_controller.cc index ad2e9662..6d0128ea 100644 --- a/chrome/browser/ui/tabs/alert/tab_alert_controller.cc +++ b/chrome/browser/ui/tabs/alert/tab_alert_controller.cc
@@ -14,7 +14,6 @@ #include "base/containers/to_vector.h" #include "base/functional/bind.h" #include "chrome/browser/actor/ui/actor_ui_tab_controller.h" -#include "chrome/browser/actor/ui/actor_ui_tab_controller_interface.h" #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h" #include "chrome/browser/ui/recently_audible_helper.h" @@ -40,16 +39,17 @@ // Alerts are ordered from highest priority to be shown to lowest priority. static constexpr auto tab_alert_priority = base::MakeFixedFlatMap<TabAlert, int>( - {{TabAlert::kDesktopCapturing, 16}, - {TabAlert::kTabCapturing, 15}, - {TabAlert::kMediaRecording, 14}, - {TabAlert::kAudioRecording, 13}, - {TabAlert::kVideoRecording, 12}, - {TabAlert::kBluetoothConnected, 11}, - {TabAlert::kBluetoothScanActive, 10}, - {TabAlert::kUsbConnected, 9}, - {TabAlert::kHidConnected, 8}, - {TabAlert::kSerialConnected, 7}, + {{TabAlert::kDesktopCapturing, 17}, + {TabAlert::kTabCapturing, 16}, + {TabAlert::kMediaRecording, 15}, + {TabAlert::kAudioRecording, 14}, + {TabAlert::kVideoRecording, 13}, + {TabAlert::kBluetoothConnected, 12}, + {TabAlert::kBluetoothScanActive, 11}, + {TabAlert::kUsbConnected, 10}, + {TabAlert::kHidConnected, 9}, + {TabAlert::kSerialConnected, 8}, + {TabAlert::kActorWaitingOnUser, 7}, {TabAlert::kActorAccessing, 6}, {TabAlert::kGlicAccessing, 5}, {TabAlert::kGlicSharing, 4}, @@ -161,9 +161,10 @@ case tabs::TabAlert::kVrPresentingInHeadset: return l10n_util::GetStringUTF16( IDS_TOOLTIP_TAB_ALERT_STATE_VR_PRESENTING); - // TODO(crbug.com/422538779) Create new resources for ACTOR_ACCESSING of + // TODO(crbug.com/461457730) Create new resources for ACTOR_ACCESSING of // relying on GLIC_ACCESSING resources below. case tabs::TabAlert::kActorAccessing: + case tabs::TabAlert::kActorWaitingOnUser: case tabs::TabAlert::kGlicAccessing: #if BUILDFLAG(ENABLE_GLIC) return l10n_util::GetStringUTF16( @@ -323,8 +324,22 @@ } #endif // BUILDFLAG(ENABLE_GLIC) -void TabAlertController::OnActorTabIndicatorStateChanged(bool is_accessing) { - UpdateAlertState(TabAlert::kActorAccessing, is_accessing); +void TabAlertController::OnActorTabIndicatorStateChanged( + actor::ui::TabIndicatorStatus tab_indicator_status) { + switch (tab_indicator_status) { + case actor::ui::TabIndicatorStatus::kNone: + UpdateAlertState(TabAlert::kActorWaitingOnUser, false); + UpdateAlertState(TabAlert::kActorAccessing, false); + break; + case actor::ui::TabIndicatorStatus::kDynamic: + UpdateAlertState(TabAlert::kActorWaitingOnUser, false); + UpdateAlertState(TabAlert::kActorAccessing, true); + break; + case actor::ui::TabIndicatorStatus::kStatic: + UpdateAlertState(TabAlert::kActorWaitingOnUser, true); + UpdateAlertState(TabAlert::kActorAccessing, false); + break; + } } void TabAlertController::OnRecentlyAudibleStateChanged(bool was_audible) {
diff --git a/chrome/browser/ui/tabs/alert/tab_alert_controller.h b/chrome/browser/ui/tabs/alert/tab_alert_controller.h index 79e1313..381401d 100644 --- a/chrome/browser/ui/tabs/alert/tab_alert_controller.h +++ b/chrome/browser/ui/tabs/alert/tab_alert_controller.h
@@ -23,6 +23,10 @@ class WebContents; } // namespace content +namespace actor::ui { +enum class TabIndicatorStatus; +} // namespace actor::ui + namespace tabs { class TabInterface; @@ -97,7 +101,8 @@ void OnGlicAccessingStateChange(bool is_accessing); #endif // BUILDFLAG(ENABLE_GLIC) - void OnActorTabIndicatorStateChanged(bool is_accessing); + void OnActorTabIndicatorStateChanged( + actor::ui::TabIndicatorStatus tab_indicator_state); void OnRecentlyAudibleStateChanged(bool was_audible); // Adds `alert` to the set of already active alerts for this tab if it isn't
diff --git a/chrome/browser/ui/tabs/alert/tab_alert_icon.cc b/chrome/browser/ui/tabs/alert/tab_alert_icon.cc index 238dc99..a08f5b1f 100644 --- a/chrome/browser/ui/tabs/alert/tab_alert_icon.cc +++ b/chrome/browser/ui/tabs/alert/tab_alert_icon.cc
@@ -33,6 +33,7 @@ case tabs::TabAlert::kPipPlaying: case tabs::TabAlert::kGlicAccessing: case tabs::TabAlert::kGlicSharing: + case tabs::TabAlert::kActorWaitingOnUser: case tabs::TabAlert::kActorAccessing: group = 1; break; @@ -93,6 +94,7 @@ return vector_icons::kPictureInPictureAltIcon; case TabAlert::kVrPresentingInHeadset: return vector_icons::kCardboardIcon; + case TabAlert::kActorWaitingOnUser: case TabAlert::kActorAccessing: case TabAlert::kGlicAccessing: case TabAlert::kGlicSharing:
diff --git a/chrome/browser/ui/tabs/public/tab_features.h b/chrome/browser/ui/tabs/public/tab_features.h index 339b8869..dbf1f05 100644 --- a/chrome/browser/ui/tabs/public/tab_features.h +++ b/chrome/browser/ui/tabs/public/tab_features.h
@@ -15,6 +15,7 @@ class AskBeforeHttpDialogController; class CollaborationMessagingPageActionController; +class ContextualTasksPageActionController; class CookieControlsPageActionController; class FileSystemAccessPageActionController; class FromGWSNavigationAndKeepAliveRequestObserver; @@ -416,6 +417,11 @@ std::unique_ptr<tab_groups::CollaborationMessagingTabData> collaboration_messaging_tab_data_; + // Controller to trigger when the contextual task page action chip to + // show/hide. + std::unique_ptr<ContextualTasksPageActionController> + contextual_tasks_page_action_controller_; + // Responsible for managing the "Show Collaboration History" page action. std::unique_ptr<CollaborationMessagingPageActionController> collaboration_messaging_page_action_controller_;
diff --git a/chrome/browser/ui/tabs/tab_features.cc b/chrome/browser/ui/tabs/tab_features.cc index 91d0acfe..ffd0d0e 100644 --- a/chrome/browser/ui/tabs/tab_features.cc +++ b/chrome/browser/ui/tabs/tab_features.cc
@@ -68,6 +68,7 @@ #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/views/commerce/discounts_page_action_view_controller.h" #include "chrome/browser/ui/views/commerce/price_insights_page_action_view_controller.h" +#include "chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.h" #include "chrome/browser/ui/views/file_system_access/file_system_access_page_action_controller.h" #include "chrome/browser/ui/views/intent_picker/intent_picker_view_page_action_controller.h" #include "chrome/browser/ui/views/location_bar/cookie_controls/cookie_controls_page_action_controller.h" @@ -83,6 +84,7 @@ #include "chrome/browser/ui/views/zoom/zoom_view_controller.h" #include "chrome/browser/ui/web_applications/pwa_install_page_action.h" #include "chrome/browser/ui/webui/webui_embedding_context.h" +#include "components/contextual_tasks/public/features.h" #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) #include "chrome/browser/wallet/chrome_walletable_pass_client.h" @@ -232,6 +234,14 @@ .CreateInstance<LensOverlayHomeworkPageActionController>( tab, tab, *profile, *page_action_controller_); } + + if (base::FeatureList::IsEnabled(contextual_tasks::kContextualTasks) && + (contextual_tasks::kShowEntryPoint.Get() == + contextual_tasks::EntryPointOption::kPageActionRevisit)) { + contextual_tasks_page_action_controller_ = + GetUserDataFactory() + .CreateInstance<ContextualTasksPageActionController>(tab, &tab); + } } // Features that are only enabled for normal browser windows. By default most
diff --git a/chrome/browser/ui/tabs/tab_strip_api/converters/tab_converters.cc b/chrome/browser/ui/tabs/tab_strip_api/converters/tab_converters.cc index 81fee6f7..ac00ac5 100644 --- a/chrome/browser/ui/tabs/tab_strip_api/converters/tab_converters.cc +++ b/chrome/browser/ui/tabs/tab_strip_api/converters/tab_converters.cc
@@ -69,6 +69,8 @@ return mojom::AlertState::kGlicSharing; case tabs::TabAlert::kActorAccessing: return mojom::AlertState::kActorAccessing; + case tabs::TabAlert::kActorWaitingOnUser: + return mojom::AlertState::kActorWaitingOnUser; } }
diff --git a/chrome/browser/ui/views/autofill/payments/iban_bubble_view_uitest.cc b/chrome/browser/ui/views/autofill/payments/iban_bubble_view_interactive_uitest.cc similarity index 100% rename from chrome/browser/ui/views/autofill/payments/iban_bubble_view_uitest.cc rename to chrome/browser/ui/views/autofill/payments/iban_bubble_view_interactive_uitest.cc
diff --git a/chrome/browser/ui/views/contextual_tasks/BUILD.gn b/chrome/browser/ui/views/contextual_tasks/BUILD.gn new file mode 100644 index 0000000..f38d06419 --- /dev/null +++ b/chrome/browser/ui/views/contextual_tasks/BUILD.gn
@@ -0,0 +1,40 @@ +# 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. + +assert(is_win || is_mac || is_linux || is_chromeos) + +source_set("contextual_tasks") { + sources = [ "contextual_tasks_page_action_controller.h" ] + public_deps = [ + "//chrome/browser/ui/views/page_action", + "//components/contextual_tasks/public", + ] +} + +source_set("impl") { + sources = [ "contextual_tasks_page_action_controller.cc" ] + + deps = [ + ":contextual_tasks", + "//chrome/browser/contextual_tasks", + "//chrome/browser/ui/browser_window", + "//chrome/browser/ui/views/side_panel", + "//components/contextual_tasks/public:feature_list", + "//components/vector_icons", + ] +} + +source_set("interactive_ui_tests") { + testonly = true + defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] + sources = [ "contextual_tasks_page_action_controller_interactive_ui_test.cc" ] + deps = [ + ":contextual_tasks", + "//chrome/browser/contextual_tasks", + "//chrome/browser/ui:ui_features", + "//chrome/test:test_support", + "//components/contextual_tasks/public", + "//testing/gtest", + ] +}
diff --git a/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.cc b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.cc new file mode 100644 index 0000000..5068fae --- /dev/null +++ b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.cc
@@ -0,0 +1,79 @@ +// 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/contextual_tasks/contextual_tasks_page_action_controller.h" + +#include "chrome/browser/contextual_tasks/contextual_tasks_context_controller.h" +#include "chrome/browser/contextual_tasks/contextual_tasks_context_controller_factory.h" +#include "chrome/browser/ui/actions/chrome_action_id.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/tabs/public/tab_features.h" +#include "chrome/browser/ui/views/page_action/page_action_controller.h" +#include "chrome/browser/ui/views/side_panel/side_panel_entry_id.h" +#include "chrome/browser/ui/views/side_panel/side_panel_entry_key.h" +#include "chrome/browser/ui/views/side_panel/side_panel_enums.h" +#include "chrome/browser/ui/views/side_panel/side_panel_ui.h" +#include "components/contextual_tasks/public/contextual_tasks_service.h" +#include "components/sessions/content/session_tab_helper.h" +#include "components/sessions/core/session_id.h" +#include "components/tabs/public/tab_interface.h" + +DEFINE_USER_DATA(ContextualTasksPageActionController); + +ContextualTasksPageActionController::ContextualTasksPageActionController( + tabs::TabInterface* tab_interface) + : tab_interface_(tab_interface), + scoped_unowned_user_data_(tab_interface->GetUnownedUserDataHost(), + *this) { + Profile* const profile = + tab_interface->GetBrowserWindowInterface()->GetProfile(); + contextual_tasks::ContextualTasksContextController* const context_controller = + contextual_tasks::ContextualTasksContextControllerFactory::GetForProfile( + profile); + contextual_task_observation_.Observe(context_controller); +} + +ContextualTasksPageActionController::~ContextualTasksPageActionController() = + default; + +// static: +ContextualTasksPageActionController* ContextualTasksPageActionController::From( + tabs::TabInterface* tab_interface) { + return Get(tab_interface->GetUnownedUserDataHost()); +} + +void ContextualTasksPageActionController::InvokePageAction() { + tab_interface_->GetBrowserWindowInterface() + ->GetFeatures() + .side_panel_ui() + ->Toggle(SidePanelEntryKey(SidePanelEntryId::kContextualTasks), + SidePanelOpenTrigger::kAppMenu); +} + +void ContextualTasksPageActionController::OnTaskAdded( + const contextual_tasks::ContextualTask& task, + contextual_tasks::ContextualTasksService::TriggerSource source) { + tab_interface_->GetTabFeatures()->page_action_controller()->Show( + kActionContextualPanelPageActionChip); +} + +void ContextualTasksPageActionController::OnTaskUpdated( + const contextual_tasks::ContextualTask& task, + contextual_tasks::ContextualTasksService::TriggerSource source) { + OnTaskAdded(task, source); +} + +void ContextualTasksPageActionController::OnTaskRemoved( + const base::Uuid& task_id, + contextual_tasks::ContextualTasksService::TriggerSource source) { + tab_interface_->GetTabFeatures()->page_action_controller()->Hide( + kActionContextualPanelPageActionChip); +} + +void ContextualTasksPageActionController::OnWillBeDestroyed() { + tab_interface_->GetTabFeatures()->page_action_controller()->Hide( + kActionContextualPanelPageActionChip); + contextual_task_observation_.Reset(); +}
diff --git a/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.h b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.h new file mode 100644 index 0000000..7c4741e --- /dev/null +++ b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.h
@@ -0,0 +1,53 @@ +// 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_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_PAGE_ACTION_CONTROLLER_H_ +#define CHROME_BROWSER_UI_VIEWS_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_PAGE_ACTION_CONTROLLER_H_ + +#include "base/memory/raw_ptr.h" +#include "base/scoped_observation.h" +#include "components/contextual_tasks/public/contextual_tasks_service.h" +#include "ui/base/unowned_user_data/scoped_unowned_user_data.h" + +namespace tabs { +class TabInterface; +} // namespace tabs + +// Controller used to trigger the contextual task page action chip to show/hide. +class ContextualTasksPageActionController + : public contextual_tasks::ContextualTasksService::Observer { + public: + DECLARE_USER_DATA(ContextualTasksPageActionController); + explicit ContextualTasksPageActionController( + tabs::TabInterface* tab_interface); + ~ContextualTasksPageActionController() override; + + static ContextualTasksPageActionController* From( + tabs::TabInterface* tab_interface); + + void InvokePageAction(); + + void OnTaskAdded( + const contextual_tasks::ContextualTask& task, + contextual_tasks::ContextualTasksService::TriggerSource source) override; + void OnTaskUpdated( + const contextual_tasks::ContextualTask& task, + contextual_tasks::ContextualTasksService::TriggerSource source) override; + void OnTaskRemoved( + const base::Uuid& task_id, + contextual_tasks::ContextualTasksService::TriggerSource source) override; + void OnWillBeDestroyed() override; + + private: + raw_ptr<tabs::TabInterface> tab_interface_ = nullptr; + + ui::ScopedUnownedUserData<ContextualTasksPageActionController> + scoped_unowned_user_data_; + + base::ScopedObservation<contextual_tasks::ContextualTasksService, + contextual_tasks::ContextualTasksService::Observer> + contextual_task_observation_{this}; +}; + +#endif // CHROME_BROWSER_UI_VIEWS_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_PAGE_ACTION_CONTROLLER_H_
diff --git a/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller_interactive_ui_test.cc b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller_interactive_ui_test.cc new file mode 100644 index 0000000..6dea1ea --- /dev/null +++ b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller_interactive_ui_test.cc
@@ -0,0 +1,92 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/contextual_tasks/contextual_tasks_context_controller.h" +#include "chrome/browser/contextual_tasks/contextual_tasks_context_controller_factory.h" +#include "chrome/browser/ui/browser_element_identifiers.h" +#include "chrome/browser/ui/ui_features.h" +#include "chrome/common/webui_url_constants.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/interaction/interactive_browser_test.h" +#include "components/contextual_tasks/public/contextual_task.h" +#include "components/contextual_tasks/public/features.h" +#include "components/sessions/content/session_tab_helper.h" +#include "content/public/test/browser_test.h" +#include "net/dns/mock_host_resolver.h" +#include "net/test/embedded_test_server/embedded_test_server.h" +#include "ui/base/interaction/element_identifier.h" + +namespace { +DEFINE_LOCAL_ELEMENT_IDENTIFIER_VALUE(kFirstTab); +} // namespace + +class ContextualTasksPageActionControllerInteractiveTest + : public InteractiveBrowserTest { + public: + void SetUp() override { + scoped_feature_list_.InitWithFeaturesAndParameters( + {{features::kPageActionsMigration, {}}, + {contextual_tasks::kContextualTasks, + {{"ContextualTasksEntryPoint", "page-action-revisit"}}}, + {features::kTabbedBrowserUseNewLayout, {}}}, + {}); + InteractiveBrowserTest::SetUp(); + } + void SetUpOnMainThread() override { + InteractiveBrowserTest::SetUpOnMainThread(); + host_resolver()->AddRule("*", "127.0.0.1"); + ASSERT_TRUE(embedded_test_server()->Start()); + } + + GURL GetTestURL() { + return embedded_test_server()->GetURL("example.com", "/title1.html"); + } + + contextual_tasks::ContextualTasksContextController* + GetContextualTasksController() { + return contextual_tasks::ContextualTasksContextControllerFactory:: + GetForProfile(browser()->profile()); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(ContextualTasksPageActionControllerInteractiveTest, + ShowContextualTaskPageAction) { + RunTestSequence(InstrumentTab(kFirstTab), + EnsureNotPresent(kContextualTasksPageActionElementId), + NavigateWebContents(kFirstTab, GetTestURL()), + Do([&] { GetContextualTasksController()->CreateTask(); }), + WaitForShow(kContextualTasksPageActionElementId)); +} + +IN_PROC_BROWSER_TEST_F(ContextualTasksPageActionControllerInteractiveTest, + HideContextualTaskPageAction) { + contextual_tasks::ContextualTask task = + GetContextualTasksController()->CreateTask(); + RunTestSequence( + InstrumentTab(kFirstTab), + WaitForShow(kContextualTasksPageActionElementId), + Do([&] { GetContextualTasksController()->DeleteTask(task.GetTaskId()); }), + WaitForHide(kContextualTasksPageActionElementId)); +} + +IN_PROC_BROWSER_TEST_F(ContextualTasksPageActionControllerInteractiveTest, + ToggleContextualTasksSidePanel) { + contextual_tasks::ContextualTask task = + GetContextualTasksController()->CreateTask(); + RunTestSequence( + InstrumentTab(kFirstTab), + NavigateWebContents(kFirstTab, embedded_test_server()->GetURL( + "example.com", "/title1.html")), + WaitForShow(kContextualTasksPageActionElementId), + // Pressing the page action should open the toolbar height side panel + PressButton(kContextualTasksPageActionElementId), + WaitForShow(kSidePanelElementId), + // // Pressing the button again should close the toolbar height side panel + PressButton(kContextualTasksPageActionElementId), + WaitForHide(kSidePanelElementId)); +}
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc index 4c5c5f3..524770063e 100644 --- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc +++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
@@ -46,6 +46,7 @@ #include "ui/base/mojom/ui_base_types.mojom-shared.h" #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/geometry/insets.h" +#include "ui/gfx/image/image_skia.h" #include "ui/views/accessibility/view_accessibility.h" #include "ui/views/border.h" #include "ui/views/bubble/bubble_frame_view.h" @@ -188,12 +189,6 @@ BEGIN_METADATA(TitleLabelWrapper) END_METADATA -void AddResourceIcon(const gfx::ImageSkia* skia_image, void* data) { - views::View* parent = static_cast<views::View*>(data); - parent->AddChildView( - std::make_unique<RatingStar>(ui::ImageModel::FromImageSkia(*skia_image))); -} - void ShowExtensionInstallDialogImpl( std::unique_ptr<ExtensionInstallPromptShowParams> show_params, ExtensionInstallPrompt::DoneCallback done_callback, @@ -502,7 +497,12 @@ provider->GetDistanceMetric(views::DISTANCE_RELATED_LABEL_HORIZONTAL))); auto rating = std::make_unique<RatingsView>(prompt_->average_rating(), prompt_->rating_count()); - prompt_->AppendRatingStars(AddResourceIcon, rating.get()); + std::vector<const gfx::ImageSkia*> rating_stars = prompt_->GetRatingStars(); + for (auto star : rating_stars) { + rating->AddChildView( + std::make_unique<RatingStar>(ui::ImageModel::FromImageSkia(*star))); + } + rating_container->AddChildView(std::move(rating)); auto rating_count = std::make_unique<RatingLabel>( prompt_->GetRatingCount(), views::style::CONTEXT_DIALOG_BODY_TEXT);
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index a2232761..783d865 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -2534,8 +2534,14 @@ window_management_permission_granted_ = status == blink::mojom::PermissionStatus::GRANTED; } + + if (borderless_mode_enabled && browser()->app_controller() && + !browser()->app_controller()->UrlMatchesBorderlessPattern( + web_contents->GetVisibleURL())) { + borderless_mode_enabled = false; + } } else { - // Defaults to the value of borderless_mode_enabled if web contents are + // Defaults to the value of `borderless_mode_enabled` if web contents are // null. These get overridden when the app is launched and its web contents // are ready. window_management_permission_granted_ = borderless_mode_enabled; @@ -4011,6 +4017,7 @@ case tabs::TabAlert::kVrPresentingInHeadset: return IDS_TAB_AX_LABEL_VR_PRESENTING; case tabs::TabAlert::kActorAccessing: + case tabs::TabAlert::kActorWaitingOnUser: case tabs::TabAlert::kGlicAccessing: #if BUILDFLAG(ENABLE_GLIC) return IDS_TAB_AX_LABEL_GLIC_ACCESSING;
diff --git a/chrome/browser/ui/views/frame/browser_view_ash.cc b/chrome/browser/ui/views/frame/browser_view_ash.cc index 2c78c20f..9f37da88 100644 --- a/chrome/browser/ui/views/frame/browser_view_ash.cc +++ b/chrome/browser/ui/views/frame/browser_view_ash.cc
@@ -21,6 +21,10 @@ #include "ui/gfx/geometry/rounded_corners_f.h" #include "ui/views/controls/webview/webview.h" +#if BUILDFLAG(ENABLE_GLIC) +#include "chrome/browser/glic/browser_ui/context_sharing_border_view.h" +#endif // BUILDFLAG(ENABLE_GLIC) + namespace { void SetRoundedCornersOnHost(views::NativeViewHost* host, @@ -196,6 +200,13 @@ contents_webview->SetBackgroundRadii(contents_webview_radii); } +#if BUILDFLAG(ENABLE_GLIC) + if (auto* glic_border = GetActiveContentsContainerView()->glic_border_view(); + glic_border) { + glic_border->SetRoundedCorners(contents_webview_radii); + } +#endif // BUILDFLAG(ENABLE_GLIC) + const gfx::RoundedCornersF contents_scrim_radii( round_content_webview_top_corner ? window_radii.upper_left() : 0, round_content_webview_top_corner ? window_radii.upper_right() : 0,
diff --git a/chrome/browser/ui/views/frame/browser_widget.cc b/chrome/browser/ui/views/frame/browser_widget.cc index 78e8787..67e932d5 100644 --- a/chrome/browser/ui/views/frame/browser_widget.cc +++ b/chrome/browser/ui/views/frame/browser_widget.cc
@@ -483,7 +483,11 @@ // user_color. // Device theme retains the user_color from `Widget`. if (!theme_service->UsingDeviceTheme()) { - if (theme_service->UsingAutogeneratedTheme()) { + if (theme_service->UsingPolicyTheme()) { + // For policy themes, use the policy color directly since it's not stored + // in the autogenerated theme preference. + key.user_color = theme_service->GetPolicyThemeColor(); + } else if (theme_service->UsingAutogeneratedTheme()) { key.user_color = theme_service->GetAutogeneratedThemeColor(); } else if (auto user_color = theme_service->GetUserColor()) { key.user_color = user_color;
diff --git a/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.cc b/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.cc index 8a41f298..8af0962 100644 --- a/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.cc +++ b/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.cc
@@ -902,10 +902,6 @@ layout.GetBoundsFor(views().toolbar, browser_view)) { return toolbar_rect->bottom() - kConstrainedWindowOverlap; } - if (const auto webapp_toolbar_rect = - layout.GetBoundsFor(views().web_app_frame_toolbar, browser_view)) { - return webapp_toolbar_rect->bottom() - kConstrainedWindowOverlap; - } return kConstrainedWindowOverlap; } @@ -918,20 +914,6 @@ return browser_view->height(); } -views::Span BrowserViewLayoutImpl::GetDialogHorizontalTarget( - const ProposedLayout& layout) const { - const auto* const browser_view = views().browser_view.get(); - views::Span horizontal; - if (const auto contents_rect = - layout.GetBoundsFor(views().contents_container, browser_view)) { - horizontal.set_start(contents_rect->x()); - horizontal.set_length(contents_rect->width()); - } else { - horizontal.set_end(browser_view->width()); - } - return horizontal; -} - gfx::Point BrowserViewLayoutImpl::GetDialogPosition( const gfx::Size& dialog_size) const { const auto params = delegate().GetBrowserLayoutParams(); @@ -939,9 +921,20 @@ return gfx::Point(); } const ProposedLayout layout = CalculateProposedLayout(params); - const auto horizontal = GetDialogHorizontalTarget(layout); - return gfx::Point(horizontal.start() + horizontal.length() / 2, - GetDialogTop(layout)); + + // Calculate the dialog bounds in browser view space. + const int browser_width = params.visual_client_area.width(); + const int dialog_x = + params.visual_client_area.x() + (browser_width - dialog_size.width()) / 2; + const int dialog_y = GetDialogTop(layout); + gfx::Rect dialog_rect(dialog_x, dialog_y, dialog_size.width(), + dialog_size.height()); + + // Convert to widget coordinates. + dialog_rect = views().browser_view->ConvertRectToWidget(dialog_rect); + + // TODO: consider whether this should change in RTL? + return gfx::Point(dialog_rect.origin()); } gfx::Size BrowserViewLayoutImpl::GetMaximumDialogSize() const { @@ -950,8 +943,10 @@ return gfx::Size(); } const ProposedLayout layout = CalculateProposedLayout(params); - const auto horizontal = GetDialogHorizontalTarget(layout); + + // This computation is irrespective of coordinate system (all coordinates + // happen to be in browser view space). const int top = GetDialogTop(layout); const int bottom = GetDialogBottom(layout); - return gfx::Size(horizontal.length(), bottom - top); + return gfx::Size(params.visual_client_area.width(), bottom - top); }
diff --git a/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.h b/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.h index 42be525d..924dc13 100644 --- a/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.h +++ b/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_LAYOUT_BROWSER_VIEW_LAYOUT_IMPL_H_ #define CHROME_BROWSER_UI_VIEWS_FRAME_LAYOUT_BROWSER_VIEW_LAYOUT_IMPL_H_ +#include <optional> #include <utility> #include "chrome/browser/ui/views/frame/layout/browser_view_layout.h" @@ -74,12 +75,15 @@ }; TopSeparatorType GetTopSeparatorType() const; + // Gets the top of the dialog anchoring area, in local coordinates. + int GetDialogTop(const ProposedLayout& layout) const; + + // Gets the bottom of the dialog anchoring area, in local coordinates. + int GetDialogBottom(const ProposedLayout& layout) const; + // BrowserViewLayout overrides: gfx::Point GetDialogPosition(const gfx::Size& dialog_size) const override; gfx::Size GetMaximumDialogSize() const override; - int GetDialogTop(const ProposedLayout& layout) const; - int GetDialogBottom(const ProposedLayout& layout) const; - views::Span GetDialogHorizontalTarget(const ProposedLayout& layout) const; }; #endif // CHROME_BROWSER_UI_VIEWS_FRAME_LAYOUT_BROWSER_VIEW_LAYOUT_IMPL_H_
diff --git a/chrome/browser/ui/views/location_bar/find_bar_interactive_ui_tests.cc b/chrome/browser/ui/views/location_bar/find_bar_interactive_uitest.cc similarity index 100% rename from chrome/browser/ui/views/location_bar/find_bar_interactive_ui_tests.cc rename to chrome/browser/ui/views/location_bar/find_bar_interactive_uitest.cc
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.cc b/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.cc index 40460d2..11d3ae2 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.cc
@@ -23,6 +23,8 @@ #include "components/input/native_web_keyboard_event.h" #include "components/zoom/zoom_controller.h" #include "content/public/browser/render_widget_host_view.h" +#include "third_party/blink/public/common/input/web_gesture_event.h" +#include "third_party/blink/public/common/input/web_input_event.h" #include "ui/base/metadata/metadata_impl_macros.h" #include "ui/base/mojom/menu_source_type.mojom.h" #include "ui/gfx/geometry/rounded_corners_f.h" @@ -139,5 +141,22 @@ ->set_omnibox_controller(controller_); } +bool OmniboxPopupWebUIBaseContent::PreHandleGestureEvent( + content::WebContents* source, + const blink::WebGestureEvent& event) { + // Block gestures that will zoom on Mac devices (i.e. pinch to zoom + // and double tap to zoom) +#if BUILDFLAG(IS_MAC) + if (blink::WebInputEvent::IsPinchGestureEventType(event.GetType())) { + return true; + } + + if (event.GetType() == blink::WebInputEvent::Type::kGestureDoubleTap) { + return true; + } +#endif + return false; +} + BEGIN_METADATA(OmniboxPopupWebUIBaseContent) END_METADATA
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.h b/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.h index dad48cc..a0d15a766 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.h +++ b/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.h
@@ -62,6 +62,8 @@ const gfx::Size& new_size) override; bool HandleKeyboardEvent(content::WebContents* source, const input::NativeWebKeyboardEvent& event) override; + bool PreHandleGestureEvent(content::WebContents* source, + const blink::WebGestureEvent& event) override; protected: // Set up the WebUI content page and hook up the Omnibox handlers.
diff --git a/chrome/browser/ui/views/page_action/action_ids.h b/chrome/browser/ui/views/page_action/action_ids.h index 4e2e5b0..cc3636a1 100644 --- a/chrome/browser/ui/views/page_action/action_ids.h +++ b/chrome/browser/ui/views/page_action/action_ids.h
@@ -15,7 +15,7 @@ // All ActionIds associated with a page action. // For now, the order of the page actions will be based on their position in // the array. -inline constexpr std::array<actions::ActionId, 22> kActionIds = { +inline constexpr std::array<actions::ActionId, 23> kActionIds = { kActionAiMode, kActionSidePanelShowLensOverlayResults, kActionLensOverlayHomework, @@ -38,6 +38,7 @@ kActionVirtualCardEnroll, kActionFilledCardInformation, kActionShowPaymentsBubbleOrPage, + kActionContextualPanelPageActionChip, }; static_assert(kActionIds[0] == kActionAiMode,
diff --git a/chrome/browser/ui/views/page_action/page_action_controller.h b/chrome/browser/ui/views/page_action/page_action_controller.h index 7da5a0f1..16f7799 100644 --- a/chrome/browser/ui/views/page_action/page_action_controller.h +++ b/chrome/browser/ui/views/page_action/page_action_controller.h
@@ -47,6 +47,14 @@ class PageActionMetricsRecorderFactory; class PageActionMetricsRecorderInterface; +// Indicates the source used to color the page action icon. +enum class PageActionColorSource { + // The foreground's color. + kForeground, + // A blend between the focus border color and the background. + kCascadingAccent, +}; + // Configuration for a page action's suggestion chip. struct SuggestionChipConfig { // Whether the chip should have expand/collapse animations.
diff --git a/chrome/browser/ui/views/page_action/page_action_icon_controller.cc b/chrome/browser/ui/views/page_action/page_action_icon_controller.cc index c1eb8cf..0bca892 100644 --- a/chrome/browser/ui/views/page_action/page_action_icon_controller.cc +++ b/chrome/browser/ui/views/page_action/page_action_icon_controller.cc
@@ -288,6 +288,7 @@ params.page_action_icon_delegate)); break; case PageActionIconType::kReadingMode: + case PageActionIconType::kContextualSidePanel: // Do nothing as this action was added after the migration. break; }
diff --git a/chrome/browser/ui/views/page_action/page_action_model.cc b/chrome/browser/ui/views/page_action/page_action_model.cc index a4c1c26..da790df2 100644 --- a/chrome/browser/ui/views/page_action/page_action_model.cc +++ b/chrome/browser/ui/views/page_action/page_action_model.cc
@@ -165,7 +165,8 @@ } PageActionColorSource PageActionModel::GetColorSource() const { - return color_source_; + return color_source_.has_value() ? *color_source_ + : PageActionColorSource::kForeground; } void PageActionModel::SetOverrideText(
diff --git a/chrome/browser/ui/views/page_action/page_action_model.h b/chrome/browser/ui/views/page_action/page_action_model.h index 73ecffbb..d78b317 100644 --- a/chrome/browser/ui/views/page_action/page_action_model.h +++ b/chrome/browser/ui/views/page_action/page_action_model.h
@@ -24,14 +24,7 @@ struct SuggestionChipConfig; class PageActionController; class PageActionModelObserver; - -// Indicates the source used to color the page action icon. -enum class PageActionColorSource { - // The foreground's color. - kForeground, - // A blend between the focus border color and the background. - kCascadingAccent, -}; +enum class PageActionColorSource; // Interface to PageActionModel, used for either the concrete implementation // or a mock for testing. @@ -214,7 +207,7 @@ ui::ImageModel action_item_image_; // When set, it will always take precedence over `action_item_image_`. std::optional<ui::ImageModel> override_image_; - PageActionColorSource color_source_ = PageActionColorSource::kForeground; + std::optional<PageActionColorSource> color_source_; // When set, it will always take precedence over `text_`. std::optional<std::u16string> override_text_;
diff --git a/chrome/browser/ui/views/page_action/page_action_properties_provider.cc b/chrome/browser/ui/views/page_action/page_action_properties_provider.cc index e8b9e10..360a390 100644 --- a/chrome/browser/ui/views/page_action/page_action_properties_provider.cc +++ b/chrome/browser/ui/views/page_action/page_action_properties_provider.cc
@@ -200,6 +200,14 @@ .type = PageActionIconType::kSaveCard, }, }, + { + kActionContextualPanelPageActionChip, + { + .histogram_name = "ContextualSidePanel", + .type = PageActionIconType::kContextualSidePanel, + .element_identifier = kContextualTasksPageActionElementId, + }, + }, }); constexpr bool CheckIgnoreFlagUsage() {
diff --git a/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc b/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_uitest.cc similarity index 100% rename from chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc rename to chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_uitest.cc
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button_browsertest.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button_browsertest.cc index c34b5edd..e2cba72 100644 --- a/chrome/browser/ui/views/profiles/avatar_toolbar_button_browsertest.cc +++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button_browsertest.cc
@@ -50,6 +50,8 @@ #include "chrome/browser/ui/views/profiles/profile_menu_coordinator.h" #include "chrome/browser/ui/views/profiles/profile_menu_view_base.h" #include "chrome/browser/ui/views/toolbar/toolbar_view.h" +#include "chrome/browser/webauthn/passkey_unlock_manager.h" +#include "chrome/browser/webauthn/passkey_unlock_manager_factory.h" #include "chrome/common/pref_names.h" #include "chrome/common/webui_url_constants.h" #include "chrome/grit/branded_strings.h" @@ -86,9 +88,11 @@ #include "components/user_education/common/user_education_features.h" #include "components/user_education/views/help_bubble_view.h" #include "content/public/browser/browser_context.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_test.h" #include "content/public/test/test_launcher.h" #include "content/public/test/test_utils.h" +#include "device/fido/features.h" #include "google_apis/gaia/core_account_id.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkColor.h" @@ -3308,3 +3312,75 @@ EXPECT_FALSE(WillShowPromo()); } #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) + +#if !BUILDFLAG(IS_CHROMEOS) +class MockPasskeyUnlockManager : public webauthn::PasskeyUnlockManager { + public: + MOCK_METHOD(bool, ShouldDisplayErrorUi, (), (const, override)); +}; + +class AvatarToolbarButtonPasskeyUnlockErrorBrowserTest + : public AvatarToolbarButtonBrowserTest { + public: + AvatarToolbarButtonPasskeyUnlockErrorBrowserTest() { + scoped_feature_list_.InitWithFeatures( + /*enabled_features=*/{device::kPasskeyUnlockErrorUi, + device::kPasskeyUnlockManager, + device::kWebAuthnOpportunisticRetrieval}, + /*disabled_features=*/{}); + } + + void SetUpBrowserContextKeyedServices( + content::BrowserContext* context) override { + AvatarToolbarButtonBrowserTest::SetUpBrowserContextKeyedServices(context); + webauthn::PasskeyUnlockManagerFactory::GetInstance() + ->SetTestingFactoryAndUse( + context, base::BindRepeating( + &AvatarToolbarButtonPasskeyUnlockErrorBrowserTest:: + CreateMockPasskeyUnlockManager, + base::Unretained(this))); + } + + void TearDownOnMainThread() override { + mock_passkey_unlock_manager_ = nullptr; + AvatarToolbarButtonBrowserTest::TearDownOnMainThread(); + } + + protected: + MockPasskeyUnlockManager* passkey_unlock_manager() { + return mock_passkey_unlock_manager_; + } + + private: + std::unique_ptr<KeyedService> CreateMockPasskeyUnlockManager( + content::BrowserContext* context) { + auto passkey_unlock_manager = + std::make_unique<testing::NiceMock<MockPasskeyUnlockManager>>(); + mock_passkey_unlock_manager_ = passkey_unlock_manager.get(); + ON_CALL(*passkey_unlock_manager, ShouldDisplayErrorUi()) + .WillByDefault(testing::Return(true)); + return passkey_unlock_manager; + } + + raw_ptr<MockPasskeyUnlockManager> mock_passkey_unlock_manager_ = nullptr; + base::test::ScopedFeatureList scoped_feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(AvatarToolbarButtonPasskeyUnlockErrorBrowserTest, + PasskeyUnlockError) { + AvatarToolbarButton* avatar = GetAvatarToolbarButton(browser()); + SigninWithImageAndClearGreetingAndSyncPromo(avatar, u"test@gmail.com"); + + EXPECT_EQ(avatar->GetText(), + l10n_util::GetStringUTF16(IDS_AVATAR_BUTTON_PASSKEYS_ERROR_VERIFY)); + + // Simulate the error disappearing. + ON_CALL(*passkey_unlock_manager(), ShouldDisplayErrorUi()) + .WillByDefault(testing::Return(false)); + EXPECT_CALL(*passkey_unlock_manager(), ShouldDisplayErrorUi()) + .Times(testing::AtLeast(1)); + passkey_unlock_manager()->NotifyObserversForTesting(); + + EXPECT_EQ(avatar->GetText(), std::u16string()); +} +#endif // !BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.cc index 63b716b..e2c9218c 100644 --- a/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.cc +++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.cc
@@ -51,6 +51,8 @@ #include "chrome/browser/ui/views/profiles/avatar_toolbar_button.h" #include "chrome/browser/ui/views/profiles/profile_menu_coordinator.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" +#include "chrome/browser/webauthn/passkey_unlock_manager.h" +#include "chrome/browser/webauthn/passkey_unlock_manager_factory.h" #include "chrome/common/pref_names.h" #include "chrome/grit/branded_strings.h" #include "chrome/grit/generated_resources.h" @@ -888,6 +890,7 @@ break; case ButtonState::kNormal: case ButtonState::kManagement: + case ButtonState::kPasskeysLockedError: CHECK(!collapse_timer_.IsRunning()); break; } @@ -911,6 +914,7 @@ case ButtonState::kSigninPending: case ButtonState::kSyncPaused: case ButtonState::kUpgradeClientError: + case ButtonState::kPasskeysLockedError: case ButtonState::kPassphraseError: break; } @@ -1160,6 +1164,72 @@ }; #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) +// Observes passkey unlock manager to see if the passkeys are locked and the +// error UI needs to be shown. If passkeys are locked, but could be unlocked, it +// updates the profile avatar. It also updates the profile avatar after +// unlocking passkeys. +class PasskeyStateProvider : public StateProvider, + public webauthn::PasskeyUnlockManager::Observer { + public: + ~PasskeyStateProvider() override = default; + + explicit PasskeyStateProvider(Profile* profile, StateObserver* state_observer) + : StateProvider(profile, state_observer) { + passkey_manager_observation_.Observe( + webauthn::PasskeyUnlockManagerFactory::GetForProfile(profile)); + } + + // StateProvider: + bool IsActive() const final { + return passkey_manager_observation_.GetSource()->ShouldDisplayErrorUi(); + } + + std::optional<SkColor> GetHighlightColor( + const ui::ColorProvider& color_provider) const override { + // We use the same colors as the colors of sync errors. + return color_provider.GetColor(kColorAvatarButtonHighlightPasskeysLocked); + } + + ui::ImageModel GetAvatarIcon( + int icon_size, + SkColor /*icon_color*/, + const ui::ColorProvider& color_provider) const override { + return GetAvatarImageWithDottedRing(profile(), color_provider, icon_size); + } + + std::u16string GetAvatarTooltipText() const final { + // TODO(crbug.com/454658811): Add support for other experiment arms and + // check if the tooltip text needs to be updated. + return passkey_manager_observation_.GetSource() + ->GetPasskeyErrorProfilePillTitle( + webauthn::PasskeyUnlockManager::ExperimentArm::kVerify); + } + + std::pair<ChromeColorIds, ChromeColorIds> GetInkdropColors() const override { + return {kColorToolbarInkDropHover, kColorAvatarButtonNormalRipple}; + } + + std::u16string GetText() const override { + // TODO(crbug.com/454658811): Add support for other experiment arms. + return passkey_manager_observation_.GetSource() + ->GetPasskeyErrorProfilePillTitle( + webauthn::PasskeyUnlockManager::ExperimentArm::kVerify); + } + + private: + void OnPasskeyUnlockManagerStateChanged() final { RequestUpdate(); } + + void OnPasskeyUnlockManagerShuttingDown() final { + passkey_manager_observation_.Reset(); + } + + void OnPasskeyUnlockManagerIsReady() final { RequestUpdate(); } + + base::ScopedObservation<webauthn::PasskeyUnlockManager, + webauthn::PasskeyUnlockManager::Observer> + passkey_manager_observation_{this}; +}; + // This provider observes sync errors (including transport mode). It can be // configured to listen to a specific error with `sync_error_type`, or to all // errors by passing nullopt. That way specific implementations of @@ -1900,6 +1970,12 @@ /*state_observer=*/this, &avatar_toolbar_button_.get()); #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) + if (webauthn::PasskeyUnlockManager::IsPasskeyUnlockErrorUiEnabled()) { + states_[ButtonState::kPasskeysLockedError] = + std::make_unique<PasskeyStateProvider>(profile, + /*state_observer=*/this); + } + signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile); scoped_identity_manager_observation_.Observe(identity_manager);
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.h b/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.h index 0c50d831..bde10fc 100644 --- a/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.h +++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.h
@@ -160,6 +160,7 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) kHistorySyncOptin, #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) + kPasskeysLockedError, // Includes Work and School. kManagement, kNormal
diff --git a/chrome/browser/ui/views/promos/ios_promo_bubble_browsertest.cc b/chrome/browser/ui/views/promos/ios_promo_bubble_interactive_uitest.cc similarity index 100% rename from chrome/browser/ui/views/promos/ios_promo_bubble_browsertest.cc rename to chrome/browser/ui/views/promos/ios_promo_bubble_interactive_uitest.cc
diff --git a/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.cc b/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.cc index a678d54..3e000856 100644 --- a/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.cc +++ b/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h" #include "base/functional/callback.h" +#include "base/task/single_thread_task_runner.h" #include "chrome/browser/glic/public/glic_enabling.h" #include "chrome/browser/glic/public/glic_keyed_service.h" #include "chrome/browser/glic/public/glic_keyed_service_factory.h" @@ -17,6 +18,7 @@ #include "chrome/browser/ui/browser_actions.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/tabs/public/tab_features.h" #include "chrome/browser/ui/views/side_panel/side_panel.h" #include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h" #include "chrome/browser/ui/views/side_panel/side_panel_entry.h" @@ -46,9 +48,6 @@ if (glic_service->enabling().IsAllowed()) { CreateAndRegisterEntry(); } - tab_deactivated_subscription_ = - tab_->RegisterWillDeactivate(base::BindRepeating( - &GlicSidePanelCoordinator::OnTabDeactivated, base::Unretained(this))); } GlicSidePanelCoordinator::~GlicSidePanelCoordinator() { @@ -57,6 +56,15 @@ } } +// static +GlicSidePanelCoordinator* GlicSidePanelCoordinator::GetForTab( + tabs::TabInterface* tab) { + if (!tab || !tab->GetTabFeatures()) { + return nullptr; + } + return tab->GetTabFeatures()->glic_side_panel_coordinator(); +} + void GlicSidePanelCoordinator::CreateAndRegisterEntry() { if (side_panel_registry_->GetEntryForKey( SidePanelEntry::Key(SidePanelEntry::Id::kGlic))) { @@ -117,7 +125,12 @@ SidePanelEntry* entry, SidePanelEntryHideReason reason) { CHECK_EQ(entry->key().id(), SidePanelEntry::Id::kGlic); - state_ = State::kClosed; + if (reason == SidePanelEntryHideReason::kBackgrounded) { + state_ = State::kBackgrounded; + } else { + state_ = State::kClosed; + } + NotifyStateChanged(); } @@ -133,13 +146,6 @@ NotifyStateChanged(); } -void GlicSidePanelCoordinator::OnTabDeactivated(tabs::TabInterface* tab) { - if (IsShowing()) { - state_ = State::kHidden; - NotifyStateChanged(); - } -} - void GlicSidePanelCoordinator::OnGlicEnabledChanged() { // Maybe register side panel entry if not yet registered. if (glic::GlicEnabling::IsEnabledForProfile(
diff --git a/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h b/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h index 9b83d698..eab6c4e 100644 --- a/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h +++ b/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h
@@ -38,6 +38,8 @@ SidePanelRegistry* side_panel_registry); ~GlicSidePanelCoordinator() override; + static GlicSidePanelCoordinator* GetForTab(tabs::TabInterface* tab); + // Create and register the Glic side panel entry. void CreateAndRegisterEntry(); @@ -47,7 +49,7 @@ kShown, // The side panel is in the background, but it will show if its tab becomes // active. - kHidden, + kBackgrounded, // The side panel is closed and will only be shown if explicitly requested. kClosed, }; @@ -61,6 +63,8 @@ // Returns true if the Glic side panel is currently the active entry. bool IsShowing() const; + State state() { return state_; } + // Registers `callback` to be called when panel visibility is updated. base::CallbackListSubscription AddStateCallback( base::RepeatingCallback<void(State state)> callback); @@ -85,7 +89,7 @@ void OnEntryShown(SidePanelEntry* entry) override; private: - void OnTabDeactivated(tabs::TabInterface* tab); + void CheckStateAfterHidden(); // Returns the SidePanelCoordinator for the window associated with `tab_`. SidePanelCoordinator* GetWindowSidePanelCoordinator() const; @@ -100,15 +104,16 @@ base::WeakPtr<SidePanelEntry> entry_; base::CallbackListSubscription on_glic_enabled_changed_subscription_; base::RepeatingCallbackList<void(State state)> state_changed_callbacks_; - base::CallbackListSubscription tab_deactivated_subscription_; - State state_ = State::kHidden; + State state_ = State::kClosed; // Tracks the glic container view. views::ViewTracker glic_container_tracker_; // Caches the contents view if it's set before the container is created. std::unique_ptr<views::View> contents_view_; + + base::WeakPtrFactory<GlicSidePanelCoordinator> weak_ptr_factory_{this}; }; } // namespace glic
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 fa531ccb..c79799b 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc
@@ -24,6 +24,7 @@ #include "chrome/browser/ui/views/side_panel/side_panel_entry_id.h" #include "chrome/browser/ui/views/side_panel/side_panel_entry_key.h" #include "chrome/browser/ui/views/side_panel/side_panel_entry_waiter.h" +#include "chrome/browser/ui/views/side_panel/side_panel_enums.h" #include "chrome/browser/ui/views/side_panel/side_panel_header.h" #include "chrome/browser/ui/views/side_panel/side_panel_header_controller.h" #include "chrome/browser/ui/views/side_panel/side_panel_registry.h" @@ -52,16 +53,12 @@ void SidePanelCoordinator::TearDownPreBrowserWindowDestruction() { for (auto panel_type : SidePanelEntry::PanelTypes::All()) { - Close(/*suppress_animations=*/true, panel_type); + Close(panel_type, SidePanelEntryHideReason::kSidePanelClosed, + /*suppress_animations=*/true); } side_panel_toolbar_pinning_controller_.reset(); } -void SidePanelCoordinator::Close(SidePanelEntry::PanelType panel_type) { - Close(/*suppress_animations=*/false, panel_type, - SidePanelEntryHideReason::kSidePanelClosed); -} - void SidePanelCoordinator::Toggle( SidePanelEntryKey key, SidePanelUtil::SidePanelOpenTrigger open_trigger) { @@ -143,10 +140,9 @@ ? SidePanelEntry::PanelType::kToolbar : SidePanelEntry::PanelType::kContent; IsSidePanelShowing(other_type)) { - Close(/*suppress_animations=*/true, other_type, - SidePanelEntryHideReason::kSidePanelClosed); + Close(other_type, SidePanelEntryHideReason::kSidePanelClosed, + /*suppress_animations=*/true); } - if (entry->type() == SidePanelEntry::PanelType::kContent) { // Record usage for side panel promo. feature_engagement::TrackerFactory::GetForBrowserContext( @@ -215,9 +211,9 @@ // (4) At the moment that this comment was written, if this class is showing // a window-scoped side-panel entry, and the window is closed via any // mechanism, this method is not called. -void SidePanelCoordinator::Close(bool suppress_animations, - SidePanelEntry::PanelType panel_type, - SidePanelEntryHideReason reason) { +void SidePanelCoordinator::Close(SidePanelEntry::PanelType panel_type, + SidePanelEntryHideReason reason, + bool suppress_animations) { SidePanel* const side_panel = GetSidePanelFor(panel_type); if (!IsSidePanelShowing(panel_type) || (!suppress_animations && side_panel->IsClosing())) { @@ -373,8 +369,8 @@ content_wrapper->children().front()); (*active_entry)->CacheView(std::move(current_entry_view)); } - Close(/*suppress_animations=*/true, type, - SidePanelEntryHideReason::kBackgrounded); + Close(type, SidePanelEntryHideReason::kBackgrounded, + /*suppress_animations=*/true); } } else if (auto active_entry = new_contextual_registry
diff --git a/chrome/browser/ui/views/side_panel/side_panel_coordinator.h b/chrome/browser/ui/views/side_panel/side_panel_coordinator.h index 1c34b5d2..9c30b1f 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_coordinator.h +++ b/chrome/browser/ui/views/side_panel/side_panel_coordinator.h
@@ -46,7 +46,10 @@ void TearDownPreBrowserWindowDestruction(); // SidePanelUI: - void Close(SidePanelEntry::PanelType panel_type) override; + using SidePanelUI::Close; + void Close(SidePanelEntry::PanelType panel_type, + SidePanelEntryHideReason reason, + bool suppress_animations) override; void Toggle(SidePanelEntryKey key, SidePanelUtil::SidePanelOpenTrigger open_trigger) override; void ShowFrom(SidePanelEntryKey entry_key, @@ -54,10 +57,6 @@ // SidePanelUIBase: using SidePanelUIBase::Show; - void Close(bool suppress_animations, - SidePanelEntry::PanelType panel_entry, - SidePanelEntryHideReason reason = - SidePanelEntryHideReason::kSidePanelClosed) override; void Show(const UniqueKey& entry, std::optional<SidePanelUtil::SidePanelOpenTrigger> open_trigger, bool suppress_animations) override;
diff --git a/chrome/browser/ui/views/side_panel/side_panel_registry.cc b/chrome/browser/ui/views/side_panel/side_panel_registry.cc index 14a779b0b..276fd399 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_registry.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_registry.cc
@@ -12,8 +12,9 @@ #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/tabs/public/tab_features.h" -#include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h" #include "chrome/browser/ui/views/side_panel/side_panel_entry.h" +#include "chrome/browser/ui/views/side_panel/side_panel_enums.h" +#include "chrome/browser/ui/views/side_panel/side_panel_ui.h" #include "components/tabs/public/tab_interface.h" #include "content/public/browser/web_contents.h" #include "extensions/common/extension_id.h" @@ -112,11 +113,15 @@ // TODO(https://crbug.com/360163254): This is nullptr in // BrowserWithTestWindowTest. When the test suite goes away the nullptr check // can be removed. - if (auto* coordinator = GetCoordinator()) { - bool for_tab = get_scope_type() == SidePanelEntryScope::ScopeType::kTab; + if (auto* const side_panel_ui = + GetBrowserWindowInterface().GetFeatures().side_panel_ui()) { + const bool for_tab = + get_scope_type() == SidePanelEntryScope::ScopeType::kTab; // If the entry with the same key and scope is showing, synchronously close. - if (coordinator->IsSidePanelEntryShowing(key, for_tab)) { - coordinator->Close(/*suppress_animations=*/true, panel_type); + if (side_panel_ui->IsSidePanelEntryShowing(key, for_tab)) { + side_panel_ui->Close(panel_type, + SidePanelEntryHideReason::kSidePanelClosed, + /*suppress_animations=*/true); } } @@ -153,7 +158,3 @@ ->GetBrowserWindowInterface() : *std::get<BrowserWindowInterface*>(owner_); } - -SidePanelCoordinator* SidePanelRegistry::GetCoordinator() { - return GetBrowserWindowInterface().GetFeatures().side_panel_coordinator(); -}
diff --git a/chrome/browser/ui/views/side_panel/side_panel_registry.h b/chrome/browser/ui/views/side_panel/side_panel_registry.h index 2bcf1c4..7ab3116 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_registry.h +++ b/chrome/browser/ui/views/side_panel/side_panel_registry.h
@@ -16,8 +16,6 @@ #include "chrome/browser/ui/views/side_panel/side_panel_entry_scope.h" #include "ui/base/unowned_user_data/scoped_unowned_user_data.h" -class SidePanelCoordinator; - namespace content { class WebContents; } // namespace content @@ -79,8 +77,6 @@ const BrowserWindowInterface& GetBrowserWindowInterface() const override; private: - SidePanelCoordinator* GetCoordinator(); - // The active entry hosted in the side panel used to determine what entry // should be visible. This is reset by the coordinator when the panel is // closed. When there are multiple registries, this may not be the entry
diff --git a/chrome/browser/ui/views/side_panel/side_panel_ui.h b/chrome/browser/ui/views/side_panel/side_panel_ui.h index d5a86d7..769bb68 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_ui.h +++ b/chrome/browser/ui/views/side_panel/side_panel_ui.h
@@ -49,7 +49,12 @@ gfx::Rect starting_bounds) = 0; // Close the side panel. - virtual void Close(SidePanelEntry::PanelType panel_type) = 0; + virtual void Close(SidePanelEntry::PanelType panel_type, + SidePanelEntryHideReason hide_reason, + bool suppress_animations) = 0; + void Close(SidePanelEntry::PanelType panel_type) { + Close(panel_type, SidePanelEntryHideReason::kSidePanelClosed, false); + } // Open the side panel for a key. If side panel for the key is already opened // then close the side panel.
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 0b4d9d3..4d43920 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
@@ -100,11 +100,6 @@ base::RepeatingCallbackList<void()> shown_callback_list; }; - virtual void Close(bool suppress_animations, - SidePanelEntry::PanelType panel_type, - SidePanelEntryHideReason reason = - SidePanelEntryHideReason::kSidePanelClosed) = 0; - // This method does not show the side panel. Instead, it queues the side panel // to be shown once the contents have been loaded. This process may be either // synchronous or asynchronous.
diff --git a/chrome/browser/ui/views/tabs/fade_footer_view.cc b/chrome/browser/ui/views/tabs/fade_footer_view.cc index d293d33..e7f4ee18 100644 --- a/chrome/browser/ui/views/tabs/fade_footer_view.cc +++ b/chrome/browser/ui/views/tabs/fade_footer_view.cc
@@ -51,6 +51,7 @@ case tabs::TabAlert::kTabCapturing: case tabs::TabAlert::kPipPlaying: case tabs::TabAlert::kActorAccessing: + case tabs::TabAlert::kActorWaitingOnUser: case tabs::TabAlert::kGlicAccessing: case tabs::TabAlert::kGlicSharing: icon_color = kColorHoverCardTabAlertPipPlayingIcon;
diff --git a/chrome/browser/ui/views/tabs/glic_button.cc b/chrome/browser/ui/views/tabs/glic_button.cc index e3d9d112..e28c1d4 100644 --- a/chrome/browser/ui/views/tabs/glic_button.cc +++ b/chrome/browser/ui/views/tabs/glic_button.cc
@@ -46,6 +46,11 @@ #include "ui/views/view_class_properties.h" namespace glic { + +// TODO(crbug.com/461326322): Remove this flag when crbug.com/461326322 is +// resolved. +BASE_FEATURE(kGlicButtonHideLabelOnTaskNudge, base::FEATURE_ENABLED_BY_DEFAULT); + namespace { constexpr int kHighlightMargin = 2; @@ -241,6 +246,10 @@ } void GlicButton::ShowDefaultLabel() { + if (!base::FeatureList::IsEnabled(kGlicButtonHideLabelOnTaskNudge)) { + return; + } + is_animating_text_ = true; StartSlidingTextAnimation(/*show=*/true); @@ -259,6 +268,10 @@ } void GlicButton::SuppressLabel() { + if (!base::FeatureList::IsEnabled(kGlicButtonHideLabelOnTaskNudge)) { + return; + } + StartSlidingTextAnimation(/*show=*/false); label()->SetPaintToLayer();
diff --git a/chrome/browser/ui/views/web_dialog_view_browsertest.cc b/chrome/browser/ui/views/web_dialog_view_interactive_uitest.cc similarity index 100% rename from chrome/browser/ui/views/web_dialog_view_browsertest.cc rename to chrome/browser/ui/views/web_dialog_view_interactive_uitest.cc
diff --git a/chrome/browser/ui/web_applications/app_browser_controller.cc b/chrome/browser/ui/web_applications/app_browser_controller.cc index 9fdec0f..1fae67c3 100644 --- a/chrome/browser/ui/web_applications/app_browser_controller.cc +++ b/chrome/browser/ui/web_applications/app_browser_controller.cc
@@ -453,6 +453,10 @@ return false; } +bool AppBrowserController::UrlMatchesBorderlessPattern(const GURL& url) const { + return false; +} + bool AppBrowserController::AppUsesTabbed() const { return false; }
diff --git a/chrome/browser/ui/web_applications/app_browser_controller.h b/chrome/browser/ui/web_applications/app_browser_controller.h index 87921b5..fa165293 100644 --- a/chrome/browser/ui/web_applications/app_browser_controller.h +++ b/chrome/browser/ui/web_applications/app_browser_controller.h
@@ -49,7 +49,7 @@ class ColorProvider; class ImageModel; class ThemeProvider; -} +} // namespace ui namespace web_app { @@ -237,6 +237,10 @@ // Returns true when an app's effective display mode is borderless. virtual bool AppUsesBorderlessMode() const; + // Returns true when `url` matches one of the borderless URL patterns of this + // app, or when there are no patterns to match. + virtual bool UrlMatchesBorderlessPattern(const GURL& url) const; + // Returns true when an app's effective display mode is tabbed. virtual bool AppUsesTabbed() const;
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.cc b/chrome/browser/ui/web_applications/web_app_browser_controller.cc index 374959476..d71d356 100644 --- a/chrome/browser/ui/web_applications/web_app_browser_controller.cc +++ b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
@@ -4,6 +4,8 @@ #include "chrome/browser/ui/web_applications/web_app_browser_controller.h" +#include <algorithm> + #include "ash/constants/web_app_id_constants.h" #include "base/callback_list.h" #include "base/check_is_test.h" @@ -33,6 +35,7 @@ #include "chrome/browser/web_applications/locks/app_lock.h" #include "chrome/browser/web_applications/proto/web_app.pb.h" #include "chrome/browser/web_applications/ui_manager/update_dialog_types.h" +#include "chrome/browser/web_applications/url_pattern_with_regex_matcher.h" #include "chrome/browser/web_applications/web_app_command_scheduler.h" #include "chrome/browser/web_applications/web_app_constants.h" #include "chrome/browser/web_applications/web_app_filter.h" @@ -196,6 +199,19 @@ effective_display_mode_ == DisplayMode::kBorderless; } +bool WebAppBrowserController::UrlMatchesBorderlessPattern( + const GURL& url) const { + const WebApp* app = registrar().GetAppById(app_id()); + if (app == nullptr) { + return false; + } + return app->borderless_url_patterns().empty() || + std::ranges::any_of(app->borderless_url_patterns(), + [&url](const blink::SafeUrlPattern& p) { + return UrlPatternWithRegexMatcher(p).Match(url); + }); +} + bool WebAppBrowserController::AppUsesTabbed() const { if (!base::FeatureList::IsEnabled(blink::features::kDesktopPWAsTabStrip)) { return false;
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.h b/chrome/browser/ui/web_applications/web_app_browser_controller.h index e7b2ec5c..c8d5395 100644 --- a/chrome/browser/ui/web_applications/web_app_browser_controller.h +++ b/chrome/browser/ui/web_applications/web_app_browser_controller.h
@@ -112,6 +112,7 @@ void ToggleWindowControlsOverlayEnabled( base::OnceClosure on_complete) override; bool AppUsesBorderlessMode() const override; + bool UrlMatchesBorderlessPattern(const GURL& url) const override; bool IsIsolatedWebApp() const override; void SetIsolatedWebAppTrueForTesting() override; gfx::Rect GetDefaultBounds() const override;
diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/ui/webui/chrome_web_ui_configs.cc index adfd045..dfcfdb2 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_configs.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_configs.cc
@@ -176,6 +176,10 @@ #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_DESKTOP_ANDROID) +#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) +#include "chrome/browser/ui/webui/updater/updater_ui.h" +#endif // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) + #if BUILDFLAG(ENABLE_DICE_SUPPORT) #include "chrome/browser/ui/webui/signin/batch_upload_ui.h" #include "chrome/browser/ui/webui/signin/dice_web_signin_intercept_ui.h" @@ -407,6 +411,10 @@ #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_DESKTOP_ANDROID) +#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) + map.AddWebUIConfig(std::make_unique<UpdaterUIConfig>()); +#endif // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) + #if BUILDFLAG(ENABLE_DICE_SUPPORT) map.AddWebUIConfig(std::make_unique<BatchUploadUIConfig>()); map.AddWebUIConfig(std::make_unique<DiceWebSigninInterceptUIConfig>());
diff --git a/chrome/browser/ui/webui/settings/people_handler_unittest.cc b/chrome/browser/ui/webui/settings/people_handler_unittest.cc index 090c36a..de474a1 100644 --- a/chrome/browser/ui/webui/settings/people_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/people_handler_unittest.cc
@@ -50,6 +50,7 @@ #include "components/signin/public/base/consent_level.h" #include "components/signin/public/base/signin_pref_names.h" #include "components/signin/public/base/signin_prefs.h" +#include "components/signin/public/base/signin_switches.h" #include "components/signin/public/identity_manager/account_capabilities_test_mutator.h" #include "components/signin/public/identity_manager/accounts_mutator.h" #include "components/signin/public/identity_manager/identity_manager.h" @@ -1781,6 +1782,53 @@ /*`ChromeSigninSettingModification::kToSignin`*/ 2, 1); } +class PeopleHandlerUnoBubbleLimitsExperimentTest : public PeopleHandlerTest { + private: + base::test::ScopedFeatureList feature_list_{ + switches::kSigninPromoLimitsExperiment}; +}; + +TEST_F(PeopleHandlerUnoBubbleLimitsExperimentTest, + ShouldClearExperimentPrefsWhenExplicitlySettingDontSignin) { + base::HistogramTester histogram_tester; + // Signed in user can see the setting. + AccountInfo account = identity_test_env()->MakePrimaryAccountAvailable( + /*email=*/"email@gmail.com", ConsentLevel::kSignin); + + CreatePeopleHandler(); + + // Simluates settings page loading. + SimulateHandleGetChromeSigninUserChoiceInfo(); + + SigninPrefs signin_prefs(*profile()->GetPrefs()); + ChromeSigninUserChoice current_choice = + signin_prefs.GetChromeSigninInterceptionUserChoice(account.gaia); + + // Simulates setting a new value through the UI. + ChromeSigninUserChoice user_choice = ChromeSigninUserChoice::kSignin; + ASSERT_NE(current_choice, user_choice); + SimulateHandleSetChromeSigninUserChoiceInfo(account.email, user_choice); + + // Simulate a last bubble decline time as well. + signin_prefs.SetChromeSigninInterceptionLastBubbleDeclineTime( + account.gaia, base::Time::Now()); + signin_prefs.IncrementChromeSigninBubbleRepromptCount(account.gaia); + + // Simulates a second selection within the same settings session. + ChromeSigninUserChoice user_choice2 = ChromeSigninUserChoice::kDoNotSignin; + ASSERT_NE(current_choice, user_choice2); + SimulateHandleSetChromeSigninUserChoiceInfo(account.email, user_choice2); + // Explicitly setting the do not sign in option should clear bubble declined + // time. + EXPECT_FALSE( + signin_prefs + .GetChromeSigninInterceptionLastBubbleDeclineTime(account.gaia) + .has_value()); + EXPECT_EQ(signin_prefs.GetChromeSigninBubbleRepromptCount(account.gaia), 0); + + DestroyPeopleHandler(); +} + #endif #if BUILDFLAG(ENABLE_DICE_SUPPORT)
diff --git a/chrome/browser/ui/webui/tabs/tabs.mojom b/chrome/browser/ui/webui/tabs/tabs.mojom index e92cf3b..75754ea8 100644 --- a/chrome/browser/ui/webui/tabs/tabs.mojom +++ b/chrome/browser/ui/webui/tabs/tabs.mojom
@@ -14,6 +14,7 @@ kBluetoothScanActive, kDesktopCapturing, kActorAccessing, + kActorWaitingOnUser, kGlicAccessing, kGlicSharing, kHidConnected,
diff --git a/chrome/browser/ui/webui/tabs/tabs_mojom_traits.cc b/chrome/browser/ui/webui/tabs/tabs_mojom_traits.cc index 5a584f5..cf53d4d 100644 --- a/chrome/browser/ui/webui/tabs/tabs_mojom_traits.cc +++ b/chrome/browser/ui/webui/tabs/tabs_mojom_traits.cc
@@ -75,6 +75,8 @@ return MojoTabAlertState::kVideoRecording; case mojo::NativeTabAlertState::kActorAccessing: return MojoTabAlertState::kActorAccessing; + case mojo::NativeTabAlertState::kActorWaitingOnUser: + return MojoTabAlertState::kActorWaitingOnUser; case NativeTabAlertState::kGlicAccessing: return MojoTabAlertState::kGlicAccessing; case NativeTabAlertState::kGlicSharing: @@ -132,6 +134,9 @@ case MojoTabAlertState::kActorAccessing: *out = NativeTabAlertState::kActorAccessing; return true; + case MojoTabAlertState::kActorWaitingOnUser: + *out = NativeTabAlertState::kActorWaitingOnUser; + return true; case MojoTabAlertState::kGlicAccessing: *out = NativeTabAlertState::kGlicAccessing; return true;
diff --git a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.cc b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.cc index 11ee76c..e6f120c 100644 --- a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.cc +++ b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.cc
@@ -82,6 +82,12 @@ return nullptr; } +bool WebUIContentsWrapper::Host::PreHandleGestureEvent( + content::WebContents* source, + const blink::WebGestureEvent& event) { + return false; +} + WebUIContentsWrapper::WebUIContentsWrapper(const GURL& webui_url, Profile* profile, int task_manager_string_id, @@ -229,6 +235,12 @@ : nullptr; } +bool WebUIContentsWrapper::PreHandleGestureEvent( + content::WebContents* source, + const blink::WebGestureEvent& event) { + return host_ ? host_->PreHandleGestureEvent(source, event) : false; +} + void WebUIContentsWrapper::PrimaryPageChanged(content::Page& page) { if (webui_resizes_host_) { EnableAutoResizeForWebContents(web_contents_.get());
diff --git a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.h b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.h index 0c1a8b7..b85c1c45 100644 --- a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.h +++ b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.h
@@ -74,6 +74,8 @@ const blink::mojom::WindowFeatures& window_features, bool user_gesture, bool* was_blocked); + virtual bool PreHandleGestureEvent(content::WebContents* source, + const blink::WebGestureEvent& event); }; WebUIContentsWrapper(const GURL& webui_url, @@ -123,6 +125,8 @@ const blink::mojom::WindowFeatures& window_features, bool user_gesture, bool* was_blocked) override; + bool PreHandleGestureEvent(content::WebContents* source, + const blink::WebGestureEvent& event) override; // content::WebContentsObserver: void PrimaryPageChanged(content::Page& page) override;
diff --git a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper_unittest.cc b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper_unittest.cc index a7df9eda..8ac44f73 100644 --- a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper_unittest.cc +++ b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper_unittest.cc
@@ -58,6 +58,12 @@ return nullptr; } + bool PreHandleGestureEvent(content::WebContents* source, + const blink::WebGestureEvent& event) override { + ++pre_handle_gesture_event_called_; + return true; + } + base::WeakPtr<MockHost> GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); } @@ -75,6 +81,10 @@ } int add_new_contents_called() const { return add_new_contents_called_; } + int pre_handle_gesture_event_called() const { + return pre_handle_gesture_event_called_; + } + private: int show_ui_called_ = 0; int close_ui_called_ = 0; @@ -82,7 +92,7 @@ int resize_due_to_auto_resize_called_ = 0; int draggable_regions_changed_called_ = 0; int add_new_contents_called_ = 0; - + int pre_handle_gesture_event_called_ = 0; base::WeakPtrFactory<MockHost> weak_ptr_factory_{this}; }; @@ -283,5 +293,27 @@ EXPECT_EQ(1, host.add_new_contents_called()); } +TEST_F(WebUIContentsWrapperTest, ForwardsGestureEventsToHost) { + MockHost host; + EXPECT_EQ(0, host.pre_handle_gesture_event_called()); + + contents_wrapper()->SetHost(host.GetWeakPtr()); + + blink::WebGestureEvent event( + blink::WebInputEvent::Type::kGesturePinchBegin, + blink::WebInputEvent::kNoModifiers, + blink::WebInputEvent::GetStaticTimeStampForTests()); + + EXPECT_TRUE(contents_wrapper()->PreHandleGestureEvent( + contents_wrapper()->web_contents(), event)); + EXPECT_EQ(1, host.pre_handle_gesture_event_called()); + + contents_wrapper()->SetHost(nullptr); + EXPECT_FALSE(contents_wrapper()->PreHandleGestureEvent( + contents_wrapper()->web_contents(), event)); + + EXPECT_EQ(1, host.pre_handle_gesture_event_called()); +} + } // namespace test } // namespace views
diff --git a/chrome/browser/ui/webui/updater/BUILD.gn b/chrome/browser/ui/webui/updater/BUILD.gn new file mode 100644 index 0000000..08f3345 --- /dev/null +++ b/chrome/browser/ui/webui/updater/BUILD.gn
@@ -0,0 +1,40 @@ +# 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. + +assert(is_mac || is_win) + +source_set("updater") { + sources = [ "updater_ui.h" ] + public_deps = [ + "//base", + "//chrome/browser/notifications/scheduler/public", + "//chrome/browser/profiles", + "//chrome/common", + "//content/public/browser", + "//ui/webui", + ] +} + +source_set("impl") { + sources = [ + "notifications_internals_ui.cc", + "notifications_internals_ui_page_handler.cc", + ] + public_deps = [ + ":mojo_bindings", + ":notifications_internals", + "//base", + "//chrome/browser:browser_public_dependencies", + "//chrome/browser/notifications/scheduler/public", + "//chrome/browser/profiles", + "//chrome/browser/resources/notifications_internals:resources_grit", + "//content/public/browser", + "//ui/webui", + ] +} + +mojom("mojo_bindings") { + sources = [ "notifications_internals.mojom" ] + webui_module_path = "/" +}
diff --git a/chrome/browser/ui/webui/updater/DIR_METADATA b/chrome/browser/ui/webui/updater/DIR_METADATA new file mode 100644 index 0000000..086971c --- /dev/null +++ b/chrome/browser/ui/webui/updater/DIR_METADATA
@@ -0,0 +1 @@ +mixins: "//chrome/updater/COMMON_METADATA" \ No newline at end of file
diff --git a/chrome/browser/ui/webui/updater/OWNERS b/chrome/browser/ui/webui/updater/OWNERS new file mode 100644 index 0000000..a59eee6 --- /dev/null +++ b/chrome/browser/ui/webui/updater/OWNERS
@@ -0,0 +1,6 @@ +file://chrome/updater/OWNERS + +per-file *.mojom=set noparent +per-file *.mojom=file://ipc/SECURITY_OWNERS +per-file *_mojom_traits*.*=set noparent +per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS \ No newline at end of file
diff --git a/chrome/browser/ui/webui/updater/updater_ui.cc b/chrome/browser/ui/webui/updater/updater_ui.cc new file mode 100644 index 0000000..f801f26 --- /dev/null +++ b/chrome/browser/ui/webui/updater/updater_ui.cc
@@ -0,0 +1,26 @@ +// 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/webui/updater/updater_ui.h" + +#include "chrome/common/webui_url_constants.h" +#include "chrome/grit/updater_resources.h" +#include "chrome/grit/updater_resources_map.h" +#include "content/public/browser/browser_context.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_ui.h" +#include "content/public/browser/web_ui_data_source.h" +#include "ui/webui/webui_util.h" + +UpdaterUI::UpdaterUI(content::WebUI* web_ui) + : content::WebUIController(web_ui) { + content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd( + web_ui->GetWebContents()->GetBrowserContext(), + chrome::kChromeUIUpdaterHost); + + webui::SetupWebUIDataSource(source, kUpdaterResources, + IDR_UPDATER_UPDATER_HTML); +} + +UpdaterUI::~UpdaterUI() = default;
diff --git a/chrome/browser/ui/webui/updater/updater_ui.h b/chrome/browser/ui/webui/updater/updater_ui.h new file mode 100644 index 0000000..2dc0858 --- /dev/null +++ b/chrome/browser/ui/webui/updater/updater_ui.h
@@ -0,0 +1,29 @@ +// 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_WEBUI_UPDATER_UPDATER_UI_H_ +#define CHROME_BROWSER_UI_WEBUI_UPDATER_UPDATER_UI_H_ + +#include "chrome/common/webui_url_constants.h" +#include "content/public/browser/web_ui_controller.h" +#include "content/public/browser/webui_config.h" +#include "content/public/common/url_constants.h" + +class UpdaterUI; + +class UpdaterUIConfig : public content::DefaultWebUIConfig<UpdaterUI> { + public: + UpdaterUIConfig() + : DefaultWebUIConfig(content::kChromeUIScheme, + chrome::kChromeUIUpdaterHost) {} +}; + +// The WebUI for chrome://updater. +class UpdaterUI : public content::WebUIController { + public: + explicit UpdaterUI(content::WebUI* web_ui); + ~UpdaterUI() override; +}; + +#endif // CHROME_BROWSER_UI_WEBUI_UPDATER_UPDATER_UI_H_
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 6e3cf1f..f748c81 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
@@ -40,14 +40,9 @@ WebUIBrowserSidePanelUI::~WebUIBrowserSidePanelUI() = default; -void WebUIBrowserSidePanelUI::Close(SidePanelEntry::PanelType panel_type) { - Close(/*suppress_animations=*/true, panel_type, - SidePanelEntryHideReason::kSidePanelClosed); -} - -void WebUIBrowserSidePanelUI::Close(bool suppress_animations, - SidePanelEntry::PanelType panel_type, - SidePanelEntryHideReason reason) { +void WebUIBrowserSidePanelUI::Close(SidePanelEntry::PanelType panel_type, + SidePanelEntryHideReason reason, + bool supress_animations) { if (!IsSidePanelShowing(panel_type)) { return; } @@ -200,8 +195,8 @@ current_side_panel_view_.reset(); } - Close(/*suppress_animations=*/true, panel_type, - SidePanelEntryHideReason::kSidePanelClosed); + Close(panel_type, SidePanelEntryHideReason::kSidePanelClosed, + /*suppress_animations=*/true); } void WebUIBrowserSidePanelUI::OnSidePanelClosed(
diff --git a/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.h b/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.h index cc38b98c..ee7eac0 100644 --- a/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.h +++ b/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.h
@@ -23,7 +23,9 @@ ~WebUIBrowserSidePanelUI() override; // SidePanelUI: - void Close(SidePanelEntry::PanelType panel_type) override; + void Close(SidePanelEntry::PanelType panel_type, + SidePanelEntryHideReason reason, + bool suppress_animations) override; void Toggle(SidePanelEntryKey key, SidePanelOpenTrigger open_trigger) override; void ShowFrom(SidePanelEntryKey entry_key, @@ -38,9 +40,6 @@ private: // SidePanelUIBase: - void Close(bool suppress_animations, - SidePanelEntry::PanelType panel_type, - SidePanelEntryHideReason reason) override; void Show(const UniqueKey& entry, std::optional<SidePanelUtil::SidePanelOpenTrigger> open_trigger, bool suppress_animations) override;
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn index b553553..ca691ae 100644 --- a/chrome/browser/web_applications/BUILD.gn +++ b/chrome/browser/web_applications/BUILD.gn
@@ -1130,6 +1130,7 @@ "commands/navigate_and_trigger_install_dialog_command_browsertest.cc", "commands/update_protocol_handler_approval_command_browsertest.cc", "commands/web_install_from_url_command_browsertest.cc", + "isolated_web_apps/borderless_browsertest.cc", "isolated_web_apps/commands/garbage_collect_storage_partitions_command_browsertest.cc", "isolated_web_apps/commands/get_isolated_web_app_browsing_data_command_browsertest.cc", "isolated_web_apps/commands/install_isolated_web_app_from_command_line_browsertest.cc",
diff --git a/chrome/browser/web_applications/chrome_pwa_launcher/chrome_pwa_launcher_main.cc b/chrome/browser/web_applications/chrome_pwa_launcher/chrome_pwa_launcher_main.cc index afb6868..c2c7c4c 100644 --- a/chrome/browser/web_applications/chrome_pwa_launcher/chrome_pwa_launcher_main.cc +++ b/chrome/browser/web_applications/chrome_pwa_launcher/chrome_pwa_launcher_main.cc
@@ -6,6 +6,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/path_service.h" #include "base/process/launch.h" #include "base/win/windows_types.h"
diff --git a/chrome/browser/web_applications/isolated_web_apps/borderless_browsertest.cc b/chrome/browser/web_applications/isolated_web_apps/borderless_browsertest.cc new file mode 100644 index 0000000..831e42e7 --- /dev/null +++ b/chrome/browser/web_applications/isolated_web_apps/borderless_browsertest.cc
@@ -0,0 +1,219 @@ +// 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 <optional> +#include <string> +#include <string_view> + +#include "base/check.h" +#include "base/check_deref.h" +#include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "chrome/browser/ui/web_applications/app_browser_controller.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/ui/web_applications/web_app_browsertest_base.h" +#include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" +#include "chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "components/content_settings/core/browser/host_content_settings_map.h" +#include "components/content_settings/core/common/content_settings.h" +#include "components/content_settings/core/common/content_settings_types.h" +#include "components/content_settings/core/common/content_settings_types.mojom-data-view.h" +#include "components/webapps/common/web_app_id.h" +#include "content/public/common/content_features.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" +#include "services/network/public/mojom/permissions_policy/permissions_policy_feature.mojom-data-view.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/common/safe_url_pattern.h" +#include "third_party/blink/public/mojom/manifest/display_mode.mojom-data-view.h" +#include "third_party/liburlpattern/part.h" +#include "url/gurl.h" +#include "url/origin.h" + +namespace web_app { + +namespace { + +// The paths to the two pages in the test IWA. See `CreateBorderlessIwaBuilder`. +constexpr std::string_view kStandalonePagePath = "/standalone-page.html"; +constexpr std::string_view kBorderlessPagePath = "/borderless-page.html"; + +// The text displayed in the test IWA `message` element to report when it is +// in borderless display mode. See `CreateBorderlessIwaBuilder` and +// `ReadAppMessage`. +constexpr std::string_view kNotBorderlessMessage = + "This window is not borderless."; +constexpr std::string_view kBorderlessMessage = "This window is borderless."; + +// Returns a `SafeUrlPattern` that matches the given `pathname`. +blink::SafeUrlPattern UrlPatternForPath(std::string_view pathname) { + liburlpattern::Part part; + part.type = liburlpattern::PartType::kFixed; + part.value = pathname; + blink::SafeUrlPattern pattern; + pattern.pathname = {part}; + return pattern; +} + +IsolatedWebAppBuilder CreateBorderlessIwaBuilder() { + constexpr std::string_view kPageHtml = R"( + <!doctype html> + <html> + <head> + <link rel="stylesheet" href="/styles.css" /> + </head> + <body> + <p id="message"> + This window is <span class="hide-in-borderless">not</span> borderless. + </p> + </body> + </html> + )"; + return IsolatedWebAppBuilder( + ManifestBuilder() + .SetDisplayMode(blink::mojom::DisplayMode::kStandalone) + .SetDisplayModeOverride( + {blink::mojom::DisplayMode::kBorderless}) + .AddBorderlessUrlPattern( + UrlPatternForPath(kBorderlessPagePath)) + .AddPermissionsPolicy( + network::mojom::PermissionsPolicyFeature:: + kWindowManagement, + /*self=*/true, /*origins=*/{})) + .AddResource("/styles.css", R"( + .hide-in-borderless { + display: initial; + } + @media (display-mode: borderless) { + .hide-in-borderless { + display: none; + } + } + )", + "text/css") + .AddHtml(kStandalonePagePath, kPageHtml) + .AddHtml(kBorderlessPagePath, kPageHtml); +} + +content::WebContents& WebContentsOf(Browser& browser) { + return CHECK_DEREF(browser.tab_strip_model()->GetActiveWebContents()); +} + +blink::mojom::DisplayMode DisplayModeOf(Browser& browser) { + auto& web_contents = WebContentsOf(browser); + return web_contents.GetDelegate()->GetDisplayMode(&web_contents); +} + +// Reads the inner text of the "message" element. See +// `CreateBorderlessIwaBuilder`. +content::EvalJsResult ReadAppMessage(Browser& browser) { + return content::EvalJs( + &WebContentsOf(browser), + "document.getElementById('message').innerText.trim();"); +} + +// Sets the `content_type` setting for `origin_url` to the given `setting`. +void SetContentSetting( + Profile* profile, + const GURL& origin_url, + content_settings::mojom::ContentSettingsType content_type, + ContentSetting setting) { + CHECK_DEREF(HostContentSettingsMapFactory::GetForProfile(profile)) + .SetContentSettingDefaultScope(/*primary_url=*/origin_url, + /*secondary_url=*/origin_url, content_type, + setting); +} + +} // namespace + +class BorderlessBrowserTest : public WebAppBrowserTestBase { + public: + BorderlessBrowserTest() + : WebAppBrowserTestBase( + {features::kIsolatedWebApps, blink::features::kWebAppBorderless}, + {}) {} + + protected: + void SetUpOnMainThread() override { + WebAppBrowserTestBase::SetUpOnMainThread(); + app_url_info_ = + CreateBorderlessIwaBuilder().BuildBundle()->InstallChecked(profile()); + } + + Browser& LaunchAppInPathAndWait(std::string_view url_path) { + Browser& browser = + CHECK_DEREF(LaunchWebAppToURL(profile(), app_url_info_->app_id(), + app_origin_url().Resolve(url_path))); + CHECK(content::WaitForLoadStop(&WebContentsOf(browser))); + return browser; + } + + bool NavigateToAppPathAndWait(Browser& browser, std::string_view url_path) { + return ui_test_utils::NavigateToURL(&browser, + app_origin_url().Resolve(url_path)) && + content::WaitForLoadStop(&WebContentsOf(browser)); + } + + void SetAppWindowManagementPermission(ContentSetting setting) { + SetContentSetting(profile(), app_origin_url(), + ContentSettingsType::WINDOW_MANAGEMENT, setting); + } + + private: + GURL app_origin_url() const { return app_url_info_->origin().GetURL(); } + + // Not null after the IWA is installed in `SetUpOnMainThread`. + std::optional<IsolatedWebAppUrlInfo> app_url_info_; +}; + +IN_PROC_BROWSER_TEST_F(BorderlessBrowserTest, AppCanCreateStandaloneWindow) { + SetAppWindowManagementPermission(CONTENT_SETTING_ALLOW); + + Browser& browser = LaunchAppInPathAndWait(kStandalonePagePath); + EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kStandalone); + EXPECT_EQ(ReadAppMessage(browser), kNotBorderlessMessage); +} + +IN_PROC_BROWSER_TEST_F(BorderlessBrowserTest, AppCanCreateBorderlessWindow) { + SetAppWindowManagementPermission(CONTENT_SETTING_ALLOW); + + Browser& browser = LaunchAppInPathAndWait(kBorderlessPagePath); + EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kBorderless); + EXPECT_EQ(ReadAppMessage(browser), kBorderlessMessage); +} + +IN_PROC_BROWSER_TEST_F(BorderlessBrowserTest, + DisplayModeDoesNotChangeOnNavigation) { + SetAppWindowManagementPermission(CONTENT_SETTING_ALLOW); + + { + Browser& browser = LaunchAppInPathAndWait(kStandalonePagePath); + EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kStandalone); + + EXPECT_TRUE(NavigateToAppPathAndWait(browser, kBorderlessPagePath)); + EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kStandalone); + } + + { + Browser& browser = LaunchAppInPathAndWait(kBorderlessPagePath); + EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kBorderless); + + EXPECT_TRUE(NavigateToAppPathAndWait(browser, kStandalonePagePath)); + EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kBorderless); + } +} + +IN_PROC_BROWSER_TEST_F(BorderlessBrowserTest, + AppCannotCreateBorderlessWindowWithoutPermission) { + SetAppWindowManagementPermission(CONTENT_SETTING_BLOCK); + + Browser& browser = LaunchAppInPathAndWait(kBorderlessPagePath); + EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kStandalone); + EXPECT_EQ(ReadAppMessage(browser), kNotBorderlessMessage); +} + +} // namespace web_app
diff --git a/chrome/browser/webapps/web_app_offline_browsertest.cc b/chrome/browser/webapps/web_app_offline_interactive_uitest.cc similarity index 100% rename from chrome/browser/webapps/web_app_offline_browsertest.cc rename to chrome/browser/webapps/web_app_offline_interactive_uitest.cc
diff --git a/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc b/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc index 78a00b9..6070793 100644 --- a/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc +++ b/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc
@@ -7,6 +7,7 @@ #include <algorithm> #include <iterator> #include <memory> +#include <optional> #include <vector> #include "base/functional/callback.h" @@ -88,7 +89,8 @@ PasskeyCredential::UserId(credential.user.id), PasskeyCredential::Username(credential.user.name.value_or("")), PasskeyCredential::DisplayName( - credential.user.display_name.value_or(""))); + credential.user.display_name.value_or("")), + /*creation_time=*/std::nullopt, credential.last_used_time); }); bool is_immediate = false;
diff --git a/chrome/browser/webauthn/passkey_unlock_manager.cc b/chrome/browser/webauthn/passkey_unlock_manager.cc index 110a8b3f..308369c8 100644 --- a/chrome/browser/webauthn/passkey_unlock_manager.cc +++ b/chrome/browser/webauthn/passkey_unlock_manager.cc
@@ -17,6 +17,7 @@ #include "chrome/grit/generated_resources.h" #include "components/sync/service/sync_service.h" #include "components/sync/service/sync_user_settings.h" +#include "device/fido/features.h" #include "google_apis/gaia/gaia_urls.h" #include "ui/base/l10n/l10n_util.h" @@ -56,7 +57,7 @@ observer_list_.RemoveObserver(observer); } -bool PasskeyUnlockManager::ShouldDisplayErrorUi() { +bool PasskeyUnlockManager::ShouldDisplayErrorUi() const { return ArePasskeysLocked() && ArePasskeysUnlockable(); } @@ -67,7 +68,7 @@ } std::u16string PasskeyUnlockManager::GetPasskeyErrorProfilePillTitle( - ExperimentArm experiment_arm) { + ExperimentArm experiment_arm) const { switch (experiment_arm) { case ExperimentArm::kUnlock: return l10n_util::GetStringUTF16(IDS_AVATAR_BUTTON_PASSKEYS_ERROR_UNLOCK); @@ -108,6 +109,17 @@ } } +// static +bool PasskeyUnlockManager::IsPasskeyUnlockErrorUiEnabled() { + return base::FeatureList::IsEnabled(device::kPasskeyUnlockErrorUi) && + base::FeatureList::IsEnabled(device::kPasskeyUnlockManager) && + base::FeatureList::IsEnabled(device::kWebAuthnOpportunisticRetrieval); +} + +void PasskeyUnlockManager::NotifyObserversForTesting() { + NotifyObservers(); +} + PasskeyModel* PasskeyUnlockManager::passkey_model() { return passkey_model_observation_.GetSource(); } @@ -168,12 +180,12 @@ base::Minutes(4)); } -bool PasskeyUnlockManager::ArePasskeysLocked() { +bool PasskeyUnlockManager::ArePasskeysLocked() const { // TODO(crbug.com/450238902): Also check enclave manager readiness. return has_passkeys_.value_or(false) && sync_active_; } -bool PasskeyUnlockManager::ArePasskeysUnlockable() { +bool PasskeyUnlockManager::ArePasskeysUnlockable() const { // TODO(crbug.com/450238902): Also check GPM PIN availability. // TODO(crbug.com/450551870): Check for more verification methods. return has_system_uv_.value_or(false); @@ -183,6 +195,7 @@ for (Observer& observer : observer_list_) { observer.OnPasskeyUnlockManagerShuttingDown(); } + enclave_manager_observation_.Reset(); passkey_model_observation_.Reset(); sync_service_observation_.Reset(); } @@ -218,4 +231,6 @@ NOTREACHED(); } +PasskeyUnlockManager::PasskeyUnlockManager() = default; + } // namespace webauthn
diff --git a/chrome/browser/webauthn/passkey_unlock_manager.h b/chrome/browser/webauthn/passkey_unlock_manager.h index 5a8f6f8..142d2d3 100644 --- a/chrome/browser/webauthn/passkey_unlock_manager.h +++ b/chrome/browser/webauthn/passkey_unlock_manager.h
@@ -59,18 +59,26 @@ void RemoveObserver(Observer* observer); // Synchronously tells whether the passkey error UI should be displayed. - bool ShouldDisplayErrorUi(); + virtual bool ShouldDisplayErrorUi() const; // Opens a browser tab with a challenge for unlocking passkeys. static void OpenTabWithPasskeyUnlockChallenge(Browser* browser); // Methods providing the UI strings depending on the experiment arms. - std::u16string GetPasskeyErrorProfilePillTitle(ExperimentArm experiment_arm); + std::u16string GetPasskeyErrorProfilePillTitle( + ExperimentArm experiment_arm) const; std::u16string GetPasskeyErrorProfileMenuDetails( ExperimentArm experiment_arm); std::u16string GetPasskeyErrorProfileMenuButtonLabel( ExperimentArm experiment_arm); + // Returns true if the passkey unlock error UI is enabled, depending on the + // feature flags. + static bool IsPasskeyUnlockErrorUiEnabled(); + + // Used in tests to notify observers. + void NotifyObserversForTesting(); + private: // Returns the PasskeyModel associated with the profile passed to the // constructor. @@ -104,8 +112,8 @@ void AsynchronouslyLoadEnclaveManager(); // Helpers for ShouldDisplayErrorUi(). - bool ArePasskeysLocked(); - bool ArePasskeysUnlockable(); + bool ArePasskeysLocked() const; + bool ArePasskeysUnlockable() const; void Shutdown() override; @@ -142,6 +150,9 @@ base::ScopedObservation<syncer::SyncService, syncer::SyncServiceObserver> sync_service_observation_{this}; base::WeakPtrFactory<PasskeyUnlockManager> weak_ptr_factory_{this}; + + protected: + PasskeyUnlockManager(); }; } // namespace webauthn
diff --git a/chrome/browser/win/registry_watcher.cc b/chrome/browser/win/registry_watcher.cc index 4fc6f4d..6456d610 100644 --- a/chrome/browser/win/registry_watcher.cc +++ b/chrome/browser/win/registry_watcher.cc
@@ -43,6 +43,10 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); } +size_t RegistryWatcher::GetRegistryKeyCount() const { + return registry_key_watchers_.size(); +} + void RegistryWatcher::OnRegistryKeyChanged() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Stop watching all other keys to prevent multiple callbacks.
diff --git a/chrome/browser/win/registry_watcher.h b/chrome/browser/win/registry_watcher.h index 91027006..2f44bbde 100644 --- a/chrome/browser/win/registry_watcher.h +++ b/chrome/browser/win/registry_watcher.h
@@ -31,6 +31,9 @@ RegistryWatcher(const RegistryWatcher&) = delete; RegistryWatcher& operator=(const RegistryWatcher&) = delete; + // Returns the number of key that this watcher is watching. + size_t GetRegistryKeyCount() const; + private: // Called when a change is detected on one of the registry keys. void OnRegistryKeyChanged();
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt index 5417537..b9e381d17 100644 --- a/chrome/build/android-arm64.pgo.txt +++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@ -chrome-android64-main-1763470123-f048c06668aef1168aca7d5a5575909b7f8e665a-39b5df2f39cbf6807a5166a4f611ab7a46173196.profdata +chrome-android64-main-1763485202-05e427c6c72c3920a3b5a1ba528568dfdda354ff-ba8d08d441a2e633ecb88a6653b787175282fdda.profdata
diff --git a/chrome/build/android-desktop-x64.pgo.txt b/chrome/build/android-desktop-x64.pgo.txt index 2113709..4890b73 100644 --- a/chrome/build/android-desktop-x64.pgo.txt +++ b/chrome/build/android-desktop-x64.pgo.txt
@@ -1 +1 @@ -chrome-android-desktop-x64-main-1763466677-7d2954d6734797cb45b93ba7d7568d0456bdaa15-2cf8c35edcf6e5a45c2a819b286068020e281346.profdata +chrome-android-desktop-x64-main-1763488604-2dc004c3eca9911a50f960f970c0fac4f50974d6-fbd9850b484fe65c7105cb3d13c3279cf101f0c6.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index db06983..1517763 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1763474335-426784be7994de098bb66bb8bca0acd9ef355598-d873d5f11b751ec1a7d73490ba25ac1662c5b794.profdata +chrome-mac-arm-main-1763495877-2bde383f2c64a521c3b6a4137c20b44d50806df7-f625369620654e6a87673b4e9922308d1fd58fd5.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index a6c9e56..9db80cc 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1763466677-656730b9ff572e64cbd3fb6b4e02c6f594d94735-2cf8c35edcf6e5a45c2a819b286068020e281346.profdata +chrome-mac-main-1763488604-1e1e0f4d8a490180362a8e60b59b8c6a3f73efce-fbd9850b484fe65c7105cb3d13c3279cf101f0c6.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt index 48b1cf9f..e07aefe6 100644 --- a/chrome/build/win-arm64.pgo.txt +++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@ -chrome-win-arm64-main-1763466677-63f19c5715cbf6a866fdd293ff68b444a3e0ef0a-2cf8c35edcf6e5a45c2a819b286068020e281346.profdata +chrome-win-arm64-main-1763488604-f0c4aa8c715b203c424b01c20e926d91fc4f9706-fbd9850b484fe65c7105cb3d13c3279cf101f0c6.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 0e23389c..9c62ad6 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1763445472-8f0a03ec381c3ce4495ca97a5ac08281201d07d6-60b30f893095f724fcd1d93c0c696d5a7c44f33f.profdata +chrome-win32-main-1763466677-3230553a7d6fe6bbc1d515c1221bc34ca468392b-2cf8c35edcf6e5a45c2a819b286068020e281346.profdata
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni index 820db50..29239d42 100644 --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni
@@ -598,6 +598,11 @@ "//ui/webui/resources:code_cache_resources", ] } + + if (is_mac || is_win) { + sources += [ "$root_gen_dir/chrome/updater_resources.pak" ] + deps += [ "//chrome/browser/resources/updater:resources" ] + } } }
diff --git a/chrome/chrome_proxy/chrome_proxy_main_win.cc b/chrome/chrome_proxy/chrome_proxy_main_win.cc index 96b9fa0..4fcbf22 100644 --- a/chrome/chrome_proxy/chrome_proxy_main_win.cc +++ b/chrome/chrome_proxy/chrome_proxy_main_win.cc
@@ -7,6 +7,7 @@ #include "base/command_line.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/path_service.h" #include "base/process/launch.h" #include "chrome/common/chrome_switches.h"
diff --git a/chrome/common/extensions/api/_api_features.json b/chrome/common/extensions/api/_api_features.json index 419e73ce..d673386 100644 --- a/chrome/common/extensions/api/_api_features.json +++ b/chrome/common/extensions/api/_api_features.json
@@ -704,6 +704,13 @@ "ECD28F2B60BDB3B4E566D6C60BD88BE0774044C1", // b/314208017 "C03440D5E6161ED58738ABA11586B1DB4B4DCA8A" // b/379564028#comment27 ] + }, { + "channel": "stable", + "contexts": ["webui_untrusted"], + "dependencies": [], + "matches": [ + "chrome-untrusted://class-tools-remote-display/*" + ] }], "loginScreenStorage": { "dependencies": ["permission:loginScreenStorage"],
diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc index 245fe091..2e7ae1d3 100644 --- a/chrome/common/logging_chrome.cc +++ b/chrome/common/logging_chrome.cc
@@ -23,6 +23,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/functional/bind.h" +#include "base/logging.h" #include "base/metrics/statistics_recorder.h" #include "base/path_service.h" #include "base/strings/string_number_conversions.h"
diff --git a/chrome/common/logging_chrome.h b/chrome/common/logging_chrome.h index 68657a3..1bb3aeb 100644 --- a/chrome/common/logging_chrome.h +++ b/chrome/common/logging_chrome.h
@@ -5,7 +5,7 @@ #ifndef CHROME_COMMON_LOGGING_CHROME_H_ #define CHROME_COMMON_LOGGING_CHROME_H_ -#include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/time/time.h" #include "build/build_config.h"
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc index b497a43..f96fccf 100644 --- a/chrome/common/webui_url_constants.cc +++ b/chrome/common/webui_url_constants.cc
@@ -137,6 +137,9 @@ kChromeUITermsHost, #endif kChromeUITranslateInternalsHost, +#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) + kChromeUIUpdaterHost, +#endif kChromeUIUsbInternalsHost, kChromeUIUserActionsHost, kChromeUIVersionHost,
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h index 6aa00c2..7deddf39 100644 --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h
@@ -612,6 +612,11 @@ "chrome://history-sync-optin/"; #endif +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) +inline constexpr char kChromeUIUpdaterHost[] = "updater"; +inline constexpr char kChromeUIUpdaterURL[] = "chrome://updater/"; +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) + #if ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && \ defined(TOOLKIT_VIEWS)) || \ defined(USE_AURA)
diff --git a/chrome/credential_provider/extension/extension_main.cc b/chrome/credential_provider/extension/extension_main.cc index b5cbed9c..09f8202 100644 --- a/chrome/credential_provider/extension/extension_main.cc +++ b/chrome/credential_provider/extension/extension_main.cc
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/process/memory.h" #include "base/task/thread_pool/thread_pool_instance.h" #include "base/win/process_startup_helper.h"
diff --git a/chrome/credential_provider/gaiacp/gaia_credential_provider_module.cc b/chrome/credential_provider/gaiacp/gaia_credential_provider_module.cc index f410da9c..2091ffa0 100644 --- a/chrome/credential_provider/gaiacp/gaia_credential_provider_module.cc +++ b/chrome/credential_provider/gaiacp/gaia_credential_provider_module.cc
@@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/strings/string_util.h" #include "base/win/win_util.h" #include "base/win/windows_version.h"
diff --git a/chrome/credential_provider/setup/setup.cc b/chrome/credential_provider/setup/setup.cc index 729ba14a..d1c1d7ea 100644 --- a/chrome/credential_provider/setup/setup.cc +++ b/chrome/credential_provider/setup/setup.cc
@@ -19,6 +19,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/process/memory.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/enterprise_companion/enterprise_companion.cc b/chrome/enterprise_companion/enterprise_companion.cc index 3d4c63b..a543dba 100644 --- a/chrome/enterprise_companion/enterprise_companion.cc +++ b/chrome/enterprise_companion/enterprise_companion.cc
@@ -14,6 +14,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/process/memory.h" #include "base/process/process_handle.h"
diff --git a/chrome/enterprise_companion/test/run_all_integration_tests.cc b/chrome/enterprise_companion/test/run_all_integration_tests.cc index 72a1f46..177f914 100644 --- a/chrome/enterprise_companion/test/run_all_integration_tests.cc +++ b/chrome/enterprise_companion/test/run_all_integration_tests.cc
@@ -8,6 +8,7 @@ #include "base/compiler_specific.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/test/launcher/unit_test_launcher.h" #include "base/test/test_suite.h" #include "build/build_config.h"
diff --git a/chrome/enterprise_companion/test/run_all_unittests.cc b/chrome/enterprise_companion/test/run_all_unittests.cc index c453e67..5fcbb496 100644 --- a/chrome/enterprise_companion/test/run_all_unittests.cc +++ b/chrome/enterprise_companion/test/run_all_unittests.cc
@@ -4,6 +4,7 @@ #include "base/functional/bind.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/test/launcher/unit_test_launcher.h" #include "base/test/test_suite.h"
diff --git a/chrome/enterprise_companion/test/test_crashpad_embedder.cc b/chrome/enterprise_companion/test/test_crashpad_embedder.cc index 29d3982e..91a7c21 100644 --- a/chrome/enterprise_companion/test/test_crashpad_embedder.cc +++ b/chrome/enterprise_companion/test/test_crashpad_embedder.cc
@@ -6,6 +6,7 @@ #include "base/check.h" #include "base/command_line.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/notreached.h" #include "build/build_config.h" #include "chrome/enterprise_companion/crash_client.h"
diff --git a/chrome/installer/gcapi/gcapi_dll.cc b/chrome/installer/gcapi/gcapi_dll.cc index 9174bee..fc849346 100644 --- a/chrome/installer/gcapi/gcapi_dll.cc +++ b/chrome/installer/gcapi/gcapi_dll.cc
@@ -7,6 +7,7 @@ #include "base/at_exit.h" #include "base/command_line.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" // Visual Studio needs at least one C++ file in project http://goo.gl/roro9
diff --git a/chrome/installer/util/logging_installer.cc b/chrome/installer/util/logging_installer.cc index 274f2c3..4734595 100644 --- a/chrome/installer/util/logging_installer.cc +++ b/chrome/installer/util/logging_installer.cc
@@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - #include "chrome/installer/util/logging_installer.h" #include <windows.h> @@ -19,6 +18,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/logging_win.h" #include "base/path_service.h" #include "base/strings/string_util.h"
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 8f00ff2..776e5ec 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
@@ -2713,24 +2713,6 @@ } TEST_F(ReadAnythingAppControllerTest, - GetCurrentText_SuperscriptCombinedWithCurrentSegment) { - std::u16string sentence1 = u"And I am almost there."; - std::u16string sentence2 = u"2"; - ui::AXNodeData static_text1 = test::TextNode(kId1, sentence1); - ui::AXNodeData static_text2 = test::SuperscriptNode(kId2, sentence2); - - SendUpdateAndDistillNodes({std::move(static_text1), std::move(static_text2)}); - - std::vector<ReadAloudTextSegment> next_segments = GetCurrentTextSegments(); - - ExpectNodesMapToEntireText(next_segments, {kId1, kId2}, - {sentence1, sentence2}); - - // Nodes are empty at the end of the new tree. - MoveToNextAndAssertEmpty(); -} - -TEST_F(ReadAnythingAppControllerTest, GetCurrentText_SuperscriptWithBracketsCombinedWithCurrentSegment) { std::u16string sentence1 = u"And I am almost there."; std::u16string sentence2 = u"[2]"; @@ -3065,6 +3047,24 @@ }; TEST_F(ReadAnythingAppControllerV8SegmentationTest, + GetCurrentText_SuperscriptCombinedWithCurrentSegment) { + std::u16string sentence1 = u"And I am almost there."; + std::u16string sentence2 = u"2"; + ui::AXNodeData static_text1 = test::TextNode(kId1, sentence1); + ui::AXNodeData static_text2 = test::SuperscriptNode(kId2, sentence2); + + SendUpdateAndDistillNodes({std::move(static_text1), std::move(static_text2)}); + + std::vector<ReadAloudTextSegment> next_segments = GetCurrentTextSegments(); + + ExpectNodesMapToEntireText(next_segments, {kId1, kId2}, + {sentence1, sentence2}); + + // Nodes are empty at the end of the new tree. + MoveToNextAndAssertEmpty(); +} + +TEST_F(ReadAnythingAppControllerV8SegmentationTest, GetCurrentText_IncludesListMarkers) { // Simulate breaking up the brackets across a link. std::string marker_html_tag = "::marker";
diff --git a/chrome/renderer/accessibility/read_anything/read_anything_app_model.cc b/chrome/renderer/accessibility/read_anything/read_anything_app_model.cc index 0716040..8156634f 100644 --- a/chrome/renderer/accessibility/read_anything/read_anything_app_model.cc +++ b/chrome/renderer/accessibility/read_anything/read_anything_app_model.cc
@@ -1033,6 +1033,7 @@ case ui::AXEventGenerator::Event::CHECKED_STATE_DESCRIPTION_CHANGED: case ui::AXEventGenerator::Event::CHILDREN_CHANGED: case ui::AXEventGenerator::Event::CONTROLS_CHANGED: + case ui::AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED: case ui::AXEventGenerator::Event::DETAILS_CHANGED: case ui::AXEventGenerator::Event::DESCRIBED_BY_CHANGED: case ui::AXEventGenerator::Event::DESCRIPTION_CHANGED:
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 04a4c1c..1b40ed7 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -4469,7 +4469,10 @@ "../browser/invalidation/profile_invalidation_provider_factory_browsertest.cc", "../browser/net/nss_context_chromeos_browsertest.cc", ] - deps += [ "//chrome/browser/ui/download" ] + deps += [ + "//chrome/browser/default_browser:browser_tests", + "//chrome/browser/ui/download", + ] } if (include_js_tests) { @@ -6246,6 +6249,7 @@ args += [ "--chromium-output-directory=@WrappedPath(.)" ] data_deps += [ + "//base:base_perftests", "//components:components_perftests", "//testing:run_perf_test", "//third_party/dawn/src/tint/cmd/bench:bench_cmd", @@ -6253,7 +6257,6 @@ if (!is_android) { data_deps += [ - "//base:base_perftests", "//chrome/test:load_library_perf_tests", "//components/tracing:tracing_perftests", "//testing:run_perf_test", @@ -6477,6 +6480,7 @@ "../browser/enterprise/reporting/report_generator_unittest.cc", "../browser/enterprise/reporting/report_request_queue_generator_unittest.cc", "../browser/enterprise/reporting/report_scheduler_unittest.cc", + "../browser/enterprise/encryption/cache_encryption_provider_impl_unittest.cc", "../browser/enterprise/signin/interstitials/managed_profile_required_page_unittest.cc", "../browser/enterprise/util/managed_browser_utils_unittest.cc", "../browser/external_protocol/external_protocol_handler_unittest.cc", @@ -8391,6 +8395,8 @@ "//chrome/browser/resource_coordinator", "//chrome/browser/send_tab_to_self:unit_tests", "//chrome/browser/signin:signin_promo", + "//chrome/browser/startup", + "//chrome/browser/startup:unit_tests", "//chrome/browser/tab_group_sync:factories", "//chrome/browser/task_manager/common", "//chrome/browser/ui/bookmarks:unit_tests", @@ -10415,6 +10421,10 @@ } deps += [ "//components/enterprise:test_support" ] + + if (is_win) { + deps += [ "//chrome/browser/win:registry_watcher" ] + } } if (toolkit_views) { @@ -11233,20 +11243,20 @@ sources = [ "../browser/about_flags_browsertest.cc", - "../browser/ai/ai_on_device_browsertest.cc", - "../browser/browser_keyevents_browsertest.cc", - "../browser/chrome_render_widget_host_browsertests.cc", - "../browser/controlled_frame/controlled_frame_interactive_browsertest.cc", - "../browser/devtools/devtools_interactive_browsertest.cc", + "../browser/ai/ai_on_device_interactive_uitest.cc", + "../browser/browser_keyevents_interactive_uitest.cc", + "../browser/chrome_render_widget_host_interactive_uitest.cc", + "../browser/controlled_frame/controlled_frame_interactive_uitest.cc", + "../browser/devtools/devtools_interactive_uitest.cc", "../browser/fenced_frame/fenced_frame_viewport_observer_interactive_uitest.cc", - "../browser/focus_ring_browsertest.cc", + "../browser/focus_ring_interactive_uitest.cc", "../browser/media/webrtc/conditional_focus_interactive_uitest.cc", "../browser/media/webrtc/display_media_access_handler_interactive_uitest.cc", "../browser/media/webrtc/media_stream_permission_interactive_uitest.cc", "../browser/media/webrtc/webrtc_interactive_uitest.cc", "../browser/media/webrtc/webrtc_mediadevices_interactive_uitest.cc", "../browser/mouse_events_interactive_uitest.cc", - "../browser/net/cookie_encryption_provider_browsertest.cc", + "../browser/net/cookie_encryption_provider_interactive_uitest.cc", "../browser/new_tab_page/modules/new_tab_page_modules_interactive_uitest.cc", "../browser/new_tab_page/modules/test_support.cc", "../browser/new_tab_page/modules/test_support.h", @@ -11260,24 +11270,24 @@ "../browser/password_manager/password_manager_interactive_uitest.cc", "../browser/password_manager/password_user_education_interactive_uitest.cc", "../browser/permissions/one_time_permissions_tracker_helper_interactive_uitest.cc", - "../browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc", + "../browser/preloading/prerender/prerender_omnibox_interactive_uitest.cc", "../browser/renderer_context_menu/link_to_text_menu_observer_interactive_uitest.cc", "../browser/renderer_context_menu/render_view_context_menu_browsertest_util.cc", "../browser/renderer_context_menu/render_view_context_menu_browsertest_util.h", "../browser/renderer_context_menu/render_view_context_menu_interactive_uitest.cc", - "../browser/select_popup_browsertest.cc", + "../browser/select_popup_interactive_uitest.cc", "../browser/sessions/session_restore_interactive_uitest.cc", - "../browser/site_isolation/site_per_process_interactive_browsertest.cc", - "../browser/site_isolation/site_per_process_text_input_browsertest.cc", - "../browser/ssl/ask_before_http_dialog_controller_uitest.cc", - "../browser/ssl/typed_navigation_upgrade_throttle_browsertest.cc", + "../browser/site_isolation/site_per_process_interactive_uitest.cc", + "../browser/site_isolation/site_per_process_text_input_interactive_uitest.cc", + "../browser/ssl/ask_before_http_dialog_controller_interactive_uitest.cc", + "../browser/ssl/typed_navigation_upgrade_throttle_interactive_uitest.cc", "../browser/supervised_user/incognito_mode_interactive_uitest.cc", - "../browser/ui/browser_command_controller_interactive_browsertest.cc", - "../browser/ui/browser_focus_uitest.cc", + "../browser/ui/browser_command_controller_interactive_uitest.cc", + "../browser/ui/browser_focus_interactive_uitest.cc", "../browser/ui/extensions/controlled_home_dialog_interactive_uitest.cc", "../browser/ui/fullscreen_keyboard_browsertest_base.cc", "../browser/ui/fullscreen_keyboard_browsertest_base.h", - "../browser/ui/keyboard_lock_interactive_browsertest.cc", + "../browser/ui/keyboard_lock_interactive_uitest.cc", "../browser/ui/read_anything/read_anything_service_interactive_uitest.cc", "../browser/ui/read_anything/read_anything_side_panel_controller_interactive_uitest.cc", "../browser/ui/test/browser_ui_interactive_uitest.cc", @@ -11289,7 +11299,7 @@ "../browser/ui/test/test_browser_dialog.cc", "../browser/ui/test/test_browser_dialog.h", "../browser/ui/views/autofill/payments/bnpl_tos_view_desktop_interactive_uitest.cc", - "../browser/ui/views/autofill/payments/iban_bubble_view_uitest.cc", + "../browser/ui/views/autofill/payments/iban_bubble_view_interactive_uitest.cc", "../browser/ui/views/autofill/payments/select_bnpl_issuer_dialog_interactive_uitest.cc", "../browser/ui/views/content_test_utils.cc", "../browser/ui/views/content_test_utils.h", @@ -11301,22 +11311,22 @@ "../browser/ui/views/extensions/extensions_menu_view_interactive_uitest.cc", "../browser/ui/views/file_system_access/file_system_access_usage_bubble_interactive_uitest.cc", "../browser/ui/views/location_bar/content_setting_image_view_interactive_uitest.cc", - "../browser/ui/views/location_bar/find_bar_interactive_ui_tests.cc", + "../browser/ui/views/location_bar/find_bar_interactive_uitest.cc", "../browser/ui/views/media_router/media_router_dialog_controller_views_interactive_uitest.cc", "../browser/ui/views/new_tab_footer/footer_interactive_uitest.cc", "../browser/ui/views/optimization_guide/optimization_guide_icon_view_interactive_uitest.cc", "../browser/ui/views/page_info/page_info_bubble_view_interactive_uitest.cc", "../browser/ui/views/permissions/midi_permissions_flow_interactive_uitest.cc", "../browser/ui/views/permissions/permission_rhs_indicators_interactive_uitest.cc", - "../browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc", - "../browser/ui/views/promos/ios_promo_bubble_browsertest.cc", + "../browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_uitest.cc", + "../browser/ui/views/promos/ios_promo_bubble_interactive_uitest.cc", "../browser/ui/views/session_crashed_bubble_view_interactive_uitest.cc", "../browser/ui/views/side_panel/comments/comments_side_panel_coordinator_interactive_uitest.cc", "../browser/ui/views/tab_sharing/tab_sharing_ui_interactive_uitest.cc", "../browser/ui/views/tabs/vertical/vertical_tab_strip_bottom_container_interactive_uitest.cc", "../browser/ui/views/tabs/vertical/vertical_tab_strip_top_container_interactive_uitest.cc", "../browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_interactive_uitest.cc", - "../browser/ui/views/web_dialog_view_browsertest.cc", + "../browser/ui/views/web_dialog_view_interactive_uitest.cc", "../browser/ui/web_applications/web_app_interactive_uitest.cc", "../browser/ui/webui/cr_components/history_embeddings/history_embeddings_interactive_uitest.cc", "../browser/ui/webui/downloads/downloads_page_interactive_uitest.cc", @@ -11325,7 +11335,7 @@ "../browser/ui/webui/settings/settings_interactive_uitest.cc", "../browser/ui/webui/side_panel/customize_chrome/customize_chrome_interactive_uitest.cc", "../browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_interactive_uitest.cc", - "../browser/webapps/web_app_offline_browsertest.cc", + "../browser/webapps/web_app_offline_interactive_uitest.cc", "../browser/webauthn/chrome_webauthn_autofill_interactive_uitest.cc", "../browser/webauthn/webauthn_focus_interactive_uitest.cc", "//ui/base/clipboard/clipboard_unittest.cc", @@ -11472,6 +11482,7 @@ "//chrome/browser/ui/toasts:interactive_ui_tests", "//chrome/browser/ui/toolbar", "//chrome/browser/ui/views/bubble", + "//chrome/browser/ui/views/contextual_tasks:interactive_ui_tests", "//chrome/browser/ui/views/download", "//chrome/browser/ui/views/infobars", "//chrome/browser/ui/views/location_bar",
diff --git a/chrome/test/accessibility/ax_client/ax_client_main.cc b/chrome/test/accessibility/ax_client/ax_client_main.cc index 0974891a..cf57aec6 100644 --- a/chrome/test/accessibility/ax_client/ax_client_main.cc +++ b/chrome/test/accessibility/ax_client/ax_client_main.cc
@@ -11,6 +11,7 @@ #include "base/command_line.h" #include "base/functional/callback.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/notreached.h" #include "base/process/memory.h" #include "base/run_loop.h"
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/page/CtaPageStation.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/page/CtaPageStation.java index fd58bca..d0c781b 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/page/CtaPageStation.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/page/CtaPageStation.java
@@ -108,6 +108,8 @@ * from the app menu. */ public IncognitoNewTabPageStation openNewIncognitoTabFast() { + assert mIsIncognito || !IncognitoUtils.shouldOpenIncognitoAsWindow() + : "Incognito tabs can only be opened in incognito windows."; return ChromeTriggers.invokeCustomMenuActionTo(R.id.new_incognito_tab_menu_id, this) .arriveAt(IncognitoNewTabPageStation.newBuilder().initOpeningNewTab().build()); }
diff --git a/chrome/test/base/chromeos/crosier/helper/fake_chrome/fake_chrome_main.cc b/chrome/test/base/chromeos/crosier/helper/fake_chrome/fake_chrome_main.cc index c97c4d5..367415b0 100644 --- a/chrome/test/base/chromeos/crosier/helper/fake_chrome/fake_chrome_main.cc +++ b/chrome/test/base/chromeos/crosier/helper/fake_chrome/fake_chrome_main.cc
@@ -7,6 +7,7 @@ #include "base/at_exit.h" #include "base/command_line.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/run_loop.h" #include "base/task/single_thread_task_executor.h"
diff --git a/chrome/test/chromedriver/logging.cc b/chrome/test/chromedriver/logging.cc index 7d600ff..3c91e36 100644 --- a/chrome/test/chromedriver/logging.cc +++ b/chrome/test/chromedriver/logging.cc
@@ -18,6 +18,7 @@ #include "base/containers/contains.h" #include "base/json/json_reader.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/strings/stringprintf.h" #include "base/time/time.h" #include "base/values.h"
diff --git a/chrome/test/chromedriver/net/websocket.cc b/chrome/test/chromedriver/net/websocket.cc index 5f825892..9b69c6f 100644 --- a/chrome/test/chromedriver/net/websocket.cc +++ b/chrome/test/chromedriver/net/websocket.cc
@@ -260,10 +260,9 @@ if (state_ == CONNECTING) { OnReadDuringHandshake( - read_buffer_->span().first(base::checked_cast<size_t>(code))); + read_buffer_->first(base::checked_cast<size_t>(code))); } else if (state_ == OPEN) { - OnReadDuringOpen( - read_buffer_->span().first(base::checked_cast<size_t>(code))); + OnReadDuringOpen(read_buffer_->first(base::checked_cast<size_t>(code))); } // If we were called by the event loop due to arrival of data, call Read()
diff --git a/chrome/test/data/privacy_budget/calls_canvas_to_blob.html b/chrome/test/data/privacy_budget/calls_canvas_to_blob.html deleted file mode 100644 index 81d1737..0000000 --- a/chrome/test/data/privacy_budget/calls_canvas_to_blob.html +++ /dev/null
@@ -1,5 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>Privacy Budget: Test page that calls Canvas.toBlob.</title> -<script src="test_utils.js"></script> -<script src="canvas_to_blob.js"></script>
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 028973d..682ca49 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
@@ -1696,6 +1696,11 @@ conversationChangeRequest.desiredView, ClientView.CONVERSATION); } + async testRemoveBlankInstanceOnClose() { + assertDefined(this.host.closePanel); + await this.host.closePanel(); + } + async testJournal() { assertDefined(this.host.getJournalHost); const journalHost = this.host.getJournalHost();
diff --git a/chrome/test/data/webui/settings/autofill_page_index_test.ts b/chrome/test/data/webui/settings/autofill_page_index_test.ts index 4a5f6e5..7865429 100644 --- a/chrome/test/data/webui/settings/autofill_page_index_test.ts +++ b/chrome/test/data/webui/settings/autofill_page_index_test.ts
@@ -32,7 +32,10 @@ } setup(function() { - loadTimeData.overrideValues({showAutofillAiControl: false}); + loadTimeData.overrideValues({ + enableYourSavedInfoSettingsPage: false, + showAutofillAiControl: false, + }); resetRouterForTesting(); return createAutofillPageIndex(); });
diff --git a/chrome/test/data/webui/settings/autofill_page_test.ts b/chrome/test/data/webui/settings/autofill_page_test.ts index 74bef672..a887bf0 100644 --- a/chrome/test/data/webui/settings/autofill_page_test.ts +++ b/chrome/test/data/webui/settings/autofill_page_test.ts
@@ -151,6 +151,7 @@ setup(async function() { loadTimeData.overrideValues({ + enableYourSavedInfoSettingsPage: false, shouldShowPayOverTimeSettings: true, });
diff --git a/chrome/test/data/webui/settings/route_test.ts b/chrome/test/data/webui/settings/route_test.ts index e259ca3..5053573 100644 --- a/chrome/test/data/webui/settings/route_test.ts +++ b/chrome/test/data/webui/settings/route_test.ts
@@ -336,6 +336,7 @@ autofill: true, }); loadTimeData.overrideValues({ + enableYourSavedInfoSettingsPage: false, showAutofillAiControl: true, }); resetRouterForTesting();
diff --git a/chrome/test/data/webui/settings/settings_menu_interactive_ui_test.ts b/chrome/test/data/webui/settings/settings_menu_interactive_ui_test.ts index 2333406..b4d3876 100644 --- a/chrome/test/data/webui/settings/settings_menu_interactive_ui_test.ts +++ b/chrome/test/data/webui/settings/settings_menu_interactive_ui_test.ts
@@ -3,7 +3,7 @@ // found in the LICENSE file. import type {SettingsMenuElement} from 'chrome://settings/settings.js'; -import {resetPageVisibilityForTesting} from 'chrome://settings/settings.js'; +import {loadTimeData, resetPageVisibilityForTesting} from 'chrome://settings/settings.js'; import {assertEquals} from 'chrome://webui-test/chai_assert.js'; suite('SettingsMenuInteractiveUITest', () => { @@ -16,6 +16,12 @@ } test('focusFirstItem', () => { + resetPageVisibilityForTesting({ + people: true, + autofill: true, + }); + + loadTimeData.overrideValues({enableYourSavedInfoSettingsPage: false}); createMenu(); settingsMenu.focusFirstItem(); assertEquals(settingsMenu.$.people, settingsMenu.shadowRoot!.activeElement); @@ -24,9 +30,32 @@ people: false, autofill: true, }); + createMenu(); settingsMenu.focusFirstItem(); assertEquals( settingsMenu.$.autofill, settingsMenu.shadowRoot!.activeElement); }); + + test('focusFirstItemWithYourSavedInfoPageOn', () => { + resetPageVisibilityForTesting({ + people: true, + yourSavedInfo: true, + }); + + loadTimeData.overrideValues({enableYourSavedInfoSettingsPage: true}); + createMenu(); + settingsMenu.focusFirstItem(); + assertEquals(settingsMenu.$.people, settingsMenu.shadowRoot!.activeElement); + + resetPageVisibilityForTesting({ + people: false, + yourSavedInfo: true, + }); + + createMenu(); + settingsMenu.focusFirstItem(); + assertEquals( + settingsMenu.$.yourSavedInfo, settingsMenu.shadowRoot!.activeElement); + }); });
diff --git a/chrome/test/data/webui/settings/settings_menu_test.ts b/chrome/test/data/webui/settings/settings_menu_test.ts index e3b106a..49885326 100644 --- a/chrome/test/data/webui/settings/settings_menu_test.ts +++ b/chrome/test/data/webui/settings/settings_menu_test.ts
@@ -180,6 +180,11 @@ }); test('autofillPageMenuClick', async function() { + loadTimeData.overrideValues({enableYourSavedInfoSettingsPage: false}); + resetRouterForTesting(); + createSettingsMenu(); + await flushTasks(); + const entry = settingsMenu.shadowRoot!.querySelector<HTMLElement>( 'a[href=\'/autofill\']'); assertTrue(!!entry);
diff --git a/chrome/test/data/webui/side_panel/read_anything/read_aloud_model_test.ts b/chrome/test/data/webui/side_panel/read_anything/read_aloud_model_test.ts index 0cf2bcd..c2790ee 100644 --- a/chrome/test/data/webui/side_panel/read_anything/read_aloud_model_test.ts +++ b/chrome/test/data/webui/side_panel/read_anything/read_aloud_model_test.ts
@@ -28,6 +28,27 @@ assertEquals(sentence, node.getText().trim()); } + // Creates a linked citation intended to mimic citations in Wikipedia and + // other articles. Of the format: + // <sup><a><span>[</span>text content<span>]</span></a></sup> + function createLinkedCitationSuperscript(text: string): HTMLElement { + const superscript = document.createElement('sup'); + const link = document.createElement('a'); + const openingBracketSpan = document.createElement('span'); + const textSpan = document.createTextNode(text); + const closingBracketSpan = document.createElement('span'); + + openingBracketSpan.textContent = '['; + closingBracketSpan.textContent = ']'; + + link.appendChild(openingBracketSpan); + link.appendChild(textSpan); + link.appendChild(closingBracketSpan); + + superscript.appendChild(link); + return superscript; + } + setup(() => { // Clearing the DOM should always be done first. document.body.innerHTML = window.trustedTypes!.emptyHTML; @@ -1094,4 +1115,99 @@ getReadAloudModel().moveSpeechForward(); assertTextEmpty(); }); + + test( + 'getCurrentTextSegments superscript combined with current segment', + async () => { + const div = document.createElement('div'); + const sentence1 = document.createElement('b'); + sentence1.textContent = 'And I am almost there.'; + + const sentence2 = document.createElement('sup'); + sentence2.textContent = '2'; + + div.appendChild(sentence1); + div.appendChild(sentence2); + document.body.appendChild(div); + + await microtasksFinished(); + getReadAloudModel().init(ReadAloudNode.create(document.body)!); + assertEquals( + sentence1.textContent + sentence2.textContent, + getReadAloudModel().getCurrentTextContent().trim()); + + getReadAloudModel().moveSpeechForward(); + assertTextEmpty(); + }); + + test( + 'getCurrentTextSegments superscript combined with preceding sentence instead of succeeding sentence', + async () => { + // Create a container element to hold the simplified structure + const simplifiedContainer = document.createElement('p'); + + // Text before the citation + simplifiedContainer.appendChild( + document.createTextNode('I\'m coming!')); + + // <sup><a><span>[</span>b<span>]</span></a></sup> + const citation = createLinkedCitationSuperscript('b'); + simplifiedContainer.appendChild(citation); + + // Text after the citation. + simplifiedContainer.appendChild( + document.createTextNode(' Wait for me.')); + + document.body.appendChild(simplifiedContainer); + + await microtasksFinished(); + getReadAloudModel().init(ReadAloudNode.create(document.body)!); + assertEquals( + 'I\'m coming![b]', + getReadAloudModel().getCurrentTextContent().trim()); + getReadAloudModel().moveSpeechForward(); + assertEquals( + 'Wait for me.', getReadAloudModel().getCurrentTextContent().trim()); + + getReadAloudModel().moveSpeechForward(); + assertTextEmpty(); + }); + + test( + 'getCurrentTextSegments superscript combined with preceding sentence with multiple superscripts', + async () => { + // Create a container element to hold the simplified structure + const simplifiedContainer = document.createElement('p'); + + // Text before the citation + simplifiedContainer.appendChild( + document.createTextNode('Wait for me, I\'m coming.')); + + // <sup><a><span>[</span>7<span>]</span></a></sup> + const citation7 = createLinkedCitationSuperscript('7'); + simplifiedContainer.appendChild(citation7); + + // <sup><a><span>[</span>8<span>]</span></a></sup> + const citation8 = createLinkedCitationSuperscript('8'); + simplifiedContainer.appendChild(citation8); + + // Text after the citation. + simplifiedContainer.appendChild( + document.createTextNode(' Show the way so we can see.')); + + document.body.appendChild(simplifiedContainer); + + await microtasksFinished(); + getReadAloudModel().init(ReadAloudNode.create(document.body)!); + assertEquals( + 'Wait for me, I\'m coming.[7][8]', + getReadAloudModel().getCurrentTextContent().trim()); + getReadAloudModel().moveSpeechForward(); + assertEquals( + 'Show the way so we can see.', + getReadAloudModel().getCurrentTextContent().trim()); + + getReadAloudModel().moveSpeechForward(); + assertTextEmpty(); + }); });
diff --git a/chrome/test/media/BUILD.gn b/chrome/test/media/BUILD.gn index 3f7b00e..e8dec6df 100644 --- a/chrome/test/media/BUILD.gn +++ b/chrome/test/media/BUILD.gn
@@ -5,5 +5,8 @@ # Lab performance tests group("performance_tests") { testonly = true - deps = [ "//chrome/test/media/performance:videostack_performance_test" ] + deps = [ + "//chrome/test/media/performance:openscreen_cast_performance_test", + "//chrome/test/media/performance:videostack_performance_test", + ] }
diff --git a/chrome/test/media/performance/BUILD.gn b/chrome/test/media/performance/BUILD.gn index b6761b6..0e4a75ac 100644 --- a/chrome/test/media/performance/BUILD.gn +++ b/chrome/test/media/performance/BUILD.gn
@@ -15,3 +15,15 @@ "//build/fuchsia/test/repeating_log.py", ] } + +python_library("openscreen_cast_performance_test") { + testonly = true + pydeps_file = "openscreen_cast_performance_test.pydeps" + data = [ + "//.vpython3", + "//build/util/lib/proto", + "//fuchsia_web/av_testing/server.py", + "//fuchsia_web/av_testing/video.html", + "//build/fuchsia/test/repeating_log.py", + ] +}
diff --git a/chrome/test/media_router/performance/openscreen_cast_performance_test.py b/chrome/test/media/performance/openscreen_cast_performance_test.py similarity index 100% rename from chrome/test/media_router/performance/openscreen_cast_performance_test.py rename to chrome/test/media/performance/openscreen_cast_performance_test.py
diff --git a/chrome/test/media_router/performance/openscreen_cast_performance_test.pydeps b/chrome/test/media/performance/openscreen_cast_performance_test.pydeps similarity index 71% rename from chrome/test/media_router/performance/openscreen_cast_performance_test.pydeps rename to chrome/test/media/performance/openscreen_cast_performance_test.pydeps index a125422..3f1fd43 100644 --- a/chrome/test/media_router/performance/openscreen_cast_performance_test.pydeps +++ b/chrome/test/media/performance/openscreen_cast_performance_test.pydeps
@@ -1,5 +1,5 @@ # Generated by running: -# build/print_python_deps.py --root chrome/test/media_router/performance --output chrome/test/media_router/performance/openscreen_cast_performance_test.pydeps chrome/test/media_router/performance/openscreen_cast_performance_test.py +# build/print_python_deps.py --root chrome/test/media/performance --output chrome/test/media/performance/openscreen_cast_performance_test.pydeps chrome/test/media/performance/openscreen_cast_performance_test.py ../../../../build/fuchsia/test/repeating_log.py ../../../../build/util/lib/proto/average.py ../../../../build/util/lib/proto/count.py
diff --git a/chrome/test/media_router/BUILD.gn b/chrome/test/media_router/BUILD.gn index bb5ca3f..8fa580f 100644 --- a/chrome/test/media_router/BUILD.gn +++ b/chrome/test/media_router/BUILD.gn
@@ -112,12 +112,6 @@ ] } -# Lab performance tests -group("performance_tests") { - testonly = true - deps = [ "//chrome/test/media_router/performance:openscreen_cast_performance_test" ] -} - # Run separately. TODO: Documentation on how to run if (enable_downstream_media_tests) { group("swarming_tests") {
diff --git a/chrome/test/media_router/performance/BUILD.gn b/chrome/test/media_router/performance/BUILD.gn deleted file mode 100644 index b0b0ec8..0000000 --- a/chrome/test/media_router/performance/BUILD.gn +++ /dev/null
@@ -1,13 +0,0 @@ -import("//build/config/python.gni") - -python_library("openscreen_cast_performance_test") { - testonly = true - pydeps_file = "openscreen_cast_performance_test.pydeps" - data = [ - "//.vpython3", - "//build/util/lib/proto", - "//fuchsia_web/av_testing/server.py", - "//fuchsia_web/av_testing/video.html", - "//build/fuchsia/test/repeating_log.py", - ] -}
diff --git a/chrome/updater/policy/mac/managed_preference_policy_manager_impl.mm b/chrome/updater/policy/mac/managed_preference_policy_manager_impl.mm index 14959df..d19a692 100644 --- a/chrome/updater/policy/mac/managed_preference_policy_manager_impl.mm +++ b/chrome/updater/policy/mac/managed_preference_policy_manager_impl.mm
@@ -13,17 +13,18 @@ namespace { // Constants for managed preference policy keys. -NSString* kGlobalPolicyKey = @"global"; -NSString* kUpdateDefaultKey = @"UpdateDefault"; -NSString* kDownloadPreferenceKey = @"DownloadPreference"; -NSString* kUpdatesSuppressedStartHourKey = @"UpdatesSuppressedStartHour"; -NSString* kUpdatesSuppressedStartMinuteKey = @"UpdatesSuppressedStartMin"; -NSString* kUpdatesSuppressedDurationMinuteKey = @"UpdatesSuppressedDurationMin"; -NSString* kTargetChannelKey = @"TargetChannel"; -NSString* kTargetVersionPrefixKey = @"TargetVersionPrefix"; -NSString* kRollbackToTargetVersionKey = @"RollbackToTargetVersion"; -NSString* kMajorVersionRolloutKey = @"MajorVersionRolloutPolicy"; -NSString* kMinorVersionRolloutKey = @"MinorVersionRolloutPolicy"; +NSString* const kGlobalPolicyKey = @"global"; +NSString* const kUpdateDefaultKey = @"UpdateDefault"; +NSString* const kDownloadPreferenceKey = @"DownloadPreference"; +NSString* const kUpdatesSuppressedStartHourKey = @"UpdatesSuppressedStartHour"; +NSString* const kUpdatesSuppressedStartMinuteKey = @"UpdatesSuppressedStartMin"; +NSString* const kUpdatesSuppressedDurationMinuteKey = + @"UpdatesSuppressedDurationMin"; +NSString* const kTargetChannelKey = @"TargetChannel"; +NSString* const kTargetVersionPrefixKey = @"TargetVersionPrefix"; +NSString* const kRollbackToTargetVersionKey = @"RollbackToTargetVersion"; +NSString* const kMajorVersionRolloutKey = @"MajorVersionRolloutPolicy"; +NSString* const kMinorVersionRolloutKey = @"MinorVersionRolloutPolicy"; } // namespace namespace updater {
diff --git a/chrome/updater/test/unit_test_util.cc b/chrome/updater/test/unit_test_util.cc index 1ce0a54..0041430 100644 --- a/chrome/updater/test/unit_test_util.cc +++ b/chrome/updater/test/unit_test_util.cc
@@ -23,6 +23,7 @@ #include "base/functional/function_ref.h" #include "base/i18n/time_formatting.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/memory/scoped_refptr.h" #include "base/path_service.h" #include "base/process/kill.h"
diff --git a/chrome/updater/util/util.cc b/chrome/updater/util/util.cc index e96bdf1..50083e6 100644 --- a/chrome/updater/util/util.cc +++ b/chrome/updater/util/util.cc
@@ -31,6 +31,7 @@ #include "base/functional/callback.h" #include "base/functional/function_ref.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/path_service.h" #include "base/strings/escape.h" #include "base/strings/strcat.h"
diff --git a/chrome/utility/safe_browsing/mac/dmg_fuzzer.cc b/chrome/utility/safe_browsing/mac/dmg_fuzzer.cc index f21b940e..9bd2fe6 100644 --- a/chrome/utility/safe_browsing/mac/dmg_fuzzer.cc +++ b/chrome/utility/safe_browsing/mac/dmg_fuzzer.cc
@@ -11,6 +11,7 @@ #include "base/command_line.h" #include "base/containers/span.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "chrome/utility/safe_browsing/mac/hfs.h" #include "chrome/utility/safe_browsing/mac/read_stream.h" #include "chrome/utility/safe_browsing/mac/udif.h"
diff --git a/chrome/windows_services/service_program/logging_support.cc b/chrome/windows_services/service_program/logging_support.cc index ddba9c7..e94e765d 100644 --- a/chrome/windows_services/service_program/logging_support.cc +++ b/chrome/windows_services/service_program/logging_support.cc
@@ -10,6 +10,7 @@ #include "base/command_line.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/process/process.h" #include "base/strings/string_number_conversions.h" #include "base/win/scoped_handle.h"
diff --git a/chromecast/app/cast_main_delegate.cc b/chromecast/app/cast_main_delegate.cc index e150dd1d..fef021c 100644 --- a/chromecast/app/cast_main_delegate.cc +++ b/chromecast/app/cast_main_delegate.cc
@@ -19,6 +19,7 @@ #include "base/files/file_enumerator.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/metrics/field_trial.h" #include "base/no_destructor.h" #include "base/path_service.h"
diff --git a/chromecast/base/init_command_line_shlib.cc b/chromecast/base/init_command_line_shlib.cc index 8559754..19ab6830 100644 --- a/chromecast/base/init_command_line_shlib.cc +++ b/chromecast/base/init_command_line_shlib.cc
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "chromecast/chromecast_buildflags.h" namespace chromecast {
diff --git a/chromecast/crash/linux/crash_uploader.cc b/chromecast/crash/linux/crash_uploader.cc index a46c559a..4c73ffe00 100644 --- a/chromecast/crash/linux/crash_uploader.cc +++ b/chromecast/crash/linux/crash_uploader.cc
@@ -12,6 +12,7 @@ #include "base/command_line.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/task/single_thread_task_executor.h" #include "base/threading/platform_thread.h"
diff --git a/chromecast/external_mojo/external_service_support/process_setup.cc b/chromecast/external_mojo/external_service_support/process_setup.cc index 49323943..9c8edd9 100644 --- a/chromecast/external_mojo/external_service_support/process_setup.cc +++ b/chromecast/external_mojo/external_service_support/process_setup.cc
@@ -11,6 +11,7 @@ #include "base/command_line.h" #include "base/feature_list.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "build/build_config.h" #include "chromecast/base/chromecast_switches.h" #include "chromecast/chromecast_buildflags.h"
diff --git a/chromecast/tracing/tracing_service_main.cc b/chromecast/tracing/tracing_service_main.cc index beb454d6..f5c215d 100644 --- a/chromecast/tracing/tracing_service_main.cc +++ b/chromecast/tracing/tracing_service_main.cc
@@ -18,6 +18,7 @@ #include "base/containers/span.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/memory/weak_ptr.h" #include "base/message_loop/message_pump_for_io.h" #include "base/message_loop/message_pump_type.h"
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index ef723cc..653867f 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -16486.0.0-1073214 \ No newline at end of file +16487.0.0-1073220 \ No newline at end of file
diff --git a/chromeos/ash/services/auth_factor_config/BUILD.gn b/chromeos/ash/services/auth_factor_config/BUILD.gn index 555b98b..81f3746c 100644 --- a/chromeos/ash/services/auth_factor_config/BUILD.gn +++ b/chromeos/ash/services/auth_factor_config/BUILD.gn
@@ -27,6 +27,7 @@ "//chromeos/ash/components/cryptohome", "//chromeos/ash/components/login/auth", "//chromeos/ash/components/osauth/public", + "//chromeos/ash/components/policy/local_auth_factors", "//components/prefs", "//components/user_manager", ]
diff --git a/chromeos/ash/services/auth_factor_config/pin_factor_editor.cc b/chromeos/ash/services/auth_factor_config/pin_factor_editor.cc index 05be5d3c..dff1dd18 100644 --- a/chromeos/ash/services/auth_factor_config/pin_factor_editor.cc +++ b/chromeos/ash/services/auth_factor_config/pin_factor_editor.cc
@@ -6,7 +6,11 @@ #include "ash/constants/ash_features.h" #include "ash/constants/ash_pref_names.h" +#include "chromeos/ash/components/osauth/public/auth_parts.h" +#include "chromeos/ash/components/osauth/public/auth_policy_connector.h" #include "chromeos/ash/components/osauth/public/auth_session_storage.h" +#include "chromeos/ash/components/osauth/public/common_types.h" +#include "chromeos/ash/components/policy/local_auth_factors/local_auth_factors_complexity.h" #include "chromeos/ash/services/auth_factor_config/auth_factor_config.h" #include "components/user_manager/known_user.h" #include "components/user_manager/user.h" @@ -14,6 +18,24 @@ namespace ash::auth { +namespace { + +mojom::PinComplexity LocalAuthFactorsComplexityToMojom( + LocalAuthFactorsComplexity complexity) { + switch (complexity) { + case LocalAuthFactorsComplexity::kNone: + return mojom::PinComplexity::kErrNone; + case LocalAuthFactorsComplexity::kLow: + return mojom::PinComplexity::kErrLow; + case LocalAuthFactorsComplexity::kMedium: + return mojom::PinComplexity::kErrMedium; + case LocalAuthFactorsComplexity::kHigh: + return mojom::PinComplexity::kErrHigh; + } +} + +} // namespace + PinFactorEditor::PinFactorEditor(AuthFactorConfig* auth_factor_config, PinBackendDelegate* pin_backend) : auth_factor_config_(auth_factor_config), @@ -114,7 +136,6 @@ void PinFactorEditor::ObtainContext( const std::string& auth_token, base::OnceCallback<void(std::unique_ptr<UserContext>)> callback) { - if (!ash::AuthSessionStorage::Get()->IsValid(auth_token)) { std::move(callback).Run(nullptr); return; @@ -326,6 +347,50 @@ return; } +void PinFactorEditor::CheckPinComplexity( + const std::string& auth_token, + const std::string& pin, + base::OnceCallback<void(mojom::PinComplexity)> callback) { + ObtainContext(auth_token, + base::BindOnce(&PinFactorEditor::CheckPinComplexityWithContext, + weak_factory_.GetWeakPtr(), auth_token, pin, + std::move(callback))); +} + +void PinFactorEditor::CheckPinComplexityWithContext( + const std::string& auth_token, + const std::string& pin, + base::OnceCallback<void(mojom::PinComplexity)> callback, + std::unique_ptr<UserContext> context) { + if (!context) { + LOG(ERROR) << "Invalid auth token"; + std::move(callback).Run(mojom::PinComplexity::kInvalidTokenError); + return; + } + + AccountId account_id = context->GetAccountId(); + ash::AuthSessionStorage::Get()->Return(auth_token, std::move(context)); + + std::optional<LocalAuthFactorsComplexity> complexity = + AuthParts::Get()->GetAuthPolicyConnector()->GetLocalAuthFactorsComplexity( + account_id); + if (!complexity.has_value()) { + // The policy is not set. + return std::move(callback).Run(mojom::PinComplexity::kOk); + } + + // TODO(crbug.com/445625494): Unify this method with the other codepath going + // through the legacy QuickUnlockPrivate API. + + bool ok = policy::local_auth_factors::CheckPinComplexity(pin, *complexity); + + mojom::PinComplexity result = + ok ? mojom::PinComplexity::kOk + : LocalAuthFactorsComplexityToMojom(*complexity); + + std::move(callback).Run(result); +} + void PinFactorEditor::BindReceiver( mojo::PendingReceiver<mojom::PinFactorEditor> receiver) { receivers_.Add(this, std::move(receiver));
diff --git a/chromeos/ash/services/auth_factor_config/pin_factor_editor.h b/chromeos/ash/services/auth_factor_config/pin_factor_editor.h index 3267226d..a63f3be 100644 --- a/chromeos/ash/services/auth_factor_config/pin_factor_editor.h +++ b/chromeos/ash/services/auth_factor_config/pin_factor_editor.h
@@ -38,6 +38,10 @@ const std::string& auth_token, base::OnceCallback<void(std::optional<mojom::AuthFactor>)> callback) override; + void CheckPinComplexity( + const std::string& auth_token, + const std::string& pin, + base::OnceCallback<void(mojom::PinComplexity)> callback) override; void BindReceiver(mojo::PendingReceiver<mojom::PinFactorEditor> receiver); @@ -107,6 +111,12 @@ base::OnceCallback<void(std::optional<mojom::AuthFactor>)> callback, AuthFactorSet factors); + void CheckPinComplexityWithContext( + const std::string& auth_token, + const std::string& pin, + base::OnceCallback<void(mojom::PinComplexity)> callback, + std::unique_ptr<UserContext> context); + raw_ptr<AuthFactorConfig> auth_factor_config_; raw_ptr<PinBackendDelegate> pin_backend_; mojo::ReceiverSet<mojom::PinFactorEditor> receivers_;
diff --git a/chromeos/ash/services/auth_factor_config/public/mojom/auth_factor_config.mojom b/chromeos/ash/services/auth_factor_config/public/mojom/auth_factor_config.mojom index 74bd4b1..31591f7 100644 --- a/chromeos/ash/services/auth_factor_config/public/mojom/auth_factor_config.mojom +++ b/chromeos/ash/services/auth_factor_config/public/mojom/auth_factor_config.mojom
@@ -71,7 +71,6 @@ // Checks whether the user can configure |factor|. Is false if the factor is // not supported or e.g. a policy forces |factor| to be enabled/disabled. IsEditable(string auth_token, AuthFactor factor) => (bool editable); - }; // Returned from various operations that change ("configure") something about @@ -98,6 +97,18 @@ Configure(string auth_token, bool enabled) => (ConfigureResult result); }; +// A value describing the complexity of a pin. +enum PinComplexity { + kOk, + kInvalidTokenError, + // These values correspond to the values of the `LocalAuthFactorsComplexity` + // policy (components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactorsComplexity.yaml). + kErrNone, + kErrLow, + kErrMedium, + kErrHigh, +}; + // Interface for methods specific to pin authentication. Served from chrome // ash, intended to be consumed by the following webuis: // * chrome://os-settings @@ -105,14 +116,21 @@ interface PinFactorEditor { // Set the user pin to the desired value. SetPin(string auth_token, string pin) => (ConfigureResult result); + // Update an already set user pin to the desired value. This method will // only update a cryptohome pin if already present, for prefs-based pins and // empty pins, it's a no-op. UpdatePin(string auth_token, string pin) => (ConfigureResult result); + // Remove the pin factor for the user. RemovePin(string auth_token) => (ConfigureResult result); + // Returns the type of the pin factor, or nullopt if it has none. GetConfiguredPinFactor(string auth_token) => (AuthFactor? pin_factor); + + // Returns a value describing the complexity of the provided pin value. + CheckPinComplexity(string auth_token, string pin) => + (PinComplexity complexity); }; // A value describing the complexity of a password.
diff --git a/clank b/clank index ca42da3..d6c606d 160000 --- a/clank +++ b/clank
@@ -1 +1 @@ -Subproject commit ca42da3e3a185a97996945b6b404a00823d0183c +Subproject commit d6c606dacae7862791a9ac6e7abbf2d1b92323fa
diff --git a/components/android_autofill/browser/android_autofill_client.cc b/components/android_autofill/browser/android_autofill_client.cc index d67373d9..67fcb9b 100644 --- a/components/android_autofill/browser/android_autofill_client.cc +++ b/components/android_autofill/browser/android_autofill_client.cc
@@ -231,10 +231,6 @@ NOTREACHED(); } -bool AndroidAutofillClient::IsAutofillPaymentMethodsEnabled() const { - NOTREACHED(); -} - bool AndroidAutofillClient::IsWalletStorageEnabled() const { return false; }
diff --git a/components/android_autofill/browser/android_autofill_client.h b/components/android_autofill/browser/android_autofill_client.h index e0d24d3..e1227882 100644 --- a/components/android_autofill/browser/android_autofill_client.h +++ b/components/android_autofill/browser/android_autofill_client.h
@@ -126,7 +126,6 @@ void HideAutofillSuggestions(autofill::SuggestionHidingReason reason) final; bool IsAutofillEnabled() const final; bool IsAutofillProfileEnabled() const final; - bool IsAutofillPaymentMethodsEnabled() const final; bool IsWalletStorageEnabled() const final; bool IsAutocompleteEnabled() const final; bool IsPasswordManagerEnabled() const final;
diff --git a/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl.cc b/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl.cc index 240c9e6..cbf62a8 100644 --- a/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl.cc +++ b/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl.cc
@@ -369,7 +369,8 @@ .has_fillable_address = client.IsAutofillProfileEnabled() && !pdm.address_data_manager().GetProfiles().empty(), .has_fillable_credit_card = - client.IsAutofillPaymentMethodsEnabled() && + client.GetPaymentsAutofillClient() + ->IsAutofillPaymentMethodsEnabled() && !pdm.payments_data_manager().GetCreditCards().empty(), }; }
diff --git a/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl_unittest.cc b/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl_unittest.cc index 7a4bacc..58f4b55f 100644 --- a/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl_unittest.cc +++ b/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl_unittest.cc
@@ -254,7 +254,8 @@ // it exists but autofill is disabled. TEST_F(AutofillAnnotationsProviderImplTest, GetAutofillAvailability_CreditCard_AutofillDisabled) { - client()->SetAutofillPaymentMethodsEnabled(false); + client()->GetPaymentsAutofillClient()->SetAutofillPaymentMethodsEnabled( + false); client()->GetPersonalDataManager().payments_data_manager().AddCreditCard( CreateCreditCard());
diff --git a/components/autofill/core/browser/foundations/autofill_client.h b/components/autofill/core/browser/foundations/autofill_client.h index 076aede2..5cd94ec 100644 --- a/components/autofill/core/browser/foundations/autofill_client.h +++ b/components/autofill/core/browser/foundations/autofill_client.h
@@ -596,10 +596,6 @@ // the client supports Autofill. virtual bool IsAutofillProfileEnabled() const = 0; - // Returns true if the value of the AutofillCreditCardEnabled pref is true - // and the client supports Autofill. - virtual bool IsAutofillPaymentMethodsEnabled() const = 0; - // Whether the Autocomplete feature of Autofill should be enabled. virtual bool IsAutocompleteEnabled() const = 0;
diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager.cc b/components/autofill/core/browser/foundations/browser_autofill_manager.cc index 3091eb6..f877114 100644 --- a/components/autofill/core/browser/foundations/browser_autofill_manager.cc +++ b/components/autofill/core/browser/foundations/browser_autofill_manager.cc
@@ -623,7 +623,8 @@ // Update Personal Data with the form's submitted data. client.GetFormDataImporter()->ImportAndProcessFormData( form_structure, client.IsAutofillProfileEnabled(), - client.IsAutofillPaymentMethodsEnabled(), ukm_source_id); + client.GetPaymentsAutofillClient()->IsAutofillPaymentMethodsEnabled(), + ukm_source_id); } AutofillPlusAddressDelegate* plus_address_delegate = @@ -848,7 +849,9 @@ const FormStructure& form, const AutofillField& trigger_field) { if (!client().GetPaymentsAutofillClient()->HasCreditCardScanFeature() || - !client().IsAutofillPaymentMethodsEnabled()) { + !client() + .GetPaymentsAutofillClient() + ->IsAutofillPaymentMethodsEnabled()) { return false; } @@ -890,9 +893,11 @@ CHECK_DEREF(client().GetPrefs())); } autofill_metrics::LogIsAutofillPaymentMethodsEnabledAtPageLoad( - client().IsAutofillPaymentMethodsEnabled(), + client().GetPaymentsAutofillClient()->IsAutofillPaymentMethodsEnabled(), metrics_->signin_state_for_metrics); - if (!client().IsAutofillPaymentMethodsEnabled()) { + if (!client() + .GetPaymentsAutofillClient() + ->IsAutofillPaymentMethodsEnabled()) { autofill_metrics::LogAutofillPaymentMethodsDisabledReasonAtPageLoad( CHECK_DEREF(client().GetPrefs())); } @@ -1018,7 +1023,7 @@ if (client().IsAutofillProfileEnabled()) { metrics_->address_form_event_logger.OnWillSubmitForm(*submitted_form); } - if (client().IsAutofillPaymentMethodsEnabled()) { + if (client().GetPaymentsAutofillClient()->IsAutofillPaymentMethodsEnabled()) { metrics_->credit_card_form_event_logger.set_signin_state_for_metrics( metrics_->signin_state_for_metrics); metrics_->credit_card_form_event_logger.OnWillSubmitForm(*submitted_form); @@ -1032,7 +1037,7 @@ address_on_typing_manager_.LogAddressOnTypingCorrectnessMetrics( *submitted_form); } - if (client().IsAutofillPaymentMethodsEnabled()) { + if (client().GetPaymentsAutofillClient()->IsAutofillPaymentMethodsEnabled()) { metrics_->credit_card_form_event_logger.set_signin_state_for_metrics( metrics_->signin_state_for_metrics); metrics_->credit_card_form_event_logger.OnFormSubmitted(*submitted_form); @@ -1697,7 +1702,9 @@ } else { const DenseSet<AmountExtractionManager::EligibleFeature> eligible_features = GetAmountExtractionManager().GetEligibleFeatures( - client().IsAutofillPaymentMethodsEnabled(), + client() + .GetPaymentsAutofillClient() + ->IsAutofillPaymentMethodsEnabled(), ShouldSuppressSuggestions(context.suppress_reason, log_manager()), !suggestions.empty(), context.filling_product, autofill_field->Type().GetCreditCardType()); @@ -3178,7 +3185,9 @@ } break; case FillingProduct::kCreditCard: - if (client().IsAutofillPaymentMethodsEnabled()) { + if (client() + .GetPaymentsAutofillClient() + ->IsAutofillPaymentMethodsEnabled()) { suggestions = GetCreditCardSuggestions(form, *form_structure, field, *autofill_field); }
diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc index fea0e915..c18d2d1 100644 --- a/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc +++ b/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc
@@ -2218,7 +2218,7 @@ // Disable Autofill. autofill_client().SetAutofillProfileEnabled(false); - autofill_client().SetAutofillPaymentMethodsEnabled(false); + payments_client().SetAutofillPaymentMethodsEnabled(false); OnAskForValuesToFill(form, form.fields()[0]); EXPECT_FALSE(external_delegate()->on_suggestions_returned_seen()); @@ -3389,7 +3389,7 @@ // Disable Autofill. autofill_client().SetAutofillProfileEnabled(false); - autofill_client().SetAutofillPaymentMethodsEnabled(false); + payments_client().SetAutofillPaymentMethodsEnabled(false); // Verify that the amount extraction is not triggered. EXPECT_CALL(amount_extraction_manager(), TriggerCheckoutAmountExtraction) @@ -3678,7 +3678,7 @@ OnFormsSeen_AutofillDisabledPasswordManagerEnabled) { // Set up our form data. FormData form = CreateTestAddressFormData(); - autofill_client().SetAutofillPaymentMethodsEnabled(false); + payments_client().SetAutofillPaymentMethodsEnabled(false); autofill_client().SetAutofillProfileEnabled(false); // If the password manager is enabled, that's enough to parse the form. EXPECT_CALL(crowdsourcing_manager(), StartQueryRequest).Times(AnyNumber()); @@ -4176,7 +4176,7 @@ *autofill_client().GetPaymentsAutofillClient()->GetSaveAndFillManager(), MaybeAddStrikeForSaveAndFill()); - autofill_client().SetAutofillPaymentMethodsEnabled(true); + payments_client().SetAutofillPaymentMethodsEnabled(true); FormData form = CreateTestCreditCardFormData(/*is_https=*/true, /*use_month_type=*/false); FormsSeen({form}); @@ -5029,7 +5029,7 @@ // submissions are still received by the SingleFieldFillRouter. TEST_F(BrowserAutofillManagerTest, FormSubmittedAutocompleteEnabled) { autofill_client().SetAutofillProfileEnabled(false); - autofill_client().SetAutofillPaymentMethodsEnabled(false); + payments_client().SetAutofillPaymentMethodsEnabled(false); // Set up our form data. FormData form = CreateTestAddressFormData(); @@ -5069,7 +5069,7 @@ TEST_F(BrowserAutofillManagerTest, SingleFieldFillSuggestions_SomeWhenAutofillDisabled) { autofill_client().SetAutofillProfileEnabled(false); - autofill_client().SetAutofillPaymentMethodsEnabled(false); + payments_client().SetAutofillPaymentMethodsEnabled(false); // Set up our form data. FormData form = CreateTestAddressFormData(); @@ -5137,7 +5137,9 @@ autofill_client().set_last_committed_primary_main_frame_url( GURL("http://example.test")); autofill_client().SetAutofillProfileEnabled(false); - autofill_client().SetAutofillPaymentMethodsEnabled(false); + autofill_client() + .GetPaymentsAutofillClient() + ->SetAutofillPaymentMethodsEnabled(false); } }; @@ -5204,7 +5206,7 @@ TEST_F(BrowserAutofillManagerTest, SingleFieldFillSuggestions_NoneWhenSingleFieldFillConditionsNotMet) { autofill_client().SetAutofillProfileEnabled(false); - autofill_client().SetAutofillPaymentMethodsEnabled(false); + payments_client().SetAutofillPaymentMethodsEnabled(false); // Set up our form data. FormData form = CreateTestAddressFormData(); @@ -6036,7 +6038,7 @@ } TEST_F(BrowserAutofillManagerTest, CreditCardDisabledDoesNotSuggest) { - autofill_client().SetAutofillPaymentMethodsEnabled(false); + payments_client().SetAutofillPaymentMethodsEnabled(false); // Set up our form data. FormData form = @@ -6110,7 +6112,7 @@ // Autofill disabled. autofill_client().SetAutofillProfileEnabled(false); - autofill_client().SetAutofillPaymentMethodsEnabled(false); + payments_client().SetAutofillPaymentMethodsEnabled(false); EXPECT_FALSE(autofill_manager().ShouldUploadForm(FormStructure(form))); } @@ -7415,12 +7417,12 @@ ASSERT_EQ(card_number_field.name(), u"cardnumber"); // Test case where autofill is enabled. - autofill_client().SetAutofillPaymentMethodsEnabled(true); + payments_client().SetAutofillPaymentMethodsEnabled(true); EXPECT_TRUE(test_api(autofill_manager()) .ShouldShowScanCreditCard(form_structure, card_number_field)); // Test case where autofill is disabled. - autofill_client().SetAutofillPaymentMethodsEnabled(false); + payments_client().SetAutofillPaymentMethodsEnabled(false); EXPECT_FALSE( test_api(autofill_manager()) .ShouldShowScanCreditCard(form_structure, card_number_field));
diff --git a/components/autofill/core/browser/foundations/test_autofill_client.h b/components/autofill/core/browser/foundations/test_autofill_client.h index 849634a..7c1b346 100644 --- a/components/autofill/core/browser/foundations/test_autofill_client.h +++ b/components/autofill/core/browser/foundations/test_autofill_client.h
@@ -375,17 +375,15 @@ } bool IsAutofillEnabled() const override { - return IsAutofillProfileEnabled() || IsAutofillPaymentMethodsEnabled(); + return IsAutofillProfileEnabled() || + AutofillClient::GetPaymentsAutofillClient() + ->IsAutofillPaymentMethodsEnabled(); } bool IsAutofillProfileEnabled() const override { return autofill_profile_enabled_; } - bool IsAutofillPaymentMethodsEnabled() const override { - return autofill_payment_methods_enabled_; - } - bool IsWalletStorageEnabled() const override { return wallet_storage_enabled_; } @@ -497,18 +495,6 @@ } } - void SetAutofillPaymentMethodsEnabled(bool autofill_payment_methods_enabled) { - autofill_payment_methods_enabled_ = autofill_payment_methods_enabled; - if (PrefService* prefs = GetPrefs()) { - prefs->SetBoolean(prefs::kAutofillCreditCardEnabled, - autofill_payment_methods_enabled); - } - if (!autofill_payment_methods_enabled) { - // Credit card data is refreshed when this pref is changed. - GetPersonalDataManager().test_payments_data_manager().ClearCreditCards(); - } - } - void SetWalletStorageEnabled(bool wallet_storage_enabled) { wallet_storage_enabled_ = wallet_storage_enabled; } @@ -723,7 +709,6 @@ #endif bool autofill_profile_enabled_ = true; - bool autofill_payment_methods_enabled_ = true; bool wallet_storage_enabled_ = true; // NULL by default.
diff --git a/components/autofill/core/browser/metrics/autofill_settings_metrics_unittest.cc b/components/autofill/core/browser/metrics/autofill_settings_metrics_unittest.cc index 5be72f4..5b4dc20 100644 --- a/components/autofill/core/browser/metrics/autofill_settings_metrics_unittest.cc +++ b/components/autofill/core/browser/metrics/autofill_settings_metrics_unittest.cc
@@ -72,7 +72,7 @@ // Test that we log that CreditCard Autofill is enabled / disabled when filling // a form. TEST_P(AutofillSettingsMetricsTest, AutofillCreditCardIsEnabledAtPageLoad) { - autofill_client().SetAutofillPaymentMethodsEnabled(GetParam()); + payments_autofill_client().SetAutofillPaymentMethodsEnabled(GetParam()); autofill_manager().OnFormsSeen(/*updated_forms=*/{}, /*removed_forms=*/{}); histogram_tester_.ExpectUniqueSample("Autofill.CreditCard.IsEnabled.PageLoad", @@ -326,7 +326,7 @@ // load. TEST_P(AutofillSettingsMetricsTest, EmitsAutofillPaymentMethodsDisabledByUserAtPageLoad) { - autofill_client().SetAutofillPaymentMethodsEnabled(GetParam()); + payments_autofill_client().SetAutofillPaymentMethodsEnabled(GetParam()); autofill_client().GetPrefs()->SetUserPref(prefs::kAutofillCreditCardEnabled, base::Value(GetParam())); @@ -342,7 +342,7 @@ // load. TEST_P(AutofillSettingsMetricsTest, EmitsAutofillPaymentMethodsDisabledByAdminPolicyAtPageLoad) { - autofill_client().SetAutofillPaymentMethodsEnabled(GetParam()); + payments_autofill_client().SetAutofillPaymentMethodsEnabled(GetParam()); autofill_client().GetPrefs()->SetManagedPref( prefs::kAutofillCreditCardEnabled, base::Value(GetParam())); @@ -358,7 +358,7 @@ // load. TEST_P(AutofillSettingsMetricsTest, EmitsAutofillPaymentMethodsDisabledByExtensionAtPageLoad) { - autofill_client().SetAutofillPaymentMethodsEnabled(GetParam()); + payments_autofill_client().SetAutofillPaymentMethodsEnabled(GetParam()); autofill_client().GetPrefs()->SetExtensionPref( prefs::kAutofillCreditCardEnabled, base::Value(GetParam())); @@ -374,7 +374,7 @@ // load. TEST_P(AutofillSettingsMetricsTest, EmitsAutofillPaymentMethodsDisabledByCustodianAtPageLoad) { - autofill_client().SetAutofillPaymentMethodsEnabled(GetParam()); + payments_autofill_client().SetAutofillPaymentMethodsEnabled(GetParam()); autofill_client().GetPrefs()->SetSupervisedUserPref( prefs::kAutofillCreditCardEnabled, base::Value(GetParam()));
diff --git a/components/autofill/core/browser/payments/amount_extraction_manager_unittest.cc b/components/autofill/core/browser/payments/amount_extraction_manager_unittest.cc index 291a369..43d0d26 100644 --- a/components/autofill/core/browser/payments/amount_extraction_manager_unittest.cc +++ b/components/autofill/core/browser/payments/amount_extraction_manager_unittest.cc
@@ -114,7 +114,9 @@ protected: void SetUp() override { InitAutofillClient(); - autofill_client().SetAutofillPaymentMethodsEnabled(true); + autofill_client() + .GetPaymentsAutofillClient() + ->SetAutofillPaymentMethodsEnabled(true); autofill_client() .GetPersonalDataManager() .payments_data_manager()
diff --git a/components/autofill/core/browser/payments/bnpl_manager_unittest.cc b/components/autofill/core/browser/payments/bnpl_manager_unittest.cc index d149912..9281c5c 100644 --- a/components/autofill/core/browser/payments/bnpl_manager_unittest.cc +++ b/components/autofill/core/browser/payments/bnpl_manager_unittest.cc
@@ -241,7 +241,6 @@ void SetUp() override { InitAutofillClient(); autofill_client().set_app_locale(kAppLocale); - autofill_client().SetAutofillPaymentMethodsEnabled(true); autofill_client().set_last_committed_primary_main_frame_url(kDomain); autofill_client().GetPersonalDataManager().set_payments_data_manager( std::make_unique<TestPaymentsDataManager>()); @@ -269,6 +268,10 @@ .GetPaymentsAutofillClient() ->set_payments_network_interface(std::move(payments_network_interface)); + autofill_client() + .GetPaymentsAutofillClient() + ->SetAutofillPaymentMethodsEnabled(true); + autofill_client().GetPaymentsAutofillClient()->set_bnpl_ui_delegate( std::make_unique<NiceMock<MockBnplUiDelegate>>());
diff --git a/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc b/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc index 0f806af..c3c11013 100644 --- a/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc +++ b/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc
@@ -638,7 +638,7 @@ } TEST_F(CreditCardSaveManagerTest, CreditCardDisabledDoesNotSave) { - autofill_client().SetAutofillPaymentMethodsEnabled(false); + payments_client().SetAutofillPaymentMethodsEnabled(false); // Create, fill and submit an address form in order to establish a recent // profile which can be selected for the upload request. FormData address_form = CreateTestAddressFormData();
diff --git a/components/autofill/core/browser/payments/payments_autofill_client.h b/components/autofill/core/browser/payments/payments_autofill_client.h index 766c35a..302530a3 100644 --- a/components/autofill/core/browser/payments/payments_autofill_client.h +++ b/components/autofill/core/browser/payments/payments_autofill_client.h
@@ -568,6 +568,10 @@ // was accepted, this will display the re-auth opt-in confirmation bubble. virtual void ShowMandatoryReauthOptInConfirmation() = 0; + // Returns true if the value of the AutofillCreditCardEnabled pref is true + // and the client supports Autofill. + virtual bool IsAutofillPaymentMethodsEnabled() const = 0; + // Gets the IbanManager instance associated with the client. virtual IbanManager* GetIbanManager() = 0;
diff --git a/components/autofill/core/browser/payments/test_payments_autofill_client.cc b/components/autofill/core/browser/payments/test_payments_autofill_client.cc index cff59ce1..669303e3 100644 --- a/components/autofill/core/browser/payments/test_payments_autofill_client.cc +++ b/components/autofill/core/browser/payments/test_payments_autofill_client.cc
@@ -29,6 +29,7 @@ #include "components/autofill/core/browser/suggestions/suggestion.h" #include "components/autofill/core/browser/test_utils/autofill_test_utils.h" #include "components/autofill/core/browser/ui/payments/bnpl_ui_delegate.h" +#include "components/autofill/core/common/autofill_prefs.h" #if BUILDFLAG(IS_ANDROID) #include "base/test/gmock_callback_support.h" @@ -321,6 +322,10 @@ mandatory_reauth_opt_in_prompt_was_reshown_ = true; } +bool TestPaymentsAutofillClient::IsAutofillPaymentMethodsEnabled() const { + return autofill_payment_methods_enabled_; +} + MockIbanManager* TestPaymentsAutofillClient::GetIbanManager() { if (!mock_iban_manager_) { mock_iban_manager_ = std::make_unique<NiceMock<MockIbanManager>>(
diff --git a/components/autofill/core/browser/payments/test_payments_autofill_client.h b/components/autofill/core/browser/payments/test_payments_autofill_client.h index 640602116..d1e7f486 100644 --- a/components/autofill/core/browser/payments/test_payments_autofill_client.h +++ b/components/autofill/core/browser/payments/test_payments_autofill_client.h
@@ -11,6 +11,7 @@ #include "base/functional/callback.h" #include "base/memory/raw_ref.h" #include "build/build_config.h" +#include "components/autofill/core/browser/data_manager/test_personal_data_manager.h" #include "components/autofill/core/browser/data_model/payments/credit_card.h" #include "components/autofill/core/browser/data_model/payments/iban.h" #include "components/autofill/core/browser/payments/autofill_error_dialog_context.h" @@ -30,6 +31,7 @@ #include "components/autofill/core/browser/suggestions/suggestion.h" #include "components/autofill/core/browser/ui/payments/bnpl_tos_controller.h" #include "components/autofill/core/browser/ui/payments/bnpl_ui_delegate.h" +#include "components/autofill/core/common/autofill_prefs.h" #if !BUILDFLAG(IS_IOS) namespace webauthn { @@ -170,6 +172,7 @@ base::OnceClosure cancel_mandatory_reauth_callback, base::RepeatingClosure close_mandatory_reauth_callback) override; void ShowMandatoryReauthOptInConfirmation() override; + bool IsAutofillPaymentMethodsEnabled() const final; MockIbanManager* GetIbanManager() override; MockIbanAccessManager* GetIbanAccessManager() override; MockMerchantPromoCodeManager* GetMerchantPromoCodeManager() override; @@ -224,6 +227,20 @@ // Begin TestPaymentsAutofillClient-specific section. + void SetAutofillPaymentMethodsEnabled(bool autofill_payment_methods_enabled) { + autofill_payment_methods_enabled_ = autofill_payment_methods_enabled; + if (PrefService* prefs = client_->GetPrefs()) { + prefs->SetBoolean(prefs::kAutofillCreditCardEnabled, + autofill_payment_methods_enabled); + } + if (!autofill_payment_methods_enabled) { + // Credit card data is refreshed when this pref is changed. + static_cast<TestPersonalDataManager&>(client_->GetPersonalDataManager()) + .test_payments_data_manager() + .ClearCreditCards(); + } + } + bool GetMandatoryReauthOptInPromptWasShown(); bool GetMandatoryReauthOptInPromptWasReshown(); @@ -383,6 +400,8 @@ bool unmask_authenticator_selection_dialog_shown_ = false; + bool autofill_payment_methods_enabled_ = true; + std::unique_ptr<MockIbanManager> mock_iban_manager_; std::unique_ptr<MockIbanAccessManager> mock_iban_access_manager_;
diff --git a/components/autofill/core/browser/suggestions/payments/credit_card_suggestion_generator.cc b/components/autofill/core/browser/suggestions/payments/credit_card_suggestion_generator.cc index e755b4a..219a487 100644 --- a/components/autofill/core/browser/suggestions/payments/credit_card_suggestion_generator.cc +++ b/components/autofill/core/browser/suggestions/payments/credit_card_suggestion_generator.cc
@@ -102,7 +102,7 @@ void(std::pair<SuggestionDataSource, std::vector<SuggestionGenerator::SuggestionData>>)> callback) { - if (!client.IsAutofillPaymentMethodsEnabled()) { + if (!client.GetPaymentsAutofillClient()->IsAutofillPaymentMethodsEnabled()) { callback({SuggestionDataSource::kCreditCard, {}}); return; } @@ -331,8 +331,10 @@ const FormData& form, const FormFieldData& trigger_field, const AutofillField* trigger_autofill_field) { - if (!client.GetPaymentsAutofillClient()->HasCreditCardScanFeature() || - !client.IsAutofillPaymentMethodsEnabled()) { + const payments::PaymentsAutofillClient& payments_client = + *client.GetPaymentsAutofillClient(); + if (!payments_client.HasCreditCardScanFeature() || + !payments_client.IsAutofillPaymentMethodsEnabled()) { return false; }
diff --git a/components/browser_apis/tab_strip/tab_strip_api_data_model.mojom b/components/browser_apis/tab_strip/tab_strip_api_data_model.mojom index d206f07..3de6b407 100644 --- a/components/browser_apis/tab_strip/tab_strip_api_data_model.mojom +++ b/components/browser_apis/tab_strip/tab_strip_api_data_model.mojom
@@ -23,6 +23,7 @@ kBluetoothScanActive, kDesktopCapturing, kActorAccessing, + kActorWaitingOnUser, kGlicAccessing, kGlicSharing, kHidConnected,
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/InlineSearchBox.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/InlineSearchBox.java index 785c00d5..b630cc9 100644 --- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/InlineSearchBox.java +++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/InlineSearchBox.java
@@ -184,7 +184,7 @@ return !TextUtils.isEmpty(mInlineSearchEditText.getText()); } - public EditText getSearchTextForTest() { + public EditText getSearchText() { return mInlineSearchEditText; }
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableListToolbar.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableListToolbar.java index aedec413..9a54929 100644 --- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableListToolbar.java +++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableListToolbar.java
@@ -845,7 +845,9 @@ /** Hides the keyboard. */ public void hideKeyboard() { - KeyboardVisibilityDelegate.getInstance().hideKeyboard(mSearchEditText); + View searchText = + mIsLargeScreenWithKeyboard ? mInlineSearchBox.getSearchText() : mSearchEditText; + KeyboardVisibilityDelegate.getInstance().hideKeyboard(searchText); } @Override @@ -936,6 +938,6 @@ } public EditText getSearchTextForTest() { - return mInlineSearchBox.getSearchTextForTest(); // IN-TEST + return mInlineSearchBox.getSearchText(); // IN-TEST } }
diff --git a/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc b/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc index 8eb0408d..a3da35f7 100644 --- a/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc +++ b/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc
@@ -22,6 +22,7 @@ #include "base/files/file_util.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/memory/read_only_shared_memory_region.h" #include "base/memory/unsafe_shared_memory_region.h" #include "base/path_service.h"
diff --git a/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc b/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc index 4dc65df..c4bd23c 100644 --- a/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc +++ b/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc
@@ -30,6 +30,7 @@ #include "base/gtest_prod_util.h" #include "base/json/json_writer.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/memory/raw_ptr.h" #include "base/memory/raw_ref.h" #include "base/memory/read_only_shared_memory_region.h"
diff --git a/components/contextual_tasks/public/features.cc b/components/contextual_tasks/public/features.cc index 3e9172c6..98b4b8f 100644 --- a/components/contextual_tasks/public/features.cc +++ b/components/contextual_tasks/public/features.cc
@@ -44,6 +44,18 @@ "TaskScopedSidpePanel", true); +constexpr base::FeatureParam<EntryPointOption>::Option kEntryPointOptions[] = { + {EntryPointOption::kNoEntryPoint, "no-entry-point"}, + {EntryPointOption::kPageActionRevisit, "page-action-revisit"}, + {EntryPointOption::kToolbarRevisit, "toolbar-revisit"}, + {EntryPointOption::kToolbarPermanent, "toolbar-permanent"}}; + +const base::FeatureParam<EntryPointOption> kShowEntryPoint( + &kContextualTasks, + "ContextualTasksEntryPoint", + EntryPointOption::kNoEntryPoint, + &kEntryPointOptions); + std::string GetContextualTasksAiPageUrl() { return kContextualTasksAiPageUrl.Get(); }
diff --git a/components/contextual_tasks/public/features.h b/components/contextual_tasks/public/features.h index 8f2836c..c446e8d 100644 --- a/components/contextual_tasks/public/features.h +++ b/components/contextual_tasks/public/features.h
@@ -16,10 +16,20 @@ BASE_DECLARE_FEATURE(kContextualTasks); BASE_DECLARE_FEATURE(kContextualTasksContext); +// Enum denoting which entry point can show when enabled. +enum class EntryPointOption { + kNoEntryPoint, + kPageActionRevisit, + kToolbarRevisit, + kToolbarPermanent +}; + // The minimum score required for two embeddings to be considered similar. extern const base::FeatureParam<double> kMinEmbeddingSimilarityScore; // Whether to only consider titles for similarity. extern const base::FeatureParam<bool> kOnlyUseTitlesForSimilarity; +// Controls whether the contextual task page action should show +extern const base::FeatureParam<EntryPointOption, true> kShowEntryPoint; // Minimum score, computed using multiple signals, to consider a tab relevant. extern const base::FeatureParam<double> kMinMultiSignalScore;
diff --git a/components/cronet/android/cronet_library_loader.cc b/components/cronet/android/cronet_library_loader.cc index ad007ca..5b46d84 100644 --- a/components/cronet/android/cronet_library_loader.cc +++ b/components/cronet/android/cronet_library_loader.cc
@@ -22,6 +22,7 @@ #include "base/android/library_loader/library_loader_hooks.h" #include "base/check_op.h" #include "base/feature_list.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/metrics/field_trial_params.h" #include "base/no_destructor.h"
diff --git a/components/embedder_support/android/BUILD.gn b/components/embedder_support/android/BUILD.gn index f1812beb..38610e3 100644 --- a/components/embedder_support/android/BUILD.gn +++ b/components/embedder_support/android/BUILD.gn
@@ -433,6 +433,7 @@ ":virtual_structure_java", "//base:base_java", "//base:base_java_test_support", + "//chrome/android:chrome_java", "//chrome/browser/flags:java", "//chrome/browser/tab:java", "//chrome/test/android:chrome_java_test_support_common",
diff --git a/components/embedder_support/android/javatests/src/org/chromium/components/embedder_support/virtual_structure/PageContentProtoViewStructureBuilderTest.java b/components/embedder_support/android/javatests/src/org/chromium/components/embedder_support/virtual_structure/PageContentProtoViewStructureBuilderTest.java index fc8365a..7aa99cc 100644 --- a/components/embedder_support/android/javatests/src/org/chromium/components/embedder_support/virtual_structure/PageContentProtoViewStructureBuilderTest.java +++ b/components/embedder_support/android/javatests/src/org/chromium/components/embedder_support/virtual_structure/PageContentProtoViewStructureBuilderTest.java
@@ -16,10 +16,10 @@ import org.junit.runner.RunWith; import org.chromium.base.ThreadUtils; +import org.chromium.base.test.util.ApplicationTestUtils; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CriteriaHelper; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.flags.ChromeSwitches; @@ -37,10 +37,7 @@ }) @Batch(Batch.PER_CLASS) @EnableFeatures({"AnnotatedPageContentsVirtualStructure"}) -// TODO(crbug.com/439491767): Fix broken tests caused by desktop-like incognito window. -@DisableFeatures("AndroidOpenIncognitoAsWindow") public class PageContentProtoViewStructureBuilderTest { - private static final String TEST_PATH = "/chrome/test/data/android/annotated_page_content/index.html"; private static final long DEFAULT_MAX_TIME_TO_WAIT_IN_MS = 3000; @@ -71,7 +68,7 @@ var incognitoPage = mActivityTestRule .startOnBlankPage() - .openNewIncognitoTabFast() + .openNewIncognitoTabOrWindowFast() .loadWebPageProgrammatically(testUrl); var viewStructure = getViewStructureForPage(incognitoPage); @@ -82,6 +79,10 @@ .getExtras() .containsKey(PageContentProtoViewStructureBuilder.APC_PROTO_EXTRA_KEY)); } + + if (incognitoPage.getActivity().isIncognitoWindow()) { + ApplicationTestUtils.finishActivity(incognitoPage.getActivity()); + } } @Test
diff --git a/components/enterprise/connectors/core/connectors_manager_base.cc b/components/enterprise/connectors/core/connectors_manager_base.cc index aaeb412..fc5390d 100644 --- a/components/enterprise/connectors/core/connectors_manager_base.cc +++ b/components/enterprise/connectors/core/connectors_manager_base.cc
@@ -245,6 +245,11 @@ } } +void ConnectorsManagerBase::SetTelemetryObserverCallback( + base::RepeatingCallback<void()> callback) { + telemetry_observer_callback_ = callback; +} + const std::vector<ReportingServiceSettings>& ConnectorsManagerBase::GetReportingConnectorsSettingsForTesting() const { return reporting_connector_settings_; @@ -255,4 +260,9 @@ return analysis_connector_settings_; } +const base::RepeatingCallback<void()> +ConnectorsManagerBase::GetTelemetryObserverCallbackForTesting() const { + return telemetry_observer_callback_; +} + } // namespace enterprise_connectors
diff --git a/components/enterprise/connectors/core/connectors_manager_base.h b/components/enterprise/connectors/core/connectors_manager_base.h index f5c9bee..eae06057 100644 --- a/components/enterprise/connectors/core/connectors_manager_base.h +++ b/components/enterprise/connectors/core/connectors_manager_base.h
@@ -36,6 +36,17 @@ virtual ~ConnectorsManagerBase(); + // Checks if the corresponding connector is enabled. + bool IsReportingConnectorEnabled() const; + + // Checks if the corresponding connector is enabled. + bool IsAnalysisConnectorEnabled(AnalysisConnector connector) const; + + bool DelayUntilVerdict(AnalysisConnector connector); + + bool GetBypassJustificationRequired(AnalysisConnector connector, + const std::string& tag); + // Validates which settings should be applied to an analysis connector event // against cached policies. This function will prioritize new connector // policies over legacy ones if they are set. @@ -48,28 +59,13 @@ // called for every different connector. std::optional<ReportingSettings> GetReportingSettings(); - // Checks if the corresponding connector is enabled. - bool IsReportingConnectorEnabled() const; - - std::vector<std::string> GetReportingServiceProviderNames(); - - // Public testing function. - const std::vector<ReportingServiceSettings>& - GetReportingConnectorsSettingsForTesting() const; - - // Checks if the corresponding connector is enabled. - bool IsAnalysisConnectorEnabled(AnalysisConnector connector) const; - - bool DelayUntilVerdict(AnalysisConnector connector); - std::optional<std::u16string> GetCustomMessage(AnalysisConnector connector, const std::string& tag); std::optional<GURL> GetLearnMoreUrl(AnalysisConnector connector, const std::string& tag); - bool GetBypassJustificationRequired(AnalysisConnector connector, - const std::string& tag); + std::vector<std::string> GetReportingServiceProviderNames(); std::vector<std::string> GetAnalysisServiceProviderNames( AnalysisConnector connector); @@ -77,21 +73,30 @@ std::vector<const AnalysisConfig*> GetAnalysisServiceConfigs( AnalysisConnector connector); + void SetTelemetryObserverCallback(base::RepeatingCallback<void()> callback); + // Public testing functions. + const std::vector<ReportingServiceSettings>& + GetReportingConnectorsSettingsForTesting() const; + const AnalysisConnectorsSettings& GetAnalysisConnectorsSettingsForTesting() const; + const base::RepeatingCallback<void()> GetTelemetryObserverCallbackForTesting() + const; + protected: // Read and cache the policy corresponding to |connector|. virtual void CacheAnalysisConnectorPolicy( AnalysisConnector connector) const = 0; + virtual DataRegion GetDataRegion(AnalysisConnector connector) const = 0; + // Sets up |pref_change_registrar_|. Used by the constructor and // SetUpForTesting. virtual void StartObservingPrefs(PrefService* pref_service); void StartObservingPref(); - virtual DataRegion GetDataRegion(AnalysisConnector connector) const = 0; const PrefService* prefs() const { return pref_change_registrar_.prefs(); } @@ -109,9 +114,13 @@ base::RepeatingCallback<void()> telemetry_observer_callback_; // Cached values of the connector policies. Updated when a connector is first - // used or when a policy is updated. Analysis connectors settings are - // mutable because they maybe updated by a call to IsConnectorEnabled(), - // which is a const method. + // used or when a policy is updated. + // + // This member is `mutable` to enable lazy initialization of the cache within + // `const` member functions (e.g. `IsAnalysisConnectorEnabled`). This allows + // methods that are logically read-only to physically modify the internal + // cache for efficiency without violating const-correctness from the caller's + // perspective. mutable AnalysisConnectorsSettings analysis_connector_settings_; private:
diff --git a/components/enterprise/connectors/core/connectors_service_base.cc b/components/enterprise/connectors/core/connectors_service_base.cc index 6de645c..f73bd06 100644 --- a/components/enterprise/connectors/core/connectors_service_base.cc +++ b/components/enterprise/connectors/core/connectors_service_base.cc
@@ -15,6 +15,17 @@ namespace enterprise_connectors { +ConnectorsServiceBase::ConnectorsServiceBase( + std::unique_ptr<ConnectorsManagerBase> manager) + : connectors_manager_base_(std::move(manager)) { + DCHECK(connectors_manager_base_); +} + +ConnectorsServiceBase::ConnectorsServiceBase(ConnectorsServiceBase&&) = default; +ConnectorsServiceBase& ConnectorsServiceBase::operator=( + ConnectorsServiceBase&&) = default; +ConnectorsServiceBase::~ConnectorsServiceBase() = default; + ConnectorsServiceBase::DmToken::DmToken(const std::string& value, policy::PolicyScope scope) : value(value), scope(scope) {} @@ -80,7 +91,7 @@ return {}; } - return GetConnectorsManagerBase()->GetReportingServiceProviderNames(); + return connectors_manager_base_->GetReportingServiceProviderNames(); } std::optional<ReportingSettings> ConnectorsServiceBase::GetReportingSettings() { @@ -89,7 +100,7 @@ } std::optional<ReportingSettings> settings = - GetConnectorsManagerBase()->GetReportingSettings(); + connectors_manager_base_->GetReportingSettings(); if (!settings.has_value()) { return std::nullopt; } @@ -152,4 +163,84 @@ } } +bool ConnectorsServiceBase::IsConnectorEnabled( + AnalysisConnector connector) const { + if (!ConnectorsEnabled()) { + return false; + } + + return connectors_manager_base_->IsAnalysisConnectorEnabled(connector); +} + +std::vector<const AnalysisConfig*> +ConnectorsServiceBase::GetAnalysisServiceConfigs(AnalysisConnector connector) { + if (!ConnectorsEnabled()) { + return {}; + } + + return connectors_manager_base_->GetAnalysisServiceConfigs(connector); +} + +bool ConnectorsServiceBase::DelayUntilVerdict(AnalysisConnector connector) { + if (!ConnectorsEnabled()) { + return false; + } + + return connectors_manager_base_->DelayUntilVerdict(connector); +} + +std::optional<std::u16string> ConnectorsServiceBase::GetCustomMessage( + AnalysisConnector connector, + const std::string& tag) { + if (!ConnectorsEnabled()) { + return std::nullopt; + } + + return connectors_manager_base_->GetCustomMessage(connector, tag); +} + +std::optional<GURL> ConnectorsServiceBase::GetLearnMoreUrl( + AnalysisConnector connector, + const std::string& tag) { + if (!ConnectorsEnabled()) { + return std::nullopt; + } + + return connectors_manager_base_->GetLearnMoreUrl(connector, tag); +} + +bool ConnectorsServiceBase::GetBypassJustificationRequired( + AnalysisConnector connector, + const std::string& tag) { + if (!ConnectorsEnabled()) { + return false; + } + + return connectors_manager_base_->GetBypassJustificationRequired(connector, + tag); +} + +void ConnectorsServiceBase::ObserveTelemetryReporting( + base::RepeatingCallback<void()> callback) { + connectors_manager_base_->SetTelemetryObserverCallback(callback); +} + +std::vector<std::string> ConnectorsServiceBase::GetAnalysisServiceProviderNames( + AnalysisConnector connector) { + if (!ConnectorsEnabled()) { + return {}; + } + + if (!GetDmToken(AnalysisConnectorScopePref(connector)).has_value()) { + return {}; + } + + return connectors_manager_base_->GetAnalysisServiceProviderNames(connector); +} + +ConnectorsManagerBase* +ConnectorsServiceBase::ConnectorsManagerBaseForTesting() { + return connectors_manager_base_.get(); +} + } // namespace enterprise_connectors
diff --git a/components/enterprise/connectors/core/connectors_service_base.h b/components/enterprise/connectors/core/connectors_service_base.h index e3b1284c..180cb5b 100644 --- a/components/enterprise/connectors/core/connectors_service_base.h +++ b/components/enterprise/connectors/core/connectors_service_base.h
@@ -35,6 +35,12 @@ kMaxValue = kNoDmToken, }; + explicit ConnectorsServiceBase( + std::unique_ptr<ConnectorsManagerBase> manager); + ConnectorsServiceBase(ConnectorsServiceBase&&); + ConnectorsServiceBase& operator=(ConnectorsServiceBase&&); + virtual ~ConnectorsServiceBase(); + // DM token accessor function for real-time URL checks. Returns a profile or // browser DM token depending on the policy scope. If there is no token to // use, returns the reason why. @@ -50,24 +56,50 @@ std::optional<policy::PolicyScope> GetRealtimeUrlCheckScope() const; // Returns whether the Connectors are enabled. - virtual bool IsConnectorEnabled(AnalysisConnector connector) const = 0; + virtual bool IsConnectorEnabled(AnalysisConnector connector) const; + + bool DelayUntilVerdict(AnalysisConnector connector); + + // Returns true if the admin enabled Bypass Justification. + bool GetBypassJustificationRequired(AnalysisConnector connector, + const std::string& tag); std::vector<std::string> GetReportingServiceProviderNames(); + std::vector<const AnalysisConfig*> GetAnalysisServiceConfigs( + AnalysisConnector connector); + + std::vector<std::string> GetAnalysisServiceProviderNames( + AnalysisConnector connector); + virtual std::optional<ReportingSettings> GetReportingSettings(); virtual std::optional<std::string> GetBrowserDmToken() const = 0; + // Gets custom message if set by the admin. + std::optional<std::u16string> GetCustomMessage(AnalysisConnector connector, + const std::string& tag); + + // Gets custom learn more URL if provided by the admin. + std::optional<GURL> GetLearnMoreUrl(AnalysisConnector connector, + const std::string& tag); + // Obtain a ClientMetadata instance corresponding to the current // OnSecurityEvent policy value. `is_cloud` is true when using a cloud- // based service provider and false when using a local service provider. virtual std::unique_ptr<ClientMetadata> BuildClientMetadata( bool is_cloud) = 0; + // Observe if reporting policies have changed to include telemetry event. + void ObserveTelemetryReporting(base::RepeatingCallback<void()> callback); + #if !BUILDFLAG(IS_CHROMEOS) std::optional<std::string> GetProfileDmToken() const; #endif + // Testing functions. + ConnectorsManagerBase* ConnectorsManagerBaseForTesting(); + protected: struct DmToken { DmToken(const std::string& value, policy::PolicyScope scope); @@ -98,11 +130,6 @@ virtual PrefService* GetPrefs() = 0; virtual const PrefService* GetPrefs() const = 0; - // Returns the `ConnectorsManagerBase` that should be used by this class to - // return reporting connector related settings. Should never return nullptr. - virtual ConnectorsManagerBase* GetConnectorsManagerBase() = 0; - virtual const ConnectorsManagerBase* GetConnectorsManagerBase() const = 0; - // Returns a `policy::CloudPolicyManager` corresponding to a managed user, if // one exists. virtual policy::CloudPolicyManager* GetManagedUserCloudPolicyManager() @@ -112,6 +139,8 @@ ClientMetadata::Browser* browser_proto); void PopulateDeviceMetadata(const std::string& client_id, ClientMetadata::Device* device_proto); + + std::unique_ptr<ConnectorsManagerBase> connectors_manager_base_; }; } // namespace enterprise_connectors
diff --git a/components/enterprise/connectors/core/connectors_service_base_unittest.cc b/components/enterprise/connectors/core/connectors_service_base_unittest.cc index cf5ff252..649aeac 100644 --- a/components/enterprise/connectors/core/connectors_service_base_unittest.cc +++ b/components/enterprise/connectors/core/connectors_service_base_unittest.cc
@@ -40,7 +40,13 @@ class TestConnectorsService : public ConnectorsServiceBase { public: - TestConnectorsService() { RegisterProfilePrefs(prefs_.registry()); } + explicit TestConnectorsService(TestingPrefServiceSimple* prefs) + : ConnectorsServiceBase( + std::make_unique<ConnectorsManager>(prefs, + GetServiceProviderConfig())), + prefs_(prefs) { + RegisterProfilePrefs(prefs_->registry()); + } void set_machine_dm_token() { machine_dm_token_ = ConnectorsServiceBase::DmToken( @@ -54,13 +60,8 @@ void set_connectors_enabled(bool enabled) { connectors_enabled_ = enabled; } - void set_connectors_manager_base() { - connectors_manager_ = std::make_unique<ConnectorsManager>( - &prefs_, GetServiceProviderConfig()); - } - std::optional<DmToken> GetDmToken(const char* scope_pref) const override { - switch (prefs_.GetInteger(kEnterpriseRealTimeUrlCheckScope)) { + switch (prefs_->GetInteger(kEnterpriseRealTimeUrlCheckScope)) { case policy::POLICY_SCOPE_MACHINE: return machine_dm_token_; case policy::POLICY_SCOPE_USER: @@ -80,19 +81,8 @@ bool ConnectorsEnabled() const override { return connectors_enabled_; } - bool IsConnectorEnabled(AnalysisConnector connector) const override { - return false; - } - - ConnectorsManagerBase* GetConnectorsManagerBase() override { - return connectors_manager_.get(); - } - const ConnectorsManagerBase* GetConnectorsManagerBase() const override { - return connectors_manager_.get(); - } - - PrefService* GetPrefs() override { return &prefs_; } - const PrefService* GetPrefs() const override { return &prefs_; } + PrefService* GetPrefs() override { return prefs_; } + const PrefService* GetPrefs() const override { return prefs_; } policy::CloudPolicyManager* GetManagedUserCloudPolicyManager() const override { @@ -104,14 +94,14 @@ bool connectors_enabled_ = false; std::optional<DmToken> machine_dm_token_; std::optional<DmToken> profile_dm_token_; - TestingPrefServiceSimple prefs_; - std::unique_ptr<ConnectorsManager> connectors_manager_; + raw_ptr<TestingPrefServiceSimple> prefs_; }; } // namespace TEST(ConnectorsServiceBaseTest, RealTimeUrlCheck_NoTokenOrPolicies) { - TestConnectorsService service; + TestingPrefServiceSimple prefs; + TestConnectorsService service(&prefs); ASSERT_FALSE(service.GetDMTokenForRealTimeUrlCheck().has_value()); ASSERT_EQ(service.GetDMTokenForRealTimeUrlCheck().error(), @@ -129,7 +119,9 @@ } TEST(ConnectorsServiceBaseTest, RealTimeUrlCheck_InvalidProfilePolicy) { - TestConnectorsService service; + TestingPrefServiceSimple prefs; + TestConnectorsService service(&prefs); + service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckMode, REAL_TIME_CHECK_FOR_MAINFRAME_ENABLED); service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckScope, @@ -159,7 +151,9 @@ } TEST(ConnectorsServiceBaseTest, RealTimeUrlCheck_InvalidMachinePolicy) { - TestConnectorsService service; + TestingPrefServiceSimple prefs; + TestConnectorsService service(&prefs); + service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckMode, REAL_TIME_CHECK_FOR_MAINFRAME_ENABLED); service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckScope, @@ -189,7 +183,9 @@ } TEST(ConnectorsServiceBaseTest, RealTimeUrlCheck_ValidProfilePolicy) { - TestConnectorsService service; + TestingPrefServiceSimple prefs; + TestConnectorsService service(&prefs); + service.set_connectors_enabled(true); service.set_profile_dm_token(); service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckMode, @@ -204,7 +200,9 @@ } TEST(ConnectorsServiceBaseTest, RealTimeUrlCheck_ValidMachinePolicy) { - TestConnectorsService service; + TestingPrefServiceSimple prefs; + TestConnectorsService service(&prefs); + service.set_connectors_enabled(true); service.set_machine_dm_token(); service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckMode, @@ -219,8 +217,7 @@ } class ConnectorsServiceBaseReportingSettingsTest - : public TestConnectorsService, - public testing::Test, + : public testing::Test, public testing::WithParamInterface<const char*> { public: const char* pref_value() const { return GetParam(); } @@ -235,8 +232,9 @@ }; TEST_P(ConnectorsServiceBaseReportingSettingsTest, Test) { - TestConnectorsService service; - service.set_connectors_manager_base(); + TestingPrefServiceSimple prefs; + TestConnectorsService service(&prefs); + if (pref_value()) { service.GetPrefs()->Set( pref(), *base::JSONReader::Read(pref_value(), @@ -244,10 +242,11 @@ service.GetPrefs()->SetInteger(scope_pref(), policy::POLICY_SCOPE_MACHINE); } - auto settings = service.GetConnectorsManagerBase()->GetReportingSettings(); + auto settings = + service.ConnectorsManagerBaseForTesting()->GetReportingSettings(); EXPECT_EQ(reporting_enabled(), settings.has_value()); EXPECT_EQ(pref_value() == kNormalReportingSettingsPref, - !service.GetConnectorsManagerBase() + !service.ConnectorsManagerBaseForTesting() ->GetReportingConnectorsSettingsForTesting() .empty()); }
diff --git a/components/enterprise/obfuscation/core/BUILD.gn b/components/enterprise/obfuscation/core/BUILD.gn index 604a530..e10cdcf 100644 --- a/components/enterprise/obfuscation/core/BUILD.gn +++ b/components/enterprise/obfuscation/core/BUILD.gn
@@ -16,6 +16,13 @@ "//base", "//crypto", ] + + if (!is_android) { + sources += [ + "obfuscated_file_reader.cc", + "obfuscated_file_reader.h", + ] + } } source_set("unit_tests") { @@ -26,6 +33,10 @@ "utils_unittest.cc", ] + if (!is_android) { + sources += [ "obfuscated_file_reader_unittest.cc" ] + } + deps = [ ":enterprise_obfuscation", "//base",
diff --git a/components/enterprise/obfuscation/core/obfuscated_file_reader.cc b/components/enterprise/obfuscation/core/obfuscated_file_reader.cc new file mode 100644 index 0000000..7e33c3e --- /dev/null +++ b/components/enterprise/obfuscation/core/obfuscated_file_reader.cc
@@ -0,0 +1,231 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/enterprise/obfuscation/core/obfuscated_file_reader.h" + +#include "base/files/file.h" +#include "base/types/expected.h" +#include "components/enterprise/obfuscation/core/utils.h" + +namespace enterprise_obfuscation { + +// static +base::expected<ObfuscatedFileReader, Error> ObfuscatedFileReader::Create( + HeaderData header_data, + base::File file) { + ObfuscatedFileReader reader(std::move(header_data), std::move(file)); + if (auto init_result = reader.Initialize(); !init_result.has_value()) { + return base::unexpected(init_result.error()); + } + return reader; +} + +ObfuscatedFileReader::ObfuscatedFileReader(HeaderData header_data, + base::File file) + : file_(std::move(file)), + derived_key_(std::move(header_data.derived_key)), + nonce_prefix_(std::move(header_data.nonce_prefix)) {} + +ObfuscatedFileReader::~ObfuscatedFileReader() = default; + +ObfuscatedFileReader::ObfuscatedFileReader(ObfuscatedFileReader&& other) = + default; +ObfuscatedFileReader& ObfuscatedFileReader::operator=( + ObfuscatedFileReader&& other) = default; + +base::expected<void, Error> ObfuscatedFileReader::Initialize() { + if (!file_.IsValid()) { + return base::unexpected(Error::kFileOperationError); + } + if (!BuildChunkIndex()) { + return base::unexpected(Error::kDeobfuscationFailed); + } + return base::ok(); +} + +// static +base::expected<HeaderData, Error> ObfuscatedFileReader::ReadHeaderData( + base::File& file) { + if (!file.IsValid()) { + return base::unexpected(Error::kFileOperationError); + } + + std::array<uint8_t, kHeaderSize> header_buffer; + base::span<uint8_t> buffer = base::span(header_buffer); + + if (file.Read(0u, buffer) != kHeaderSize) { + return base::unexpected(Error::kFileOperationError); + } + + return GetHeaderData(header_buffer); +} + +int64_t ObfuscatedFileReader::Read(base::span<uint8_t> buffer) { + uint64_t bytes_to_read = std::min(static_cast<uint64_t>(buffer.size_bytes()), + deobfuscated_size_ - current_offset_); + if (bytes_to_read == 0) { + return 0; + } + + uint64_t read_end_offset = current_offset_ + bytes_to_read; + uint64_t total_bytes_copied = 0; + + // Find the first chunk that might overlap with the read range. + auto it = std::lower_bound( + chunk_info_.begin(), chunk_info_.end(), current_offset_, + [](const ChunkInfo& chunk, uint64_t offset) { + return (chunk.deobfuscated_offset + chunk.deobfuscated_size) <= offset; + }); + + for (; it != chunk_info_.end(); ++it) { + const auto& chunk = *it; + uint64_t chunk_start_deobfuscated = chunk.deobfuscated_offset; + uint64_t chunk_end_deobfuscated = + chunk.deobfuscated_offset + chunk.deobfuscated_size; + + if (current_offset_ < chunk_end_deobfuscated && + read_end_offset > chunk_start_deobfuscated) { + // This chunk overlaps with the read range. + uint64_t obfuscated_chunk_size = chunk.deobfuscated_size + kAuthTagSize; + std::vector<uint8_t> obfuscated_data(obfuscated_chunk_size); + + std::optional<size_t> bytes_read = + file_.Read(chunk.obfuscated_offset, + base::as_writable_bytes(base::span(obfuscated_data))); + if (!bytes_read.has_value() || *bytes_read != obfuscated_chunk_size) { + return -1; + } + + size_t chunk_index = std::distance(chunk_info_.begin(), it); + bool is_last_chunk = (chunk_index == chunk_info_.size() - 1); + // TODO(crbug.com/378490429): Maybe add cache for chunk deobfuscations. + auto deobfuscated_result = + DeobfuscateDataChunk(obfuscated_data, derived_key_, nonce_prefix_, + chunk_index, is_last_chunk); + + if (!deobfuscated_result.has_value()) { + return -1; + } + + const std::vector<uint8_t>& deobfuscated_chunk = + deobfuscated_result.value(); + + uint64_t read_start_in_chunk = 0; + if (current_offset_ > chunk_start_deobfuscated) { + read_start_in_chunk = current_offset_ - chunk_start_deobfuscated; + } + + uint64_t read_end_in_chunk = chunk.deobfuscated_size; + if (read_end_offset < chunk_end_deobfuscated) { + read_end_in_chunk = read_end_offset - chunk_start_deobfuscated; + } + + uint64_t bytes_to_copy_from_chunk = + read_end_in_chunk - read_start_in_chunk; + + buffer.copy_prefix_from( + base::span(deobfuscated_chunk) + .subspan(static_cast<size_t>(read_start_in_chunk)) + .take_first(static_cast<size_t>(bytes_to_copy_from_chunk))); + buffer = buffer.subspan(static_cast<size_t>(bytes_to_copy_from_chunk)); + total_bytes_copied += bytes_to_copy_from_chunk; + } else if (chunk_start_deobfuscated >= read_end_offset) { + // This chunk is past the read range. + break; + } + } + + current_offset_ += total_bytes_copied; + return total_bytes_copied; +} + +int64_t ObfuscatedFileReader::Seek(int64_t offset, base::File::Whence whence) { + int64_t base = 0; + switch (whence) { + case base::File::Whence::FROM_BEGIN: + base = 0; + break; + case base::File::Whence::FROM_CURRENT: + base = current_offset_; + break; + case base::File::Whence::FROM_END: + base = deobfuscated_size_; + break; + } + + int64_t target_offset = base + offset; + if (target_offset < 0 || + target_offset > static_cast<int64_t>(deobfuscated_size_)) { + return -1; + } + + current_offset_ = target_offset; + return current_offset_; +} + +int64_t ObfuscatedFileReader::Tell() { + return current_offset_; +} + +int64_t ObfuscatedFileReader::GetSize() { + return deobfuscated_size_; +} + +bool ObfuscatedFileReader::BuildChunkIndex() { + int64_t file_length = file_.GetLength(); + if (file_length < 0) { + return false; + } + + uint64_t total_size = static_cast<uint64_t>(file_length); + if (total_size < kHeaderSize + kChunkSizePrefixSize) { + return false; // Not even enough space for header and one chunk prefix. + } + + uint64_t current_obfuscated_offset = kHeaderSize; + uint64_t current_deobfuscated_offset = 0; + deobfuscated_size_ = 0; + + while (current_obfuscated_offset < total_size) { + if (total_size - current_obfuscated_offset < kChunkSizePrefixSize) { + return false; // Incomplete prefix. + } + + std::array<uint8_t, kChunkSizePrefixSize> size_buffer; + std::optional<size_t> bytes_read = + file_.Read(current_obfuscated_offset, size_buffer); + if (!bytes_read.has_value() || *bytes_read != kChunkSizePrefixSize) { + return false; // Failed to read chunk size prefix. + } + + auto chunk_size_result = GetObfuscatedChunkSize(size_buffer); + if (!chunk_size_result.has_value()) { + return false; // Invalid chunk size prefix. + } + uint64_t obfuscated_chunk_size = chunk_size_result.value(); + + if (obfuscated_chunk_size < kAuthTagSize) { + return false; // Obfuscated chunk size smaller than auth tag. + } + + uint64_t deobfuscated_chunk_size = obfuscated_chunk_size - kAuthTagSize; + uint64_t chunk_data_offset = + current_obfuscated_offset + kChunkSizePrefixSize; + + chunk_info_.push_back({current_deobfuscated_offset, deobfuscated_chunk_size, + chunk_data_offset}); + current_deobfuscated_offset += deobfuscated_chunk_size; + deobfuscated_size_ += deobfuscated_chunk_size; + + current_obfuscated_offset += kChunkSizePrefixSize + obfuscated_chunk_size; + + if (current_obfuscated_offset > total_size) { + return false; // Chunk extends beyond file size. + } + } + + return true; +} + +} // namespace enterprise_obfuscation
diff --git a/components/enterprise/obfuscation/core/obfuscated_file_reader.h b/components/enterprise/obfuscation/core/obfuscated_file_reader.h new file mode 100644 index 0000000..e94f691 --- /dev/null +++ b/components/enterprise/obfuscation/core/obfuscated_file_reader.h
@@ -0,0 +1,68 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_ENTERPRISE_OBFUSCATION_CORE_OBFUSCATED_FILE_READER_H_ +#define COMPONENTS_ENTERPRISE_OBFUSCATION_CORE_OBFUSCATED_FILE_READER_H_ + +#include "base/files/file.h" +#include "base/types/expected.h" +#include "components/enterprise/obfuscation/core/utils.h" + +namespace enterprise_obfuscation { + +// Used in tests. +class ObfuscatedFileReaderPeer; + +// Manages reading and deobfuscating a file that was obfuscated with +// DownloadObfuscator. This class supports seek operations and on-demand +// deobfuscation of file chunks. +class COMPONENT_EXPORT(ENTERPRISE_OBFUSCATION) ObfuscatedFileReader { + public: + static base::expected<ObfuscatedFileReader, Error> Create( + HeaderData header_data, + base::File file); + + ~ObfuscatedFileReader(); + + static base::expected<HeaderData, Error> ReadHeaderData(base::File& file); + + ObfuscatedFileReader(const ObfuscatedFileReader&) = delete; + ObfuscatedFileReader& operator=(const ObfuscatedFileReader&) = delete; + ObfuscatedFileReader(ObfuscatedFileReader&& other); + ObfuscatedFileReader& operator=(ObfuscatedFileReader&& other); + + int64_t Read(base::span<uint8_t> buffer); + int64_t Seek(int64_t offset, base::File::Whence whence); + int64_t Tell(); + int64_t GetSize(); + + private: + friend class ObfuscatedFileReaderPeer; + + ObfuscatedFileReader(HeaderData header_data, base::File file); + + base::expected<void, Error> Initialize(); + + bool BuildChunkIndex(); + + base::File file_; + uint64_t current_offset_ = 0; // Offset in the deobfuscated stream. + uint64_t deobfuscated_size_ = 0; + + struct ChunkInfo { + uint64_t deobfuscated_offset = 0; // Offset in the deobfuscated stream. + uint64_t deobfuscated_size = 0; // Size of the deobfuscated chunk. + uint64_t obfuscated_offset = 0; // Offset in the obfuscated file. + }; + // Stores information about each chunk, sorted by deobfuscated_offset. + std::vector<ChunkInfo> chunk_info_; + + // Obfuscation parameters from the header. + std::array<uint8_t, kKeySize> derived_key_; + std::vector<uint8_t> nonce_prefix_; +}; + +} // namespace enterprise_obfuscation + +#endif // COMPONENTS_ENTERPRISE_OBFUSCATION_CORE_OBFUSCATED_FILE_READER_H_
diff --git a/components/enterprise/obfuscation/core/obfuscated_file_reader_unittest.cc b/components/enterprise/obfuscation/core/obfuscated_file_reader_unittest.cc new file mode 100644 index 0000000..1dc201e --- /dev/null +++ b/components/enterprise/obfuscation/core/obfuscated_file_reader_unittest.cc
@@ -0,0 +1,427 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/enterprise/obfuscation/core/obfuscated_file_reader.h" + +#include <numeric> + +#include "base/files/file.h" +#include "base/files/file_util.h" +#include "base/files/scoped_temp_dir.h" +#include "base/memory/scoped_refptr.h" +#include "base/test/bind.h" +#include "base/test/task_environment.h" +#include "components/enterprise/obfuscation/core/download_obfuscator.h" +#include "components/enterprise/obfuscation/core/utils.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace enterprise_obfuscation { + +namespace { +constexpr std::string_view kTestData1 = "Hello, world!"; +constexpr std::string_view kTestData2 = "This is another test."; +} // namespace + +class ObfuscatedFileReaderPeer { + public: + using ChunkInfo = ObfuscatedFileReader::ChunkInfo; + + static const std::vector<ChunkInfo>& GetChunkInfo( + const ObfuscatedFileReader& reader) { + return reader.chunk_info_; + } +}; + +class ObfuscatedFileReaderTest : public testing::Test { + public: + ObfuscatedFileReaderTest() = default; + + void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); } + + protected: + // Returns a pair of <Obfuscated File, Cleartext Data> + std::pair<base::File, std::vector<uint8_t>> CreateObfuscatedFile( + const std::vector<std::string_view>& chunks) { + enterprise_obfuscation::DownloadObfuscator obfuscator; + std::vector<uint8_t> obfuscated_content; + std::vector<uint8_t> cleartext_content; + for (size_t i = 0; i < chunks.size(); ++i) { + bool is_last_chunk = (i == chunks.size() - 1); + base::span<const uint8_t> chunk_span = base::as_byte_span(chunks[i]); + auto result = obfuscator.ObfuscateChunk(chunk_span, is_last_chunk); + EXPECT_TRUE(result.has_value()); + obfuscated_content.insert(obfuscated_content.end(), result->begin(), + result->end()); + cleartext_content.insert(cleartext_content.end(), chunk_span.begin(), + chunk_span.end()); + } + + base::FilePath path = temp_dir_.GetPath().AppendASCII("obfuscated.bin"); + EXPECT_TRUE(base::WriteFile(path, obfuscated_content)); + + return std::make_pair( + base::File(path, base::File::FLAG_OPEN | base::File::FLAG_READ), + cleartext_content); + } + + void RunSeekReadTest(ObfuscatedFileReader& reader, + const std::vector<uint8_t>& cleartext) { + if (cleartext.empty()) { + return; + } + + std::vector<size_t> positions; + const int size_limit = 10'000; + if (cleartext.size() <= size_limit) { + positions.resize(cleartext.size()); + std::iota(positions.begin(), positions.end(), 0); + } else { + positions.reserve(size_limit * 2); + for (size_t i = 0; i < size_limit; ++i) { + positions.push_back(i); + } + for (size_t i = 0; i < size_limit; ++i) { + positions.push_back(cleartext.size() - size_limit + i); + } + } + + for (size_t pos : positions) { + int64_t new_offset = reader.Seek(pos, base::File::Whence::FROM_BEGIN); + EXPECT_EQ(new_offset, static_cast<int64_t>(pos)); + + int64_t current_offset = reader.Tell(); + EXPECT_EQ(current_offset, static_cast<int64_t>(pos)); + + size_t bytes_to_read = std::min<size_t>(10, cleartext.size() - pos); + if (bytes_to_read == 0) { + continue; + } + + std::vector<uint8_t> buffer(bytes_to_read); + int64_t result = reader.Read(buffer); + + ASSERT_EQ(result, static_cast<int64_t>(bytes_to_read)); + + auto expected_span = base::span(cleartext).subspan(pos, bytes_to_read); + EXPECT_EQ(buffer, expected_span); + + current_offset = reader.Tell(); + EXPECT_EQ(current_offset, static_cast<int64_t>(pos + bytes_to_read)); + } + } + + void VerifyChunkIndex( + const std::vector<ObfuscatedFileReaderPeer::ChunkInfo>& chunk_info, + const std::vector<uint64_t>& expected_chunk_sizes) { + ASSERT_EQ(chunk_info.size(), expected_chunk_sizes.size()); + + uint64_t total_deobfuscated_size = 0; + uint64_t expected_obfuscated_offset = kHeaderSize + kChunkSizePrefixSize; + + for (size_t i = 0; i < expected_chunk_sizes.size(); ++i) { + uint64_t expected_deobfuscated_size = expected_chunk_sizes[i]; + EXPECT_EQ(chunk_info[i].obfuscated_offset, expected_obfuscated_offset); + EXPECT_EQ(chunk_info[i].deobfuscated_size, expected_deobfuscated_size); + EXPECT_EQ(chunk_info[i].deobfuscated_offset, total_deobfuscated_size); + + total_deobfuscated_size += expected_deobfuscated_size; + expected_obfuscated_offset += + kChunkSizePrefixSize + expected_deobfuscated_size + kAuthTagSize; + } + } + + base::test::TaskEnvironment task_environment_; + base::ScopedTempDir temp_dir_; +}; + +class ObfuscatedFileReaderParamTest + : public ObfuscatedFileReaderTest, + public testing::WithParamInterface<std::vector<std::string_view>> {}; + +TEST_P(ObfuscatedFileReaderParamTest, BuildChunkIndex) { + const auto& chunks = GetParam(); + auto [file, cleartext] = CreateObfuscatedFile(chunks); + ASSERT_TRUE(file.IsValid()); + + auto header_data = ObfuscatedFileReader::ReadHeaderData(file); + ASSERT_TRUE(header_data.has_value()); + + auto reader_result = ObfuscatedFileReader::Create( + std::move(header_data).value(), std::move(file)); + ASSERT_TRUE(reader_result.has_value()); + ObfuscatedFileReader& reader = reader_result.value(); + + const auto& chunk_info = ObfuscatedFileReaderPeer::GetChunkInfo(reader); + ASSERT_EQ(chunk_info.size(), chunks.size()); + + std::vector<uint64_t> expected_chunk_sizes; + for (const auto& chunk : chunks) { + expected_chunk_sizes.push_back(chunk.size()); + } + VerifyChunkIndex(chunk_info, expected_chunk_sizes); + + uint64_t total_deobfuscated_size = 0; + for (const auto& chunk : chunks) { + total_deobfuscated_size += chunk.size(); + } + + EXPECT_EQ(reader.GetSize(), static_cast<int64_t>(total_deobfuscated_size)); + + RunSeekReadTest(reader, cleartext); +} + +INSTANTIATE_TEST_SUITE_P( + All, + ObfuscatedFileReaderParamTest, + testing::Values(std::vector<std::string_view>{kTestData1}, + std::vector<std::string_view>{kTestData1, kTestData2})); + +TEST_F(ObfuscatedFileReaderTest, BuildChunkIndexLargeFile) { + constexpr size_t kTenMB = 10 * 1024 * 1024; + constexpr size_t kChunkSize = 1000; + std::vector<uint8_t> large_data(kTenMB); + for (size_t i = 0; i < kTenMB; ++i) { + large_data[i] = static_cast<uint8_t>(i % 256); + } + + enterprise_obfuscation::DownloadObfuscator obfuscator; + std::vector<uint8_t> obfuscated_content; + base::span<const uint8_t> full_span = large_data; + size_t num_chunks = 0; + for (size_t offset = 0; offset < kTenMB; offset += kChunkSize) { + size_t current_chunk_size = std::min(kChunkSize, kTenMB - offset); + base::span<const uint8_t> chunk_span = + full_span.subspan(offset, current_chunk_size); + bool is_last_chunk = (offset + current_chunk_size == kTenMB); + auto result = obfuscator.ObfuscateChunk(chunk_span, is_last_chunk); + ASSERT_TRUE(result.has_value()); + obfuscated_content.insert(obfuscated_content.end(), result->begin(), + result->end()); + num_chunks++; + } + + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + base::FilePath path = temp_dir.GetPath().AppendASCII("obfuscated_large.bin"); + ASSERT_TRUE(base::WriteFile(path, obfuscated_content)); + + base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ); + ASSERT_TRUE(file.IsValid()); + + auto header_data = ObfuscatedFileReader::ReadHeaderData(file); + ASSERT_TRUE(header_data.has_value()); + + auto reader_result = ObfuscatedFileReader::Create( + std::move(header_data).value(), std::move(file)); + ASSERT_TRUE(reader_result.has_value()); + ObfuscatedFileReader& reader = reader_result.value(); + + const auto& chunk_info = ObfuscatedFileReaderPeer::GetChunkInfo(reader); + EXPECT_EQ(chunk_info.size(), num_chunks); + EXPECT_EQ(static_cast<size_t>(reader.GetSize()), kTenMB); + + std::vector<uint64_t> expected_chunk_sizes; + for (size_t offset = 0; offset < kTenMB; offset += kChunkSize) { + expected_chunk_sizes.push_back(std::min(kChunkSize, kTenMB - offset)); + } + VerifyChunkIndex(chunk_info, expected_chunk_sizes); + + EXPECT_EQ(reader.GetSize(), static_cast<int64_t>(kTenMB)); + + RunSeekReadTest(reader, large_data); +} + +TEST_F(ObfuscatedFileReaderTest, SeekModes) { + auto [file, cleartext] = CreateObfuscatedFile({kTestData1, kTestData2}); + ASSERT_TRUE(file.IsValid()); + + auto header_data = ObfuscatedFileReader::ReadHeaderData(file); + ASSERT_TRUE(header_data.has_value()); + + auto reader_result = ObfuscatedFileReader::Create( + std::move(header_data).value(), std::move(file)); + ASSERT_TRUE(reader_result.has_value()); + ObfuscatedFileReader& reader = reader_result.value(); + + const int64_t file_size = static_cast<int64_t>(cleartext.size()); + ASSERT_EQ(reader.GetSize(), file_size); + + auto do_seek = [&](int64_t offset, base::File::Whence whence, + int64_t expected_offset) { + int64_t new_offset = reader.Seek(offset, whence); + EXPECT_EQ(new_offset, expected_offset); + + if (expected_offset != -1) { + int64_t tell_offset = reader.Tell(); + EXPECT_EQ(tell_offset, expected_offset); + } + }; + + // FROM_BEGIN + do_seek(0, base::File::Whence::FROM_BEGIN, 0); + do_seek(file_size / 2, base::File::Whence::FROM_BEGIN, file_size / 2); + do_seek(file_size, base::File::Whence::FROM_BEGIN, file_size); + do_seek(-1, base::File::Whence::FROM_BEGIN, -1); + do_seek(file_size + 1, base::File::Whence::FROM_BEGIN, -1); + + // FROM_CURRENT + do_seek(0, base::File::Whence::FROM_BEGIN, 0); // Reset to start + do_seek(10, base::File::Whence::FROM_CURRENT, 10); + EXPECT_EQ(reader.Tell(), 10); + do_seek(-5, base::File::Whence::FROM_CURRENT, 5); + EXPECT_EQ(reader.Tell(), 5); + do_seek(file_size - 5, base::File::Whence::FROM_CURRENT, file_size); + EXPECT_EQ(reader.Tell(), file_size); + do_seek(1, base::File::Whence::FROM_CURRENT, -1); // Past end + EXPECT_EQ(reader.Tell(), file_size); // Should not change on error + do_seek(0, base::File::Whence::FROM_BEGIN, 0); // Reset to start + do_seek(-1, base::File::Whence::FROM_CURRENT, -1); // Before start + EXPECT_EQ(reader.Tell(), 0); // Should not change on error + + // FROM_END + do_seek(0, base::File::Whence::FROM_END, file_size); + do_seek(-file_size / 2, base::File::Whence::FROM_END, + file_size - file_size / 2); + do_seek(-file_size, base::File::Whence::FROM_END, 0); + do_seek(1, base::File::Whence::FROM_END, -1); + do_seek(-file_size - 1, base::File::Whence::FROM_END, -1); +} + +TEST_F(ObfuscatedFileReaderTest, CorruptedFileTests) { + // Test Case 1: Invalid Header Size (Too Small) + { + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + base::FilePath path = + temp_dir.GetPath().AppendASCII("corrupt_header_size.bin"); + std::vector<uint8_t> content(kHeaderSize - 1, 0xAA); + ASSERT_TRUE(base::WriteFile(path, content)); + + base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ); + ASSERT_TRUE(file.IsValid()); + auto header_data = ObfuscatedFileReader::ReadHeaderData(file); + EXPECT_FALSE(header_data.has_value()); + EXPECT_EQ(header_data.error(), Error::kFileOperationError); + } + + // Test Case 2: Invalid Header Data (Malformed) + { + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + base::FilePath path = + temp_dir.GetPath().AppendASCII("corrupt_header_data.bin"); + std::vector<uint8_t> content(kHeaderSize, 0xBB); + // Intentionally corrupt the header size field. + content[0] = 0; // Invalid header size + ASSERT_TRUE(base::WriteFile(path, content)); + + base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ); + ASSERT_TRUE(file.IsValid()); + auto header_data = ObfuscatedFileReader::ReadHeaderData(file); + EXPECT_FALSE(header_data.has_value()); + EXPECT_EQ(header_data.error(), Error::kDeobfuscationFailed); + } + + // Test Case 3: File Too Small for Any Chunks + { + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + base::FilePath path = + temp_dir.GetPath().AppendASCII("corrupt_too_small.bin"); + std::vector<uint8_t> content(kHeaderSize + kChunkSizePrefixSize - 1, 0xCC); + ASSERT_TRUE(base::WriteFile(path, content)); + + // Valid header for this test. + std::array<uint8_t, kKeySize> derived_key; + std::vector<uint8_t> nonce_prefix; + auto header = CreateHeader(&derived_key, &nonce_prefix); + ASSERT_TRUE(header.has_value()); + std::copy(header->begin(), header->end(), content.begin()); + ASSERT_TRUE(base::WriteFile(path, content)); + + base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ); + ASSERT_TRUE(file.IsValid()); + auto header_data = ObfuscatedFileReader::ReadHeaderData(file); + ASSERT_TRUE(header_data.has_value()); + + auto reader_result = ObfuscatedFileReader::Create( + std::move(header_data).value(), std::move(file)); + EXPECT_FALSE(reader_result.has_value()); + EXPECT_EQ(reader_result.error(), Error::kDeobfuscationFailed); + } + + // Test Case 4: Incomplete Chunk Size Prefix + { + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + base::FilePath path = + temp_dir.GetPath().AppendASCII("incomplete_chunk.bin"); + + enterprise_obfuscation::DownloadObfuscator obfuscator; + std::vector<uint8_t> obfuscated_content; + base::span<const uint8_t> chunk_span = base::as_byte_span(kTestData1); + auto result = obfuscator.ObfuscateChunk(chunk_span, true); + ASSERT_TRUE(result.has_value()); + obfuscated_content.insert(obfuscated_content.end(), result->begin(), + result->end()); + ASSERT_TRUE(base::WriteFile(path, obfuscated_content)); + + base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ | + base::File::FLAG_WRITE); + ASSERT_TRUE(file.IsValid()); + + int64_t file_size = file.GetLength(); + ASSERT_GT(static_cast<size_t>(file_size), + kHeaderSize + kChunkSizePrefixSize); + + // Truncate the file to have an incomplete chunk size prefix. + ASSERT_TRUE(file.SetLength(file_size - 1)); + file.Close(); // Close the file to release the handle. + + base::File read_file(path, base::File::FLAG_OPEN | base::File::FLAG_READ); + ASSERT_TRUE(read_file.IsValid()); + + auto header_data = ObfuscatedFileReader::ReadHeaderData(read_file); + ASSERT_TRUE(header_data.has_value()); + + auto reader_result = ObfuscatedFileReader::Create( + std::move(header_data).value(), std::move(read_file)); + EXPECT_FALSE(reader_result.has_value()); + EXPECT_EQ(reader_result.error(), Error::kDeobfuscationFailed); + } + + // Test Case 5: Deobfuscation Failed for a Chunk (Tampered Data) + { + enterprise_obfuscation::DownloadObfuscator obfuscator; + base::span<const uint8_t> chunk_span = base::as_byte_span(kTestData1); + auto result = obfuscator.ObfuscateChunk(chunk_span, true); + ASSERT_TRUE(result.has_value()); + std::vector<uint8_t> obfuscated_content = std::move(result).value(); + + // Tamper with the obfuscated data. + obfuscated_content[obfuscated_content.size() - kAuthTagSize - 1] ^= 0xFF; + + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + base::FilePath path = temp_dir.GetPath().AppendASCII("corrupt_chunk.bin"); + ASSERT_TRUE(base::WriteFile(path, obfuscated_content)); + + base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ); + ASSERT_TRUE(file.IsValid()); + + auto header_data = ObfuscatedFileReader::ReadHeaderData(file); + ASSERT_TRUE(header_data.has_value()); + + auto reader_result = ObfuscatedFileReader::Create( + std::move(header_data).value(), std::move(file)); + ASSERT_TRUE(reader_result.has_value()); + ObfuscatedFileReader& reader = reader_result.value(); + + std::vector<uint8_t> buffer(kTestData1.size()); + int64_t read_result = reader.Read(buffer); + EXPECT_EQ(read_result, -1); + } +} + +} // namespace enterprise_obfuscation
diff --git a/components/exo/surface_unittest.cc b/components/exo/surface_unittest.cc index bd3afb9..75ef18e 100644 --- a/components/exo/surface_unittest.cc +++ b/components/exo/surface_unittest.cc
@@ -164,7 +164,8 @@ ShellSurface* shell_surface, Transform transform, const gfx::RectF& expected_rect, - bool has_viewport); + bool has_viewport, + const gfx::Size& buffer_size); private: base::test::ScopedFeatureList feature_list_; @@ -925,10 +926,12 @@ // a uv rect. auto* tex_draw_quad = viz::TextureDrawQuad::MaterialCast(quad_list.front()); - EXPECT_POINTF_NEAR(tex_draw_quad->uv_top_left, gfx::PointF(0, 0), + const gfx::RectF tex_draw_quad_tex_coords( + tex_draw_quad->GetNormalizedTexCoords(child_buffer_size)); + EXPECT_POINTF_NEAR(tex_draw_quad_tex_coords.origin(), gfx::PointF(0, 0), 0.001f); - EXPECT_POINTF_NEAR(tex_draw_quad->uv_bottom_right, gfx::PointF(1, 1), - 0.001f); + EXPECT_POINTF_NEAR(tex_draw_quad_tex_coords.bottom_right(), + gfx::PointF(1, 1), 0.001f); EXPECT_EQ(gfx::Transform(), transform); EXPECT_EQ(kTestRects[i], rect); } else { @@ -976,7 +979,8 @@ ShellSurface* shell_surface, Transform transform, const gfx::RectF& expected_rect, - bool has_viewport) { + bool has_viewport, + const gfx::Size& buffer_size) { const gfx::Rect target_with_no_viewport(ToPixel(gfx::Rect(gfx::Size(52, 4)))); const gfx::Rect target_with_viewport(ToPixel(gfx::Rect(gfx::Size(128, 64)))); @@ -999,8 +1003,7 @@ ASSERT_EQ(1u, quad_list.size()); const viz::TextureDrawQuad* quad = viz::TextureDrawQuad::MaterialCast(quad_list.front()); - EXPECT_EQ(expected_rect.origin(), quad->uv_top_left); - EXPECT_EQ(expected_rect.bottom_right(), quad->uv_bottom_right); + EXPECT_EQ(expected_rect, quad->GetNormalizedTexCoords(buffer_size)); EXPECT_EQ( (has_viewport) ? target_with_viewport : target_with_no_viewport, cc::MathUtil::MapEnclosingClippedRect( @@ -1069,7 +1072,7 @@ for (const auto& tc : testcases) { SetCropAndBufferTransformHelperTransformAndTest( surface.get(), shell_surface.get(), tc.transform, - gfx::SkRectToRectF(*tc.expected_rect), false); + gfx::SkRectToRectF(*tc.expected_rect), false, buffer_size); } surface->SetViewport(gfx::SizeF(128, 64)); @@ -1077,7 +1080,7 @@ for (const auto& tc : testcases) { SetCropAndBufferTransformHelperTransformAndTest( surface.get(), shell_surface.get(), tc.transform, - gfx::SkRectToRectF(*tc.expected_rect), true); + gfx::SkRectToRectF(*tc.expected_rect), true, buffer_size); } }
diff --git a/components/history_clusters/core/context_clusterer_history_service_observer.cc b/components/history_clusters/core/context_clusterer_history_service_observer.cc index 4e47891..221e505a 100644 --- a/components/history_clusters/core/context_clusterer_history_service_observer.cc +++ b/components/history_clusters/core/context_clusterer_history_service_observer.cc
@@ -9,6 +9,7 @@ #include "base/timer/elapsed_timer.h" #include "base/trace_event/trace_event.h" #include "components/history/core/browser/history_service.h" +#include "components/history/core/browser/history_types.h" #include "components/history_clusters/core/config.h" #include "components/history_clusters/core/history_clusters_util.h" #include "components/optimization_guide/core/hints/optimization_guide_decider.h" @@ -156,6 +157,10 @@ const history::VisitedURLInfo& visited_url_info) { TRACE_EVENT0("browser", "ContextClusteringHistoryServiceObserver::OnURLVisited"); + if (visited_url_info.response_code_category == + history::VisitResponseCodeCategory::k404) { + return; + } ScopedVisitProcessingTimer url_visited_processing_timer( VisitProcessingStage::kUrlVisited);
diff --git a/components/history_clusters/core/context_clusterer_history_service_observer_unittest.cc b/components/history_clusters/core/context_clusterer_history_service_observer_unittest.cc index ea71aefb..476af800 100644 --- a/components/history_clusters/core/context_clusterer_history_service_observer_unittest.cc +++ b/components/history_clusters/core/context_clusterer_history_service_observer_unittest.cc
@@ -215,7 +215,9 @@ history::VisitID opener_visit = history::kInvalidVisitID, history::VisitID referring_visit = history::kInvalidVisitID, bool is_synced_visit = false, - bool is_visible_visit = true) { + bool is_visible_visit = true, + history::VisitResponseCodeCategory response_code_category = + history::VisitResponseCodeCategory::kNot404) { history::URLRow url_row(url); history::VisitRow new_visit; new_visit.visit_id = visit_id; @@ -229,8 +231,7 @@ ui::PAGE_TRANSITION_CHAIN_END); observer_->OnURLVisited( history_service_.get(), - history::VisitedURLInfo(url_row, new_visit, - history::VisitResponseCodeCategory::kNot404)); + history::VisitedURLInfo(url_row, new_visit, response_code_category)); } // Simulates deleting `urls` from history. If `urls` is empty, we will @@ -648,6 +649,28 @@ "History.Clusters.ContextClusterer.DbLatency.ReserveNextClusterId", 0); } +TEST_F(ContextClustererHistoryServiceObserverTest, Skips404Visits) { + base::HistogramTester histogram_tester; + + SetPersistenceExpectedConfig(); + + VisitURL(GURL("https://example.com"), 1, base::Time::FromTimeT(123), + history::kInvalidVisitID, history::kInvalidVisitID, + /*is_synced_visit=*/false, /*is_visible_visit=*/true, + history::VisitResponseCodeCategory::k404); + + EXPECT_EQ(0, GetNumClustersCreated()); + + // No DB latency histograms should be recorded. + histogram_tester.ExpectTotalCount( + "History.Clusters.ContextClusterer.DbLatency.ReserveNextClusterId", 0); + histogram_tester.ExpectTotalCount( + "History.Clusters.ContextClusterer.DbLatency.UpdateClusterVisit", 0); + // Visit processing histogram should not be recorded. + histogram_tester.ExpectTotalCount( + "History.Clusters.ContextClusterer.VisitProcessingLatency.UrlVisited", 0); +} + TEST_F(ContextClustererHistoryServiceObserverTest, MultipleClusters) { VisitURL(GURL("https://example.com"), 1, base::Time::FromTimeT(1)); VisitURL(GURL("https://example.com/2"), 2, base::Time::FromTimeT(2), 1);
diff --git a/components/history_clusters/core/history_clusters_service.cc b/components/history_clusters/core/history_clusters_service.cc index f5f6669..b8d0e08 100644 --- a/components/history_clusters/core/history_clusters_service.cc +++ b/components/history_clusters/core/history_clusters_service.cc
@@ -372,6 +372,10 @@ void HistoryClustersService::OnURLVisited( history::HistoryService* history_service, const history::VisitedURLInfo& visited_url_info) { + if (visited_url_info.response_code_category == + history::VisitResponseCodeCategory::k404) { + return; + } if (!visited_url_info.visit_row.originator_cache_guid.empty()) { received_synced_visit_since_last_update_ = true; }
diff --git a/components/input/render_input_router.cc b/components/input/render_input_router.cc index b077651..61814481 100644 --- a/components/input/render_input_router.cc +++ b/components/input/render_input_router.cc
@@ -310,7 +310,11 @@ } void RenderInputRouter::OnUnconfirmedTapConvertedToTap() { - render_input_router_client_->OnUnconfirmedTapConvertedToTap(); + // TODO(crbug.com/461701945): Reset gesture timers on Viz as well where + // `render_input_router_client_` is null. + if (render_input_router_client_) { + render_input_router_client_->OnUnconfirmedTapConvertedToTap(); + } } blink::mojom::InputEventResultState RenderInputRouter::FilterInputEvent(
diff --git a/components/omnibox/browser/history_fuzzy_provider.cc b/components/omnibox/browser/history_fuzzy_provider.cc index 0eaeb22..1071d82 100644 --- a/components/omnibox/browser/history_fuzzy_provider.cc +++ b/components/omnibox/browser/history_fuzzy_provider.cc
@@ -684,6 +684,10 @@ void HistoryFuzzyProvider::OnURLVisited( history::HistoryService* history_service, const history::VisitedURLInfo& visited_url_info) { + if (visited_url_info.response_code_category == + history::VisitResponseCodeCategory::k404) { + return; + } if (root_.TerminalCount() < std::min(OmniboxFieldTrial::MaxNumHQPUrlsIndexedAtStartup(), kMaxTerminalCount)) {
diff --git a/components/omnibox/browser/lens_suggest_inputs_utils.h b/components/omnibox/browser/lens_suggest_inputs_utils.h index 2dcbe13..b81dbc6 100644 --- a/components/omnibox/browser/lens_suggest_inputs_utils.h +++ b/components/omnibox/browser/lens_suggest_inputs_utils.h
@@ -14,11 +14,12 @@ std::optional<lens::proto::LensOverlaySuggestInputs>)>; inline bool AreLensSuggestInputsReady( - std::optional<lens::proto::LensOverlaySuggestInputs> suggest_inputs) { -return suggest_inputs.has_value() && - suggest_inputs->has_search_session_id() && - suggest_inputs->has_contextual_visual_input_type() && - suggest_inputs->has_encoded_request_id(); + const std::optional<lens::proto::LensOverlaySuggestInputs>& + suggest_inputs) { + return suggest_inputs.has_value() && + suggest_inputs->has_search_session_id() && + suggest_inputs->has_contextual_visual_input_type() && + suggest_inputs->has_encoded_request_id(); } // These values are persisted to logs. Entries should not be renumbered and
diff --git a/components/optimization_guide/internal b/components/optimization_guide/internal index 41ab3397..b54a987 160000 --- a/components/optimization_guide/internal +++ b/components/optimization_guide/internal
@@ -1 +1 @@ -Subproject commit 41ab339735f8f9a9f8dad87d3d81cfd89ead6212 +Subproject commit b54a9872b4a49c01ed1f93011dfd96ad67803be7
diff --git a/components/page_content_annotations/core/page_content_annotations_features.cc b/components/page_content_annotations/core/page_content_annotations_features.cc index 1d2d4a1..15fcdf3 100644 --- a/components/page_content_annotations/core/page_content_annotations_features.cc +++ b/components/page_content_annotations/core/page_content_annotations_features.cc
@@ -67,6 +67,46 @@ const base::FeatureParam<std::string> kPageContentExtractionTriggeringMode{ &kAnnotatedPageContentExtraction, "triggering_mode", "on_load"}; +bool IsSupportedLocale(const std::string& locale, + const std::string& supported_locales) { + if (supported_locales == "*") { + return true; + } + + std::vector<std::string> supported = base::SplitString( + supported_locales, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + // An empty admits any locale. + if (supported.empty()) { + return true; + } + + // Otherwise, the locale or the primary language subtag must match an element + // of the allowlist. + return base::Contains(supported, locale) || + base::Contains(supported, l10n_util::GetLanguage(locale)); +} + +bool IsSupportedCountry(const std::string& country_code, + const std::string& supported_countries) { + if (supported_countries == "*") { + return true; + } + + std::vector<std::string> supported = + base::SplitString(supported_countries, ",", base::TRIM_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); + // An empty allowlist admits any country. + if (supported.empty()) { + return true; + } + + return std::ranges::any_of( + supported, [&country_code](const auto& supported_country_code) { + return base::EqualsCaseInsensitiveASCII(supported_country_code, + country_code); + }); +} + } // namespace // Enables page content to be annotated. @@ -85,9 +125,6 @@ BASE_FEATURE(kOptimizationGuideUseContinueOnShutdownForPageContentAnnotations, enabled_by_default_non_ios); -BASE_FEATURE(kPageContentAnnotationsPersistSalientImageMetadata, - base::FEATURE_ENABLED_BY_DEFAULT); - BASE_FEATURE(kExtractRelatedSearchesFromPrefetchedZPSResponse, enabled_by_default_desktop_only); @@ -209,14 +246,10 @@ bool ShouldPersistSalientImageMetadata(const std::string& locale, const std::string& country_code) { - return base::FeatureList::IsEnabled( - kPageContentAnnotationsPersistSalientImageMetadata) && - IsSupportedLocaleForFeature( - locale, kPageContentAnnotationsPersistSalientImageMetadata, - enabled_all_mobile_locales_en_us_desktop_only) && - IsSupportedCountryForFeature( - country_code, kPageContentAnnotationsPersistSalientImageMetadata, - enabled_all_mobile_countries_us_desktop_only); + return IsSupportedLocale(locale, + enabled_all_mobile_locales_en_us_desktop_only) && + IsSupportedCountry(country_code, + enabled_all_mobile_countries_us_desktop_only); } size_t MaxRelatedSearchesCacheSize() { @@ -252,9 +285,10 @@ return PageContentExtractionTriggeringMode::kOnLoad; } -bool IsSupportedLocaleForFeature(const std::string locale, - const base::Feature& feature, - const std::string& default_value) { +bool IsSupportedLocaleForFeature( + const std::string& locale, + const base::Feature& feature, + const std::string& default_value = "de,en,es,fr,it,nl,pt,tr") { if (!base::FeatureList::IsEnabled(feature)) { return false; } @@ -265,22 +299,8 @@ // The default list of supported locales for optimization guide features. value = default_value; } - if (value == "*") { - // Still provide a way to enable all locales remotely via the '*' character. - return true; - } - std::vector<std::string> supported_locales = base::SplitString( - value, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - // An empty allowlist admits any locale. - if (supported_locales.empty()) { - return true; - } - - // Otherwise, the locale or the primary language subtag must match an element - // of the allowlist. - return base::Contains(supported_locales, locale) || - base::Contains(supported_locales, l10n_util::GetLanguage(locale)); + return IsSupportedLocale(locale, value); } bool IsSupportedCountryForFeature(const std::string& country_code, @@ -296,24 +316,8 @@ // The default list of supported countries for optimization guide features. value = default_value; } - if (value == "*") { - // Still provide a way to enable all countries remotely via the '*' - // character. - return true; - } - std::vector<std::string> supported_countries = base::SplitString( - value, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - // An empty allowlist admits any country. - if (supported_countries.empty()) { - return true; - } - - return std::ranges::any_of( - supported_countries, [&country_code](const auto& supported_country_code) { - return base::EqualsCaseInsensitiveASCII(supported_country_code, - country_code); - }); + return IsSupportedCountry(country_code, value); } } // namespace page_content_annotations::features
diff --git a/components/page_content_annotations/core/page_content_annotations_features.h b/components/page_content_annotations/core/page_content_annotations_features.h index 6546be34..fe4fa7cb 100644 --- a/components/page_content_annotations/core/page_content_annotations_features.h +++ b/components/page_content_annotations/core/page_content_annotations_features.h
@@ -21,8 +21,6 @@ COMPONENT_EXPORT(PAGE_CONTENT_ANNOTATIONS_FEATURES) BASE_DECLARE_FEATURE(kRemotePageMetadata); COMPONENT_EXPORT(PAGE_CONTENT_ANNOTATIONS_FEATURES) -BASE_DECLARE_FEATURE(kPageContentAnnotationsPersistSalientImageMetadata); -COMPONENT_EXPORT(PAGE_CONTENT_ANNOTATIONS_FEATURES) BASE_DECLARE_FEATURE(kExtractRelatedSearchesFromPrefetchedZPSResponse); // Enables extraction of AnnotatedPageContent for every page load. @@ -170,7 +168,7 @@ // any user may load it, while "" uses the |default_value| allowlist. // Exposed for test coverage. COMPONENT_EXPORT(PAGE_CONTENT_ANNOTATIONS_FEATURES) -extern bool IsSupportedLocaleForFeature(const std::string locale, +extern bool IsSupportedLocaleForFeature(const std::string& locale, const base::Feature& feature, const std::string& default_value);
diff --git a/components/page_content_annotations/core/page_content_annotations_features_unittest.cc b/components/page_content_annotations/core/page_content_annotations_features_unittest.cc index b3bfd1a3..dae6efea 100644 --- a/components/page_content_annotations/core/page_content_annotations_features_unittest.cc +++ b/components/page_content_annotations/core/page_content_annotations_features_unittest.cc
@@ -114,19 +114,20 @@ } TEST(PageContentAnnotationsFeaturesTest, ShouldPersistSalientImageMetadata) { - base::test::ScopedFeatureList scoped_feature_list; - - scoped_feature_list.InitAndEnableFeatureWithParameters( - features::kPageContentAnnotationsPersistSalientImageMetadata, - {{"supported_locales", "en-US,en-CA"}, {"supported_countries", "US,CA"}}); - +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + // Mobile should accept all locales and countries. EXPECT_TRUE(features::ShouldPersistSalientImageMetadata("en-US", "CA")); + EXPECT_TRUE(features::ShouldPersistSalientImageMetadata("fr-CH", "CH")); +#else + // Desktop should only accept en-US, US. + EXPECT_TRUE(features::ShouldPersistSalientImageMetadata("en-US", "US")); // Tests case-insensitivity. - EXPECT_TRUE(features::ShouldPersistSalientImageMetadata("en-US", "cA")); + EXPECT_TRUE(features::ShouldPersistSalientImageMetadata("en-US", "uS")); EXPECT_FALSE(features::ShouldPersistSalientImageMetadata("", "")); EXPECT_FALSE( features::ShouldPersistSalientImageMetadata("en-US", "badcountry")); EXPECT_FALSE(features::ShouldPersistSalientImageMetadata("badlocale", "US")); +#endif } TEST(PageContentAnnotationsFeaturesTest, @@ -155,41 +156,41 @@ base::test::ScopedFeatureList scoped_feature_list; // Specified params should override defaults. scoped_feature_list.InitAndEnableFeatureWithParameters( - features::kPageContentAnnotationsPersistSalientImageMetadata, + features::kRemotePageMetadata, {{"supported_locales", "en-US,en-CA,fr"}, {"supported_countries", "*"}}); // All countries allowed by param, ignoring default_value allowlist. EXPECT_TRUE(features::IsSupportedCountryForFeature( - "US", features::kPageContentAnnotationsPersistSalientImageMetadata, + "US", features::kRemotePageMetadata, /*default_value=*/"")); EXPECT_TRUE(features::IsSupportedCountryForFeature( - "CA", features::kPageContentAnnotationsPersistSalientImageMetadata, + "CA", features::kRemotePageMetadata, /*default_value=*/"*")); EXPECT_TRUE(features::IsSupportedCountryForFeature( - "CA", features::kPageContentAnnotationsPersistSalientImageMetadata, + "CA", features::kRemotePageMetadata, /*default_value=*/"US")); // Locales only allow en-US,en-CA specifically respecting param. EXPECT_TRUE(features::IsSupportedLocaleForFeature( - "en-CA", features::kPageContentAnnotationsPersistSalientImageMetadata, + "en-CA", features::kRemotePageMetadata, /*default_value=*/"*")); EXPECT_TRUE(features::IsSupportedLocaleForFeature( - "en-US", features::kPageContentAnnotationsPersistSalientImageMetadata, + "en-US", features::kRemotePageMetadata, /*default_value=*/"*")); // en locale is less specific than allowlist so it doesn't match. - EXPECT_FALSE(features::IsSupportedLocaleForFeature( - "en", features::kPageContentAnnotationsPersistSalientImageMetadata, - /*default_value=*/"")); + EXPECT_FALSE( + features::IsSupportedLocaleForFeature("en", features::kRemotePageMetadata, + /*default_value=*/"")); // More specific than allowlist is allowed. + EXPECT_TRUE( + features::IsSupportedLocaleForFeature("fr", features::kRemotePageMetadata, + /*default_value=*/"*")); EXPECT_TRUE(features::IsSupportedLocaleForFeature( - "fr", features::kPageContentAnnotationsPersistSalientImageMetadata, + "fr-CA", features::kRemotePageMetadata, /*default_value=*/"*")); - EXPECT_TRUE(features::IsSupportedLocaleForFeature( - "fr-CA", features::kPageContentAnnotationsPersistSalientImageMetadata, - /*default_value=*/"*")); + EXPECT_FALSE( + features::IsSupportedLocaleForFeature("it", features::kRemotePageMetadata, + /*default_value=*/"")); EXPECT_FALSE(features::IsSupportedLocaleForFeature( - "it", features::kPageContentAnnotationsPersistSalientImageMetadata, - /*default_value=*/"")); - EXPECT_FALSE(features::IsSupportedLocaleForFeature( - "zh-TW", features::kPageContentAnnotationsPersistSalientImageMetadata, + "zh-TW", features::kRemotePageMetadata, /*default_value=*/"")); }
diff --git a/components/page_content_annotations/core/page_content_annotations_service_unittest.cc b/components/page_content_annotations/core/page_content_annotations_service_unittest.cc index 29d8735c..ad5dd929 100644 --- a/components/page_content_annotations/core/page_content_annotations_service_unittest.cc +++ b/components/page_content_annotations/core/page_content_annotations_service_unittest.cc
@@ -461,21 +461,7 @@ /*local_navigation_id=*/1); } -class PageContentAnnotationsServiceSalientImageMetadataTest - : public PageContentAnnotationsServiceTest { - public: - PageContentAnnotationsServiceSalientImageMetadataTest() { - scoped_feature_list_.InitAndEnableFeatureWithParameters( - features::kPageContentAnnotationsPersistSalientImageMetadata, - {{"supported_locales", "*"}, {"supported_countries", "*"}}); - } - - private: - base::test::ScopedFeatureList scoped_feature_list_; -}; - -TEST_F(PageContentAnnotationsServiceSalientImageMetadataTest, - RegistersTypeWhenFeatureEnabled) { +TEST_F(PageContentAnnotationsServiceTest, RegistersType) { std::vector<optimization_guide::proto::OptimizationType> registered_optimization_types = optimization_guide_decider()->registered_optimization_types(); @@ -483,21 +469,20 @@ optimization_guide::proto::SALIENT_IMAGE)); } -TEST_F(PageContentAnnotationsServiceSalientImageMetadataTest, - DoesNotPersistIfServerHasNoData) { +TEST_F(PageContentAnnotationsServiceTest, DoesNotPersistIfServerHasNoData) { // Navigate. VisitURL(GURL("http://www.nohints.com"), u"sometitle", 13, /*local_navigation_id=*/1); } -TEST_F(PageContentAnnotationsServiceSalientImageMetadataTest, +TEST_F(PageContentAnnotationsServiceTest, DoesNotPersistIfServerReturnsWrongMetadata) { // Navigate. VisitURL(GURL("http://wrongmetadata.com"), u"sometitle", 13, /*local_navigation_id=*/1); } -TEST_F(PageContentAnnotationsServiceSalientImageMetadataTest, +TEST_F(PageContentAnnotationsServiceTest, RequestsToPersistIfHasSalientImageMetadata) { EXPECT_CALL(*history_service_, SetHasUrlKeyedImageForVisit(true, 13));
diff --git a/components/page_load_metrics/browser/BUILD.gn b/components/page_load_metrics/browser/BUILD.gn index 73fedc2..6fc9469 100644 --- a/components/page_load_metrics/browser/BUILD.gn +++ b/components/page_load_metrics/browser/BUILD.gn
@@ -69,8 +69,6 @@ "page_load_metrics_embedder_interface.h", "page_load_metrics_forward_observer.cc", "page_load_metrics_forward_observer.h", - "page_load_metrics_memory_tracker.cc", - "page_load_metrics_memory_tracker.h", "page_load_metrics_observer.cc", "page_load_metrics_observer.h", "page_load_metrics_observer_delegate.cc", @@ -164,7 +162,6 @@ "observers/use_counter_page_load_metrics_observer_unittest.cc", "observers/zstd_page_load_metrics_observer_unittest.cc", "page_load_metrics_forward_observer_unittest.cc", - "page_load_metrics_memory_tracker_unittest.cc", "page_load_metrics_util_unittest.cc", "page_load_tracker_unittest.cc", "resource_tracker_unittest.cc",
diff --git a/components/page_load_metrics/browser/features.cc b/components/page_load_metrics/browser/features.cc index 73a38e6..986ceb2 100644 --- a/components/page_load_metrics/browser/features.cc +++ b/components/page_load_metrics/browser/features.cc
@@ -27,8 +27,6 @@ "category_prefix", /*default_value=*/""); -BASE_FEATURE(kV8PerFrameMemoryMonitoring, base::FEATURE_DISABLED_BY_DEFAULT); - BASE_FEATURE(kBackForwardCacheEmitZeroSamplesForKeyMetrics, base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/components/page_load_metrics/browser/features.h b/components/page_load_metrics/browser/features.h index 82b1f54b..b95090c 100644 --- a/components/page_load_metrics/browser/features.h +++ b/components/page_load_metrics/browser/features.h
@@ -23,9 +23,6 @@ // The prefix of the URL category for beacon-leakage-related logging logic. BASE_DECLARE_FEATURE_PARAM(std::string, kBeaconLeakageLoggingCategoryPrefix); -// Enables or disables per-frame memory monitoring. -BASE_DECLARE_FEATURE(kV8PerFrameMemoryMonitoring); - // Enables to emit zero values for some key metrics when back-forward cache is // used. //
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc index 13f23e68..2c2b9ec6 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -19,7 +19,6 @@ #include "base/tracing/protos/chrome_track_event.pbzero.h" #include "components/page_load_metrics/browser/metrics_lifecycle_observer.h" #include "components/page_load_metrics/browser/page_load_metrics_embedder_interface.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" #include "components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h" #include "components/page_load_metrics/browser/page_load_metrics_util.h" #include "components/page_load_metrics/browser/page_load_tracker.h" @@ -252,22 +251,10 @@ void MetricsWebContentsObserver::RenderFrameDeleted( content::RenderFrameHost* rfh) { - if (auto* memory_tracker = GetMemoryTracker()) { - memory_tracker->OnRenderFrameDeleted(rfh, this); - } - if (PageLoadTracker* tracker = GetPageLoadTracker(rfh)) { tracker->RenderFrameDeleted(rfh); } - content::GlobalRenderFrameHostId rfh_id = rfh->GetGlobalId(); - auto new_end_it = std::remove_if(queued_memory_updates_.begin(), - queued_memory_updates_.end(), - [rfh_id](const MemoryUpdate& update) { - return update.routing_id == rfh_id; - }); - queued_memory_updates_.erase(new_end_it, queued_memory_updates_.end()); - // PageLoadTracker and smoothness data can be associated only with a main // frame. if (rfh->GetParent()) { @@ -845,19 +832,6 @@ } } - // Send queued memory updates for the tracker. - content::GlobalRenderFrameHostId rfh_id = render_frame_host->GetGlobalId(); - auto first_update_for_rfh = std::partition( - queued_memory_updates_.begin(), queued_memory_updates_.end(), - [rfh_id](const MemoryUpdate& update) { - return update.routing_id != rfh_id; - }); - if (first_update_for_rfh != queued_memory_updates_.end()) { - raw_tracker->OnV8MemoryChanged(std::vector<MemoryUpdate>( - first_update_for_rfh, queued_memory_updates_.end())); - queued_memory_updates_.erase(first_update_for_rfh, - queued_memory_updates_.end()); - } } void MetricsWebContentsObserver::MaybeStorePageLoadTrackerForBackForwardCache( @@ -1376,34 +1350,6 @@ } } -void MetricsWebContentsObserver::OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) { - std::map<PageLoadTracker*, std::vector<MemoryUpdate>> per_tracker_updates; - for (const MemoryUpdate& update : memory_updates) { - content::RenderFrameHost* rfh = - content::RenderFrameHost::FromID(update.routing_id); - if (!rfh) { - continue; - } - PageLoadTracker* tracker = GetPageLoadTracker(rfh); - if (tracker) { - per_tracker_updates[tracker].push_back(update); - } else { - // If the load hasn't committed yet, then memory updates can't be sent - // at this time, but will still need to be sent later. Queue the updates - // in case `tracker` is null due to the navigation having not yet - // completed, in which case the queued updates will be sent when - // HandleCommittedNavigationForTrackedLoad is called. Otherwise, they - // will be ignored and cleared when `rfh` is deleted. - queued_memory_updates_.push_back(update); - } - } - - for (const auto& map_pair : per_tracker_updates) { - map_pair.first->OnV8MemoryChanged(map_pair.second); - } -} - void MetricsWebContentsObserver::OnSharedStorageWorkletHostCreated( content::RenderFrameHost* rfh) { if (!rfh) { @@ -1557,12 +1503,6 @@ return nullptr; } -PageLoadMetricsMemoryTracker* MetricsWebContentsObserver::GetMemoryTracker() - const { - return embedder_interface_->GetMemoryTrackerForBrowserContext( - web_contents()->GetBrowserContext()); -} - WEB_CONTENTS_USER_DATA_KEY_IMPL(MetricsWebContentsObserver); } // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.h b/components/page_load_metrics/browser/metrics_web_contents_observer.h index 470e3b9..683e4c8 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer.h +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.h
@@ -44,7 +44,6 @@ class PageLoadMetricsMemoryTracker; class PageLoadMetricsObserverDelegate; class PageLoadTracker; -struct MemoryUpdate; // MetricsWebContentsObserver tracks page loads and loading metrics // related data based on IPC messages received from a @@ -193,11 +192,6 @@ // not be called within WebContentsObserver::DidFinishNavigation methods. void OnPrefetchLikely(); - // Called when V8 per-frame memory usage updates are available. Virtual for - // test classes to override. - virtual void OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates); - // Called when a `SharedStorageWorkletHost` is created for `rfh`. void OnSharedStorageWorkletHostCreated(content::RenderFrameHost* rfh); @@ -388,12 +382,6 @@ // navigation, stop button, etc.). std::vector<std::unique_ptr<PageLoadTracker>> aborted_provisional_loads_; - // Memory updates that are accumulated while there is no PageLoadTracker - // associated with RenderFrameHost. Will be sent in - // HandleCommittedNavigationForTrackedLoad, unless the RenderFrameHost is - // deleted and/or web contents is destroyed. - std::vector<MemoryUpdate> queued_memory_updates_; - // This stores the PageLoadTracker for the primary page. GetPageLoadTracker() // is available to find a PageLoadTracker for non-primary pages. std::unique_ptr<PageLoadTracker> primary_page_;
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc index ead851b..e19e550 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
@@ -1310,11 +1310,6 @@ return CONTINUE_OBSERVING; } - void OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) override { - owner_->OnV8MemoryChanged(committed_url_, memory_updates); - } - private: raw_ptr<MetricsWebContentsObserverNonPrimaryPageTest> owner_; GURL committed_url_; @@ -1341,52 +1336,6 @@ override { return std::make_unique<Embedder>(this); } - - void OnV8MemoryChanged(const GURL& url, - const std::vector<MemoryUpdate>& memory_updates) { - std::vector<MemoryUpdate>& updates_for_url = observed_memory_updates_[url]; - updates_for_url.insert(updates_for_url.end(), memory_updates.begin(), - memory_updates.end()); - } - - protected: - std::map<GURL, std::vector<MemoryUpdate>> observed_memory_updates_; }; -TEST_F(MetricsWebContentsObserverNonPrimaryPageTest, MemoryUpdates) { - // Go to the URL1. - content::NavigationSimulator::NavigateAndCommitFromBrowser( - web_contents(), GURL(kDefaultTestUrl)); - ASSERT_EQ(main_rfh()->GetLastCommittedURL().spec(), GURL(kDefaultTestUrl)); - content::GlobalRenderFrameHostId rfh1_id = main_rfh()->GetGlobalId(); - - ASSERT_EQ(0, CountCompleteTimingReported()); - EXPECT_EQ(0, CountOnBackForwardCacheEntered()); - EXPECT_EQ(1, tracker_committed_count()); - - // Go to the URL2. - content::NavigationSimulator::NavigateAndCommitFromBrowser( - web_contents(), GURL(kDefaultTestUrl2)); - ASSERT_EQ(main_rfh()->GetLastCommittedURL().spec(), GURL(kDefaultTestUrl2)); - content::GlobalRenderFrameHostId rfh2_id = main_rfh()->GetGlobalId(); - - ASSERT_EQ(1, CountCompleteTimingReported()); - EXPECT_EQ(1, CountOnBackForwardCacheEntered()); - EXPECT_EQ(2, tracker_committed_count()); - - std::vector<MemoryUpdate> memory_updates = {{rfh1_id, base::ByteCount(100)}, - {rfh2_id, base::ByteCount(200)}}; - observer()->OnV8MemoryChanged(memory_updates); - - // Verify that memory updates are observed both in primary URL2 and - // non-primary URL1. - ASSERT_EQ(2u, observed_memory_updates_.size()); - ASSERT_EQ(1u, observed_memory_updates_[GURL(kDefaultTestUrl)].size()); - EXPECT_EQ(base::ByteCount(100), - observed_memory_updates_[GURL(kDefaultTestUrl)][0].delta_bytes); - ASSERT_EQ(1u, observed_memory_updates_[GURL(kDefaultTestUrl2)].size()); - EXPECT_EQ(base::ByteCount(200), - observed_memory_updates_[GURL(kDefaultTestUrl2)][0].delta_bytes); -} - } // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc index 86a0a0ce2..f232db65 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc
@@ -30,7 +30,6 @@ #include "components/history/core/browser/history_types.h" #include "components/page_load_metrics/browser/features.h" #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" #include "components/page_load_metrics/browser/page_load_metrics_util.h" #include "components/page_load_metrics/browser/resource_tracker.h" #include "components/page_load_metrics/common/page_end_reason.h" @@ -801,34 +800,6 @@ ad_frames_data_.erase(id_and_data); } -void AdsPageLoadMetricsObserver::OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) { - for (const auto& update : memory_updates) { - memory_update_count_++; - - content::RenderFrameHost* render_frame_host = - content::RenderFrameHost::FromID(update.routing_id); - - if (!render_frame_host) { - continue; - } - - content::FrameTreeNodeId frame_node_id = - render_frame_host->GetFrameTreeNodeId(); - FrameTreeData* ad_frame_data = FindFrameData(frame_node_id); - - if (ad_frame_data) { - ad_frame_data->UpdateMemoryUsage(update.delta_bytes); - UpdateAggregateMemoryUsage(update.delta_bytes, - ad_frame_data->visibility()); - } else if (!render_frame_host->GetParentOrOuterDocument()) { - // |render_frame_host| is the outermost main frame. - aggregate_frame_data_->update_outermost_main_frame_memory( - update.delta_bytes); - } - } -} - void AdsPageLoadMetricsObserver::OnAdAuctionComplete( bool is_server_auction, bool is_on_device_auction, @@ -1187,14 +1158,6 @@ outermost_main_frame_resource_data.ad_network_bytes()); ADS_HISTOGRAM("Bytes.MainFrame.Ads.Total2", PAGE_BYTES_HISTOGRAM, visibility, outermost_main_frame_resource_data.ad_bytes()); - if (base::FeatureList::IsEnabled( - page_load_metrics::features::kV8PerFrameMemoryMonitoring)) { - PAGE_BYTES_HISTOGRAM( - "PageLoad.Clients.Ads.Memory.MainFrame.Max", - aggregate_frame_data_->outermost_main_frame_max_memory()); - base::UmaHistogramCounts10000("PageLoad.Clients.Ads.Memory.UpdateCount", - memory_update_count_); - } } void AdsPageLoadMetricsObserver::RecordPerFrameMetrics( @@ -1573,20 +1536,6 @@ return heavy_ad_service_->heavy_ad_blocklist(); } -void AdsPageLoadMetricsObserver::UpdateAggregateMemoryUsage( - base::ByteCount delta_bytes, - FrameVisibility frame_visibility) { - // For both the given |frame_visibility| and kAnyVisibility, update the - // current aggregate memory usage by adding the needed delta, and then - // if the current aggregate usage is greater than the recorded - // max aggregate usage, update the max aggregate usage. - for (const auto visibility : - {FrameVisibility::kAnyVisibility, frame_visibility}) { - aggregate_frame_data_->update_ad_memory_by_visibility(visibility, - delta_bytes); - } -} - void AdsPageLoadMetricsObserver::CleanupDeletedFrame( content::FrameTreeNodeId id, FrameTreeData* frame_data,
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h index 3a9ae17..7e0d21c 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h
@@ -148,8 +148,6 @@ void OnMainFrameAdRectsChanged( const base::flat_map<int, gfx::Rect>& main_frame_ad_rects) override; void OnSubFrameDeleted(content::FrameTreeNodeId frame_tree_node_id) override; - void OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) override; void OnAdAuctionComplete(bool is_server_auction, bool is_on_device_auction, content::AuctionResult result) override; @@ -159,9 +157,6 @@ heavy_ad_threshold_noise_provider_ = std::move(noise_provider); } - void UpdateAggregateMemoryUsage(base::ByteCount bytes, - FrameVisibility visibility); - void CleanupDeletedFrame(content::FrameTreeNodeId id, FrameTreeData* frame_data, bool update_density_tracker,
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc index 060b6f4..f5dd369 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
@@ -35,7 +35,6 @@ #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" #include "components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h" #include "components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" #include "components/page_load_metrics/browser/page_load_metrics_observer.h" #include "components/page_load_metrics/browser/page_load_tracker.h" #include "components/page_load_metrics/common/page_load_metrics_util.h" @@ -125,10 +124,7 @@ constexpr char kNonAdUrl[] = "https://foo.com/"; constexpr char kNonAdUrlSameOrigin[] = "https://ads.com/foo"; constexpr char kAllowedUrl[] = "https://foo.com/ad/not_disallowed.html"; -constexpr char kMemoryMainFrameMaxHistogramId[] = - "PageLoad.Clients.Ads.Memory.MainFrame.Max"; -constexpr char kMemoryUpdateCountHistogramId[] = - "PageLoad.Clients.Ads.Memory.UpdateCount"; + constexpr char kAdClickHistoryQueryCountHistogramId[] = "PageLoad.Clients.Ads.AdClick.HistoryQueryCount2"; constexpr char kAdClickEtldPlusOneHistoryQueryCountHistogramId[] = @@ -871,11 +867,6 @@ "Activated.PostActivation"); } - void SimulateV8MemoryChange(content::RenderFrameHost* render_frame_host, - base::ByteCount delta_bytes) { - tester()->SimulateMemoryUpdate(render_frame_host, delta_bytes); - } - protected: virtual void SetUpScopedFeatureList() { scoped_feature_list_.InitWithFeaturesAndParameters( @@ -3628,138 +3619,6 @@ ukm::builders::AdFrameLoad::kTiming_FirstContentfulPaintName, 90); } -class AdsMemoryMeasurementTest : public AdsPageLoadMetricsObserverTest { - private: - void SetUpScopedFeatureList() override { - scoped_feature_list_.InitWithFeaturesAndParameters( - { - {blink::features::kFencedFrames, - {{"implementation_type", "mparch"}}}, - {page_load_metrics::features::kV8PerFrameMemoryMonitoring, {}}, - }, - {}); - } -}; - -INSTANTIATE_TEST_SUITE_P(All, AdsMemoryMeasurementTest, testing::Bool()); - -TEST_P(AdsMemoryMeasurementTest, SingleAdFrame_MaxMemoryBytesRecorded) { - RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); - RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); - - // Load kilobytes in frame so that aggregates are recorded. - ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, base::KiB(10)); - - // Notify that memory measurement is available. - SimulateV8MemoryChange(ad_frame, base::KiB(10)); - - // Update memory usage. The max will change, as 30 is positive. - SimulateV8MemoryChange(ad_frame, base::KiB(30)); - - // Update memory usage. The max will remain the same, as -20 is negative. - SimulateV8MemoryChange(ad_frame, base::KiB(-20)); - - // Navigate main frame to record histograms. - NavigateMainFrame(kNonAdUrl); - - histogram_tester().ExpectUniqueSample(kMemoryUpdateCountHistogramId, 3, 1); -} - -TEST_P(AdsMemoryMeasurementTest, MultiAdFramesNested_MaxMemoryBytesRecorded) { - RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); - RenderFrameHost* ad_frame1 = CreateAndNavigateSubFrame(kAdUrl, main_frame); - - // Create a nested subframe with the same origin as its parent. - RenderFrameHost* ad_frame2 = CreateAndNavigateSubFrame(kAdUrl, ad_frame1); - - // Load kilobytes in each frame so that aggregates are recorded. - ResourceDataUpdate(ad_frame1, ResourceCached::kNotCached, base::KiB(10)); - ResourceDataUpdate(ad_frame2, ResourceCached::kNotCached, base::KiB(10)); - - // Notify that memory measurement is available. - SimulateV8MemoryChange(ad_frame1, base::KiB(10)); - SimulateV8MemoryChange(ad_frame2, base::KiB(10)); - - // Update memory usage. The max will change, as these values are both - // positive. - SimulateV8MemoryChange(ad_frame1, base::KiB(30)); - SimulateV8MemoryChange(ad_frame2, base::KiB(10)); - - // Update memory usage. The max will remain the same, as these values - // are both negative. - SimulateV8MemoryChange(ad_frame1, base::KiB(-25)); - SimulateV8MemoryChange(ad_frame2, base::KiB(-5)); - - // Navigate main frame to record histograms. - NavigateMainFrame(kNonAdUrl); - - histogram_tester().ExpectUniqueSample(kMemoryUpdateCountHistogramId, 6, 1); -} - -TEST_P(AdsMemoryMeasurementTest, - MultiAdFramesNonNested_MaxMemoryBytesRecorded) { - RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); - RenderFrameHost* ad_frame1 = CreateAndNavigateSubFrame(kAdUrl, main_frame); - - // Create another ad subframe with a different origin. - RenderFrameHost* ad_frame2 = - CreateAndNavigateSubFrame(kOtherAdUrl, main_frame); - - // Load kilobytes in each frame so that aggregates are recorded. - ResourceDataUpdate(ad_frame1, ResourceCached::kNotCached, base::KiB(10)); - ResourceDataUpdate(ad_frame2, ResourceCached::kNotCached, base::KiB(10)); - - // Notify that memory measurement is available. - SimulateV8MemoryChange(ad_frame1, base::KiB(10)); - SimulateV8MemoryChange(ad_frame2, base::KiB(10)); - - // Update memory usage. The second max and aggregate max - // will change. - SimulateV8MemoryChange(ad_frame1, base::KiB(-9)); - SimulateV8MemoryChange(ad_frame2, base::KiB(100)); - - // Update memory usage. The aggregate max will change - // again after the first update. - SimulateV8MemoryChange(ad_frame1, base::KiB(1)); - SimulateV8MemoryChange(ad_frame2, base::KiB(-90)); - - // Update memory usage. The first max will change. - SimulateV8MemoryChange(ad_frame1, base::KiB(50)); - SimulateV8MemoryChange(ad_frame2, base::KiB(-5)); - - // Navigate main frame to record histograms. - NavigateMainFrame(kNonAdUrl); - - histogram_tester().ExpectUniqueSample(kMemoryUpdateCountHistogramId, 8, 1); -} - -TEST_P(AdsMemoryMeasurementTest, MainFrame_MaxMemoryBytesRecorded) { - RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); - RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); - - // Load kilobytes in each frame. |ad_frame| must exist for ad metrics to be - // tracked. - ResourceDataUpdate(main_frame, ResourceCached::kNotCached, base::KiB(1000)); - ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, base::KiB(10)); - - // Notify that memory measurement is available. - SimulateV8MemoryChange(main_frame, base::KiB(1000)); - - // Update memory usage. The max will also change, as this value is - // positive. - SimulateV8MemoryChange(main_frame, base::KiB(1000)); - - // Update memory usage. The max will remain the same, as this value is - // negative. - SimulateV8MemoryChange(main_frame, base::KiB(-1980)); - - // Navigate to record histograms. - NavigateFrame(kNonAdUrl, main_frame); - - histogram_tester().ExpectUniqueSample(kMemoryMainFrameMaxHistogramId, 2000, - 1); - histogram_tester().ExpectUniqueSample(kMemoryUpdateCountHistogramId, 3, 1); -} class AdsPageLoadMetricsObserverAdUrlInHistoryTest : public testing::Test { public:
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/aggregate_frame_data.h b/components/page_load_metrics/browser/observers/ad_metrics/aggregate_frame_data.h index b38c78b..001c5eb 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/aggregate_frame_data.h +++ b/components/page_load_metrics/browser/observers/ad_metrics/aggregate_frame_data.h
@@ -81,8 +81,6 @@ base::ByteCount bytes; base::ByteCount network_bytes; size_t frames = 0; - // MemoryUsage is aggregated when a memory update is received. - MemoryUsageAggregator memory; }; // Returns the appropriate AdDataByVisibility given the |visibility|. @@ -105,24 +103,10 @@ size_t frames) { ad_data_[static_cast<size_t>(visibility)].frames += frames; } - void update_ad_memory_by_visibility(FrameVisibility visibility, - base::ByteCount delta_bytes) { - ad_data_[static_cast<size_t>(visibility)].memory.UpdateUsage(delta_bytes); - } - - // Updates the memory for the main frame of the page. - void update_outermost_main_frame_memory(base::ByteCount delta_memory) { - outermost_main_frame_memory_.UpdateUsage(delta_memory); - } // Updates the total ad cpu usage for the page. void update_ad_cpu_usage(base::TimeDelta usage) { ad_cpu_usage_ += usage; } - // Get the total memory usage for this page. - base::ByteCount outermost_main_frame_max_memory() const { - return outermost_main_frame_memory_.max_bytes_used(); - } - // Get the total cpu usage of this page. base::TimeDelta total_cpu_usage() const { return cpu_usage_; } base::TimeDelta total_ad_cpu_usage() const { return ad_cpu_usage_; } @@ -143,9 +127,6 @@ base::TimeDelta cpu_usage_; base::TimeDelta ad_cpu_usage_; - // The memory used by the outermost main frame. - MemoryUsageAggregator outermost_main_frame_memory_; - // The resource data for this page. ResourceLoadAggregator resource_data_; ResourceLoadAggregator outermost_main_frame_resource_data_;
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.cc b/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.cc index d5ff591..424957736 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.cc
@@ -93,10 +93,4 @@ peak_windowed_percent_ = current_windowed_percent; } -void MemoryUsageAggregator::UpdateUsage(base::ByteCount delta_bytes) { - current_bytes_used_ += delta_bytes; - if (current_bytes_used_ > max_bytes_used_) - max_bytes_used_ = current_bytes_used_; -} - } // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.h b/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.h index 964928aa..2eb4ae3 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.h +++ b/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.h
@@ -128,23 +128,6 @@ int peak_windowed_percent_ = 0; }; -class MemoryUsageAggregator { - public: - void UpdateUsage(base::ByteCount delta_bytes); - - base::ByteCount max_bytes_used() const { return max_bytes_used_; } - - private: - // Maximum concurrent memory usage by V8 in this ad frame tree. - // Tracks max value of |v8_current_memory_bytes_used_| for this frame tree. - base::ByteCount max_bytes_used_; - - // Current concurrent memory usage by V8 in this ad frame tree. - // Computation is best-effort, as it relies on individual asynchronous - // per-frame measurements, some of which may be stale. - base::ByteCount current_bytes_used_; -}; - } // namespace page_load_metrics #endif // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_AD_METRICS_FRAME_DATA_UTILS_H_
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc b/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc index 5be96c45..53df5fbc 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc
@@ -64,13 +64,8 @@ frame_depth_ = GetFullFrameDepth(render_frame_host) - root_frame_depth_; } -void FrameTreeData::UpdateMemoryUsage(base::ByteCount delta_bytes) { - memory_usage_.UpdateUsage(delta_bytes); -} - bool FrameTreeData::ShouldRecordFrameForMetrics() const { - return !resource_data().bytes().is_zero() || !GetTotalCpuUsage().is_zero() || - memory_usage_.max_bytes_used().is_positive(); + return !resource_data().bytes().is_zero() || !GetTotalCpuUsage().is_zero(); } void FrameTreeData::RecordAdFrameLoadUkmEvent(ukm::SourceId source_id) const {
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h b/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h index 1c919a3d..a225f2f4 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h +++ b/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h
@@ -162,9 +162,6 @@ // frame. void MaybeUpdateFrameDepth(content::RenderFrameHost* render_frame_host); - // Updates the recorded bytes of memory used. - void UpdateMemoryUsage(base::ByteCount delta_bytes); - // Returns whether the frame should be recorded for UKMs and UMA histograms. // A frame should be recorded if it has non-zero bytes or non-zero CPU usage // (or both). @@ -363,9 +360,6 @@ // The peak cpu usage for this frame tree. PeakCpuAggregator peak_cpu_; - // Memory usage by v8 in this ad frame tree. - MemoryUsageAggregator memory_usage_; - // Owns weak pointers to the instance. base::WeakPtrFactory<FrameTreeData> weak_ptr_factory_{this}; };
diff --git a/components/page_load_metrics/browser/observers/assert_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/assert_page_load_metrics_observer.h index cce6d530..11bd5a5a 100644 --- a/components/page_load_metrics/browser/observers/assert_page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/observers/assert_page_load_metrics_observer.h
@@ -222,8 +222,6 @@ bool blocked_by_policy, page_load_metrics::StorageType access_type) override {} void OnPrefetchLikely() override {} - void OnV8MemoryChanged(const std::vector<page_load_metrics::MemoryUpdate>& - memory_updates) override {} void OnSharedStorageWorkletHostCreated() override {} void OnSharedStorageSelectURLCalled() override {} void OnCustomUserTimingMarkObserved(
diff --git a/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.cc index b58def9b..bceee72 100644 --- a/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.cc +++ b/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.cc
@@ -32,11 +32,11 @@ "PageLoad.PaintTiming.NavigationToFirstPaint.BFCachePolyfillThird"; const char kHistogramFirstInputDelayAfterBackForwardCacheRestore[] = "PageLoad.InteractiveTiming.FirstInputDelay.AfterBackForwardCacheRestore"; -extern const char +const char kHistogramCumulativeShiftScoreMainFrameAfterBackForwardCacheRestore[] = "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame." "AfterBackForwardCacheRestore"; -extern const char kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore[] = +const char kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore[] = "PageLoad.LayoutInstability.CumulativeShiftScore." "AfterBackForwardCacheRestore"; @@ -427,9 +427,6 @@ page_load_metrics::features:: kBackForwardCacheEmitZeroSamplesForKeyMetrics)) { base::UmaHistogramCounts100( - "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame", - page_load_metrics::LayoutShiftUmaValue(layout_main_frame_shift_score)); - base::UmaHistogramCounts100( "PageLoad.LayoutInstability.CumulativeShiftScore", page_load_metrics::LayoutShiftUmaValue(layout_shift_score)); }
diff --git a/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.h index 56b7f397..839ae73 100644 --- a/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.h
@@ -43,9 +43,6 @@ kHistogramThirdRequestAnimationFrameAfterBackForwardCacheRestore[]; extern const char kHistogramFirstInputDelayAfterBackForwardCacheRestore[]; extern const char kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore[]; -extern const char - kHistogramCumulativeShiftScoreMainFrameAfterBackForwardCacheRestore[]; -extern const char kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore[]; } // namespace internal
diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc index e78e434..aa2325b 100644 --- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc +++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc
@@ -12,7 +12,6 @@ #include <string_view> #include <utility> -#include "base/byte_count.h" #include "base/feature_list.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" @@ -24,7 +23,6 @@ #include "components/metrics/metrics_data_validation.h" #include "components/page_load_metrics/browser/features.h" #include "components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" #include "components/page_load_metrics/browser/page_load_metrics_util.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/preloading_data.h" @@ -159,14 +157,6 @@ "PageLoad.ParseTiming.NavigationToParseStart"; const char kBackgroundHistogramParseStart[] = "PageLoad.ParseTiming.NavigationToParseStart.Background"; -const char kHistogramParseBlockedOnScriptLoad[] = - "PageLoad.ParseTiming.ParseBlockedOnScriptLoad"; -const char kBackgroundHistogramParseBlockedOnScriptLoad[] = - "PageLoad.ParseTiming.ParseBlockedOnScriptLoad.Background"; -const char kHistogramParseBlockedOnScriptExecution[] = - "PageLoad.ParseTiming.ParseBlockedOnScriptExecution"; -const char kHistogramParseBlockedOnScriptExecutionDocumentWrite[] = - "PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"; const char kHistogramFirstContentfulPaintNoStore[] = "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.NoStore"; @@ -215,10 +205,6 @@ const char kHistogramFirstForeground[] = "PageLoad.PageTiming.NavigationToFirstForeground"; -const char kHistogramUserGestureNavigationToForwardBack[] = - "PageLoad.PageTiming.ForegroundDuration.PageEndReason." - "ForwardBackNavigation.UserGesture"; - const char kHistogramForegroundToFirstContentfulPaint[] = "PageLoad.PaintTiming.ForegroundToFirstContentfulPaint"; @@ -233,11 +219,6 @@ "PageLoad.Experimental.PageTiming.NavigationToFirstSubresourceLoadStart"; const char kHistogramResourceLoadTimePrefix[] = "PageLoad.Experimental.PageTiming.ResourceLoadTime."; -const char kHistogramTotalSubresourceLoadTimeAtFirstContentfulPaint[] = - "PageLoad.Experimental.PageTiming." - "TotalSubresourceLoadTimeAtFirstContentfulPaint"; -const char kHistogramFirstEligibleToPaintToFirstPaint[] = - "PageLoad.Experimental.PaintTiming.FirstEligibleToPaintToFirstPaint"; const char kHistogramPageLoadCpuTotalUsage[] = "PageLoad.Cpu.TotalUsage"; const char kHistogramPageLoadCpuTotalUsageForegrounded[] = @@ -245,8 +226,6 @@ const char kHistogramInputToNavigation[] = "PageLoad.Experimental.InputTiming.InputToNavigationStart"; -const char kBackgroundHistogramInputToNavigation[] = - "PageLoad.Experimental.InputTiming.InputToNavigationStart.Background"; const char kHistogramInputToNavigationLinkClick[] = "PageLoad.Experimental.InputTiming.InputToNavigationStart.FromLinkClick"; const char kHistogramInputToNavigationOmnibox[] = @@ -266,8 +245,6 @@ const char kHistogramNavigationTimingNavigationStartToFirstLoaderCallback[] = "PageLoad.Experimental.NavigationTiming." "NavigationStartToFirstLoaderCallback"; -const char kHistogramNavigationTimingNavigationStartToFinalRequestStart[] = - "PageLoad.Experimental.NavigationTiming.NavigationStartToFinalRequestStart"; const char kHistogramNavigationTimingNavigationStartToFinalResponseStart[] = "PageLoad.Experimental.NavigationTiming." "NavigationStartToFinalResponseStart"; @@ -296,14 +273,6 @@ "PageLoad.Experimental.NavigationTiming." "FinalLoaderCallbackToNavigationCommitSent"; -// V8 memory usage metrics. -const char kHistogramMemoryMainframe[] = - "PageLoad.Experimental.Memory.Core.MainFrame.Max"; -const char kHistogramMemorySubframeAggregate[] = - "PageLoad.Experimental.Memory.Core.Subframe.Aggregate.Max"; -const char kHistogramMemoryTotal[] = - "PageLoad.Experimental.Memory.Core.Total.Max"; - } // namespace internal UmaPageLoadMetricsObserver::UmaPageLoadMetricsObserver() @@ -330,8 +299,7 @@ UmaPageLoadMetricsObserver::OnFencedFramesStart( content::NavigationHandle* navigation_handle, const GURL& currently_committed_url) { - // This class needs forwarding for the events OnLoadedResource and - // OnV8MemoryChanged. + // This class needs forwarding for OnLoadedResource. return FORWARD_OBSERVING; } @@ -406,12 +374,6 @@ timing.paint_timing->first_paint, GetDelegate())) { PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstPaint, timing.paint_timing->first_paint.value()); - if (timing.paint_timing->first_eligible_to_paint) { - PAGE_LOAD_HISTOGRAM( - internal::kHistogramFirstEligibleToPaintToFirstPaint, - timing.paint_timing->first_paint.value() - - timing.paint_timing->first_eligible_to_paint.value()); - } } else { PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstPaint, timing.paint_timing->first_paint.value()); @@ -448,10 +410,6 @@ timing.paint_timing->first_contentful_paint.value()); } - PAGE_LOAD_HISTOGRAM( - internal::kHistogramTotalSubresourceLoadTimeAtFirstContentfulPaint, - total_subresource_load_time_); - // Emit a trace event to highlight a long navigation to first contentful // paint. if (timing.paint_timing->first_contentful_paint.value() > @@ -564,10 +522,6 @@ internal::kBackgroundHistogramParseStartToFirstContentfulPaint, timing.paint_timing->first_contentful_paint.value() - timing.parse_timing->parse_start.value()); - if (timing.input_to_navigation_start) { - PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramInputToNavigation, - timing.input_to_navigation_start.value()); - } PAGE_LOAD_HISTOGRAM( internal:: @@ -643,29 +597,6 @@ } } -void UmaPageLoadMetricsObserver::OnParseStop( - const page_load_metrics::mojom::PageLoadTiming& timing) { - if (page_load_metrics::WasStartedInForegroundOptionalEventInForeground( - timing.parse_timing->parse_stop, GetDelegate())) { - PAGE_LOAD_HISTOGRAM( - internal::kHistogramParseBlockedOnScriptLoad, - timing.parse_timing->parse_blocked_on_script_load_duration.value()); - PAGE_LOAD_HISTOGRAM( - internal::kHistogramParseBlockedOnScriptExecution, - timing.parse_timing->parse_blocked_on_script_execution_duration - .value()); - PAGE_LOAD_HISTOGRAM( - internal::kHistogramParseBlockedOnScriptExecutionDocumentWrite, - timing.parse_timing - ->parse_blocked_on_script_execution_from_document_write_duration - .value()); - } else { - PAGE_LOAD_HISTOGRAM( - internal::kBackgroundHistogramParseBlockedOnScriptLoad, - timing.parse_timing->parse_blocked_on_script_load_duration.value()); - } -} - void UmaPageLoadMetricsObserver::OnComplete( const page_load_metrics::mojom::PageLoadTiming& timing) { RecordNavigationTimingHistograms(); @@ -673,7 +604,6 @@ RecordByteAndResourceHistograms(timing); RecordCpuUsageHistograms(); RecordForegroundDurationHistograms(timing, base::TimeTicks()); - RecordV8MemoryHistograms(); } page_load_metrics::PageLoadMetricsObserver::ObservePolicy @@ -688,7 +618,6 @@ RecordTimingHistograms(timing); RecordByteAndResourceHistograms(timing); RecordCpuUsageHistograms(); - RecordV8MemoryHistograms(); } RecordForegroundDurationHistograms(timing, base::TimeTicks::Now()); return STOP_OBSERVING; @@ -843,9 +772,6 @@ timing.first_loader_callback_time - navigation_start_time); PAGE_LOAD_HISTOGRAM( - internal::kHistogramNavigationTimingNavigationStartToFinalRequestStart, - timing.final_request_start_time - navigation_start_time); - PAGE_LOAD_HISTOGRAM( internal::kHistogramNavigationTimingNavigationStartToFinalResponseStart, timing.final_response_start_time - navigation_start_time); PAGE_LOAD_HISTOGRAM( @@ -1036,14 +962,6 @@ internal::kHistogramPageTimingForegroundDurationNoCommit, foreground_duration.value()); } - - if (GetDelegate().GetPageEndReason() == page_load_metrics::END_FORWARD_BACK && - GetDelegate().GetUserInitiatedInfo().user_gesture && - !GetDelegate().GetUserInitiatedInfo().browser_initiated && - GetDelegate().GetTimeToPageEnd() <= foreground_duration) { - PAGE_LOAD_HISTOGRAM(internal::kHistogramUserGestureNavigationToForwardBack, - GetDelegate().GetTimeToPageEnd().value()); - } } void UmaPageLoadMetricsObserver::OnCpuTimingUpdate( @@ -1091,50 +1009,6 @@ internal::PageLoadBackForwardCacheEvent::kRestoreFromBackForwardCache); } -void UmaPageLoadMetricsObserver::OnV8MemoryChanged( - const std::vector<page_load_metrics::MemoryUpdate>& memory_updates) { - DCHECK(base::FeatureList::IsEnabled( - page_load_metrics::features::kV8PerFrameMemoryMonitoring)); - - for (const auto& update : memory_updates) { - memory_update_received_ = true; - - content::RenderFrameHost* render_frame_host = - content::RenderFrameHost::FromID(update.routing_id); - - if (!render_frame_host) { - continue; - } - - if (!render_frame_host->GetParentOrOuterDocument()) { - // |render_frame_host| is the outermost main frame. - main_frame_memory_usage_.UpdateUsage(update.delta_bytes); - } else { - aggregate_subframe_memory_usage_.UpdateUsage(update.delta_bytes); - } - - aggregate_total_memory_usage_.UpdateUsage(update.delta_bytes); - } -} - -void UmaPageLoadMetricsObserver::RecordV8MemoryHistograms() { - if (base::FeatureList::IsEnabled( - page_load_metrics::features::kV8PerFrameMemoryMonitoring)) { - PAGE_BYTES_HISTOGRAM(internal::kHistogramMemoryMainframe, - main_frame_memory_usage_.max_bytes_used()); - PAGE_BYTES_HISTOGRAM(internal::kHistogramMemorySubframeAggregate, - aggregate_subframe_memory_usage_.max_bytes_used()); - PAGE_BYTES_HISTOGRAM(internal::kHistogramMemoryTotal, - aggregate_total_memory_usage_.max_bytes_used()); - } -} - -void UmaPageLoadMetricsObserver::MemoryUsage::UpdateUsage( - base::ByteCount delta_bytes) { - current_bytes_used_ += delta_bytes; - max_bytes_used_ = std::max(max_bytes_used_, current_bytes_used_); -} - // Perfetto trace events for page load events need to be in sync with UMA // histogram data for metric accuracy; they are recorded together accordingly. // Navigation ID is used to join all related trace events.
diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h index 9e493b43..2ebdc689 100644 --- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h
@@ -27,6 +27,7 @@ []; extern const char kHistogramUserInteractionLatencyHighPercentile2MaxEventDuration[]; + extern const char kHistogramSumOfUserInteractionLatencyOverBudgetMaxEventDuration[]; extern const char kHistogramWorstUserInteractionLatencyMaxEventDuration[]; @@ -47,8 +48,6 @@ extern const char kHistogramLargestContentfulPaintCrossSiteSubFrame[]; extern const char kHistogramLargestContentfulPaintSetSpeculationRulesPrerender[]; -extern const char kHistogramParseBlockedOnScriptLoad[]; -extern const char kHistogramParseBlockedOnScriptExecution[]; extern const char kBackgroundHistogramFirstContentfulPaint[]; extern const char kBackgroundHistogramFirstImagePaint[]; @@ -67,8 +66,6 @@ extern const char kHistogramLoadTypeParseStartForwardBack[]; extern const char kHistogramLoadTypeParseStartNewNavigation[]; -extern const char kHistogramUserGestureNavigationToForwardBack[]; - extern const char kHistogramPageTimingForegroundDuration[]; extern const char kHistogramPageTimingForegroundDurationNoCommit[]; @@ -76,14 +73,11 @@ extern const char kHistogramCommitSentToFirstSubresourceLoadStart[]; extern const char kHistogramNavigationToFirstSubresourceLoadStart[]; extern const char kHistogramResourceLoadTimePrefix[]; -extern const char kHistogramTotalSubresourceLoadTimeAtFirstContentfulPaint[]; -extern const char kHistogramFirstEligibleToPaintToFirstPaint[]; extern const char kHistogramPageLoadCpuTotalUsage[]; extern const char kHistogramPageLoadCpuTotalUsageForegrounded[]; extern const char kHistogramInputToNavigation[]; -extern const char kBackgroundHistogramInputToNavigation[]; extern const char kHistogramInputToNavigationLinkClick[]; extern const char kHistogramInputToNavigationOmnibox[]; extern const char kHistogramInputToFirstContentfulPaint[]; @@ -97,8 +91,6 @@ extern const char kHistogramNavigationTimingNavigationStartToFirstLoaderCallback[]; extern const char - kHistogramNavigationTimingNavigationStartToFinalRequestStart[]; -extern const char kHistogramNavigationTimingNavigationStartToFinalResponseStart[]; extern const char kHistogramNavigationTimingNavigationStartToFinalLoaderCallback[]; @@ -117,11 +109,6 @@ extern const char kHistogramNavigationTimingFinalLoaderCallbackToNavigationCommitSent[]; -// V8 memory usage metrics. -extern const char kHistogramMemoryMainframe[]; -extern const char kHistogramMemorySubframeAggregate[]; -extern const char kHistogramMemoryTotal[]; - // Please keep in sync with PageLoadBackForwardCacheEvent in // tools/metrics/histograms/enums.xml. These values should not be renumbered. enum class PageLoadBackForwardCacheEvent { @@ -173,8 +160,6 @@ const page_load_metrics::mojom::PageLoadTiming& timing) override; void OnParseStart( const page_load_metrics::mojom::PageLoadTiming& timing) override; - void OnParseStop( - const page_load_metrics::mojom::PageLoadTiming& timing) override; void OnComplete( const page_load_metrics::mojom::PageLoadTiming& timing) override; void OnFailedProvisionalLoad( @@ -199,23 +184,8 @@ void OnRestoreFromBackForwardCache( const page_load_metrics::mojom::PageLoadTiming& timing, content::NavigationHandle* navigation_handle) override; - void OnV8MemoryChanged(const std::vector<page_load_metrics::MemoryUpdate>& - memory_updates) override; private: - // Class to keep track of per-frame memory usage by V8. - class MemoryUsage { - public: - void UpdateUsage(base::ByteCount delta_bytes); - - base::ByteCount current_bytes_used() { return current_bytes_used_; } - base::ByteCount max_bytes_used() { return max_bytes_used_; } - - private: - base::ByteCount current_bytes_used_; - base::ByteCount max_bytes_used_; - }; - void RecordNavigationTimingHistograms(); void RecordTimingHistograms( const page_load_metrics::mojom::PageLoadTiming& main_frame_timing); @@ -225,7 +195,6 @@ void RecordForegroundDurationHistograms( const page_load_metrics::mojom::PageLoadTiming& timing, base::TimeTicks app_background_time); - void RecordV8MemoryHistograms(); void RecordNormalizedResponsivenessMetrics(); void EmitFCPTraceEvent(base::TimeDelta first_contentful_paint_timing); @@ -257,15 +226,6 @@ // Tracks user input clicks for possible click burst. page_load_metrics::ClickInputTracker click_tracker_; - // V8 Memory Usage: whether a memory update was received, the usage of the - // mainframe, the aggregate usage of all subframes on the page, and the - // aggregate usage of all frames on the page (including the main frame), - // respectively. - bool memory_update_received_ = false; - MemoryUsage main_frame_memory_usage_; - MemoryUsage aggregate_subframe_memory_usage_; - MemoryUsage aggregate_total_memory_usage_; - bool received_first_subresource_load_ = false; base::TimeDelta total_subresource_load_time_; };
diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc index 14e6ba06..479154f 100644 --- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc +++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc
@@ -10,14 +10,12 @@ #include "base/strings/string_number_conversions.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/power_monitor_test.h" -#include "base/test/scoped_feature_list.h" #include "base/test/test_trace_processor.h" #include "base/time/time.h" #include "components/page_load_metrics/browser/features.h" #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" #include "components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h" #include "components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" #include "components/page_load_metrics/browser/page_load_metrics_util.h" #include "components/page_load_metrics/browser/page_load_tracker.h" #include "components/page_load_metrics/common/test/page_load_metrics_test_util.h" @@ -88,8 +86,6 @@ } void SetUp() override { - scoped_feature_list_.InitAndEnableFeature( - page_load_metrics::features::kV8PerFrameMemoryMonitoring); page_load_metrics::PageLoadMetricsObserverContentTestHarness::SetUp(); page_load_metrics::LargestContentfulPaintHandler::SetTestMode(true); WebContentsObserver::Observe(web_contents()); @@ -167,20 +163,12 @@ return tester()->histogram_tester(); } - void SimulateV8MemoryChange(content::RenderFrameHost* render_frame_host, - base::ByteCount delta_bytes) { - tester()->SimulateMemoryUpdate(render_frame_host, delta_bytes); - } - void DidStartNavigation( content::NavigationHandle* navigation_handle) override { last_navigation_id_ = navigation_handle->GetNavigationId(); } int64_t last_navigation_id_ = -1; - - private: - base::test::ScopedFeatureList scoped_feature_list_; }; INSTANTIATE_TEST_SUITE_P(All, UmaPageLoadMetricsObserverTest, testing::Bool()); @@ -239,15 +227,6 @@ tester()->histogram_tester().ExpectTotalCount( internal::kHistogramDomContentLoaded, 0); tester()->histogram_tester().ExpectTotalCount(internal::kHistogramLoad, 0); - tester()->histogram_tester().ExpectBucketCount( - internal::kHistogramParseBlockedOnScriptLoad, - parse_script_load_duration.InMilliseconds(), 1); - tester()->histogram_tester().ExpectBucketCount( - internal::kHistogramParseBlockedOnScriptExecution, - parse_script_exec_duration.InMilliseconds(), 1); - tester()->histogram_tester().ExpectTotalCount( - internal::kHistogramFirstImagePaint, 0); - tester()->histogram_tester().ExpectTotalCount( internal::kHistogramPageTimingForegroundDuration, 1); } @@ -643,9 +622,7 @@ internal::kHistogramNavigationTimingNavigationStartToFirstRequestStart, internal::kHistogramNavigationTimingNavigationStartToFirstResponseStart, internal::kHistogramNavigationTimingNavigationStartToFirstLoaderCallback, - internal::kHistogramNavigationTimingNavigationStartToFinalRequestStart, internal::kHistogramNavigationTimingNavigationStartToFinalResponseStart, - internal::kHistogramNavigationTimingNavigationStartToFinalLoaderCallback, internal:: kHistogramNavigationTimingNavigationStartToNavigationCommitSent}; for (const char* metric : metrics_from_navigation_start) @@ -658,8 +635,6 @@ kHistogramNavigationTimingFirstResponseStartToFirstLoaderCallback, internal::kHistogramNavigationTimingFinalRequestStartToFinalResponseStart, internal:: - kHistogramNavigationTimingFinalResponseStartToFinalLoaderCallback, - internal:: kHistogramNavigationTimingFinalLoaderCallbackToNavigationCommitSent}; for (const char* metric : metrics_between_milestones) tester()->histogram_tester().ExpectTotalCount(metric, 1); @@ -1241,170 +1216,6 @@ internal::kHistogramFirstInputTimestamp, 0); } -TEST_P(UmaPageLoadMetricsObserverTest, NavigationToBackNavigationWithGesture) { - GURL url(kDefaultTestUrl); - - // Navigate once to the page with a user gesture. - auto simulator = - content::NavigationSimulator::CreateRendererInitiated(url, main_rfh()); - simulator->SetHasUserGesture(true); - simulator->Commit(); - - // Now the user presses the back button. - tester()->NavigateWithPageTransitionAndCommit( - url, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORWARD_BACK)); - - tester()->histogram_tester().ExpectTotalCount( - internal::kHistogramUserGestureNavigationToForwardBack, 1); -} - -TEST_P(UmaPageLoadMetricsObserverTest, - BrowserNavigationToBackNavigationWithGesture) { - GURL url(kDefaultTestUrl); - - // Navigate once to the page with a user gesture. - auto simulator = - content::NavigationSimulator::CreateBrowserInitiated(url, web_contents()); - simulator->SetHasUserGesture(true); - simulator->Commit(); - - // Now the user presses the back button. - tester()->NavigateWithPageTransitionAndCommit( - url, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORWARD_BACK)); - - tester()->histogram_tester().ExpectTotalCount( - internal::kHistogramUserGestureNavigationToForwardBack, 0); -} - -TEST_P(UmaPageLoadMetricsObserverTest, - NavigationToBackNavigationWithoutGesture) { - GURL url(kDefaultTestUrl); - - // Navigate once to the page with a user gesture. - auto simulator = - content::NavigationSimulator::CreateRendererInitiated(url, main_rfh()); - simulator->SetHasUserGesture(false); - simulator->Commit(); - - // Now the user presses the back button. - tester()->NavigateWithPageTransitionAndCommit( - url, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORWARD_BACK)); - - tester()->histogram_tester().ExpectTotalCount( - internal::kHistogramUserGestureNavigationToForwardBack, 0); -} - -TEST_P(UmaPageLoadMetricsObserverTest, - AbortedNavigationToBackNavigationWithGesture) { - GURL url(kDefaultTestUrl); - - // Navigate once to the page with a user gesture. - auto simulator = - content::NavigationSimulator::CreateRendererInitiated(url, main_rfh()); - simulator->SetHasUserGesture(true); - simulator->Start(); - - // Now the user presses the back button before the first navigation committed. - tester()->NavigateWithPageTransitionAndCommit( - url, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORWARD_BACK)); - - tester()->histogram_tester().ExpectTotalCount( - internal::kHistogramUserGestureNavigationToForwardBack, 1); -} - -TEST_P(UmaPageLoadMetricsObserverTest, MainFrame_MaxMemoryBytesRecorded) { - // Commit the main frame and a subframe. - NavigateAndCommit(GURL(kDefaultTestUrl)); - - // Notify that memory measurements are available for the main frame. - SimulateV8MemoryChange(main_rfh(), base::KiB(100)); - - // Simulate positive and negative shifts to memory usage and ensure the - // maximum value is properly tracked. - SimulateV8MemoryChange(main_rfh(), base::KiB(50)); - SimulateV8MemoryChange(main_rfh(), base::KiB(-150)); - - // Navigate again to force histogram recording. - NavigateAndCommit(GURL(kDefaultTestUrl2)); - - histogram_tester().ExpectUniqueSample(internal::kHistogramMemoryMainframe, - 150, 1); - histogram_tester().ExpectUniqueSample( - internal::kHistogramMemorySubframeAggregate, 0, 1); - histogram_tester().ExpectUniqueSample(internal::kHistogramMemoryTotal, 150, - 1); -} - -TEST_P(UmaPageLoadMetricsObserverTest, SingleSubFrame_MaxMemoryBytesRecorded) { - // Commit the main frame and a subframe. - NavigateAndCommit(GURL(kDefaultTestUrl)); - - RenderFrameHost* subframe = AppendChildFrameAndNavigateAndCommit( - web_contents()->GetPrimaryMainFrame(), "subframe", - GURL("https://google.com/subframe.html")); - - // Notify that memory measurements are available for each frame. - SimulateV8MemoryChange(main_rfh(), base::KiB(100)); - SimulateV8MemoryChange(subframe, base::KiB(10)); - - // Simulate positive and negative shifts to memory usage and ensure the - // maximum value is properly tracked. - SimulateV8MemoryChange(subframe, base::KiB(30)); - SimulateV8MemoryChange(subframe, base::KiB(-20)); - - // Navigate again to force histogram recording. - NavigateAndCommit(GURL(kDefaultTestUrl2)); - - histogram_tester().ExpectUniqueSample(internal::kHistogramMemoryMainframe, - 100, 1); - histogram_tester().ExpectUniqueSample( - internal::kHistogramMemorySubframeAggregate, 40, 1); - histogram_tester().ExpectUniqueSample(internal::kHistogramMemoryTotal, 140, - 1); -} - -TEST_P(UmaPageLoadMetricsObserverTest, MultiSubFrames_MaxMemoryBytesRecorded) { - // Commit the main frame and a subframe. - NavigateAndCommit(GURL(kDefaultTestUrl)); - - RenderFrameHost* subframe1 = AppendChildFrameAndNavigateAndCommit( - web_contents()->GetPrimaryMainFrame(), "subframe1", - GURL("https://google.com/subframe.html")); - RenderFrameHost* subframe2 = AppendChildFrameAndNavigateAndCommit( - web_contents()->GetPrimaryMainFrame(), "subframe2", - GURL("https://google.com/subframe2.html")); - RenderFrameHost* subframe3 = AppendChildFrameAndNavigateAndCommit( - subframe2, "subframe3", GURL("https://google.com/subframe3.html")); - - // Notify that memory measurements are available for each frame. - SimulateV8MemoryChange(main_rfh(), base::KiB(500)); - SimulateV8MemoryChange(subframe1, base::KiB(10)); - SimulateV8MemoryChange(subframe2, base::KiB(20)); - SimulateV8MemoryChange(subframe3, base::KiB(30)); - - // Simulate positive and negative shifts to memory usage and ensure the - // maximum value is properly tracked. - SimulateV8MemoryChange(main_rfh(), base::KiB(100)); - SimulateV8MemoryChange(subframe1, base::KiB(5)); - SimulateV8MemoryChange(subframe1, base::KiB(-2)); - SimulateV8MemoryChange(subframe2, base::KiB(5)); - SimulateV8MemoryChange(subframe2, base::KiB(-2)); - SimulateV8MemoryChange(main_rfh(), base::KiB(-200)); - SimulateV8MemoryChange(subframe3, base::KiB(5)); - SimulateV8MemoryChange(subframe3, base::KiB(-2)); - - // Navigate again to force histogram recording. - NavigateAndCommit(GURL(kDefaultTestUrl2)); - - histogram_tester().ExpectUniqueSample(internal::kHistogramMemoryMainframe, - 500 + 100, 1); - histogram_tester().ExpectUniqueSample( - internal::kHistogramMemorySubframeAggregate, - 10 + 20 + 30 + 5 - 2 + 5 - 2 + 5, 1); - histogram_tester().ExpectUniqueSample( - internal::kHistogramMemoryTotal, 500 + 10 + 20 + 30 + 100 + 5 - 2 + 5, 1); -} - TEST_P(UmaPageLoadMetricsObserverTest, CrossSiteSubframeLargestContentfulPaint_SubframeLarger) { // Use the page having no subframes to record the passed LCP candidate.
diff --git a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc index 88f7881..4d98630c 100644 --- a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc +++ b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc
@@ -34,8 +34,6 @@ namespace page_load_metrics { -class PageLoadMetricsMemoryTracker; - namespace { class TestPageLoadMetricsEmbedderInterface @@ -82,12 +80,6 @@ bool ShouldObserveScheme(std::string_view scheme) override { return false; } - page_load_metrics::PageLoadMetricsMemoryTracker* - GetMemoryTrackerForBrowserContext( - content::BrowserContext* browser_context) override { - return nullptr; - } - private: raw_ptr<PageLoadMetricsObserverTester> test_; }; @@ -383,15 +375,4 @@ register_callback_.Run(tracker); } -void PageLoadMetricsObserverTester::SimulateMemoryUpdate( - content::RenderFrameHost* render_frame_host, - base::ByteCount delta_bytes) { - DCHECK(render_frame_host); - if (!delta_bytes.is_zero()) { - std::vector<MemoryUpdate> update( - {MemoryUpdate(render_frame_host->GetGlobalId(), delta_bytes)}); - metrics_web_contents_observer_->OnV8MemoryChanged(update); - } -} - } // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h b/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h index 93cae18..70909fc1 100644 --- a/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h +++ b/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h
@@ -15,14 +15,12 @@ } // namespace base namespace content { -class BrowserContext; class NavigationHandle; class WebContents; } // namespace content namespace page_load_metrics { -class PageLoadMetricsMemoryTracker; class PageLoadTracker; // This class serves as a functional interface to various chrome// features. @@ -41,11 +39,6 @@ virtual bool IsNonTabWebUI(const GURL& url) = 0; virtual bool IsInternalWebUI(const GURL& url) = 0; virtual bool ShouldObserveScheme(std::string_view scheme) = 0; - - // Returns the PageLoadMetricsMemoryTracker for the given BrowserContext if - // tracking is enabled. - virtual PageLoadMetricsMemoryTracker* GetMemoryTrackerForBrowserContext( - content::BrowserContext* browser_context) = 0; }; } // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/page_load_metrics_forward_observer.cc b/components/page_load_metrics/browser/page_load_metrics_forward_observer.cc index 8c543c7..4db5f11f 100644 --- a/components/page_load_metrics/browser/page_load_metrics_forward_observer.cc +++ b/components/page_load_metrics/browser/page_load_metrics_forward_observer.cc
@@ -479,13 +479,6 @@ void PageLoadMetricsForwardObserver::DidActivatePreviewedPage( base::TimeTicks activation_time) {} -void PageLoadMetricsForwardObserver::OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) { - if (!parent_observer_) - return; - parent_observer_->OnV8MemoryChanged(memory_updates); -} - void PageLoadMetricsForwardObserver::OnSharedStorageWorkletHostCreated() { if (!parent_observer_) return;
diff --git a/components/page_load_metrics/browser/page_load_metrics_forward_observer.h b/components/page_load_metrics/browser/page_load_metrics_forward_observer.h index 77845aba..596e86f 100644 --- a/components/page_load_metrics/browser/page_load_metrics_forward_observer.h +++ b/components/page_load_metrics/browser/page_load_metrics_forward_observer.h
@@ -185,8 +185,6 @@ void DidActivatePrerenderedPage( content::NavigationHandle* navigation_handle) override; void DidActivatePreviewedPage(base::TimeTicks activation_time) override; - void OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) override; void OnSharedStorageWorkletHostCreated() override; void OnSharedStorageSelectURLCalled() override; void OnCustomUserTimingMarkObserved(
diff --git a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.cc b/components/page_load_metrics/browser/page_load_metrics_memory_tracker.cc deleted file mode 100644 index 4ad1b7f..0000000 --- a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.cc +++ /dev/null
@@ -1,186 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" - -#include <map> - -#include "base/byte_count.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" -#include "components/page_load_metrics/browser/features.h" -#include "components/performance_manager/public/graph/frame_node.h" -#include "components/performance_manager/public/graph/process_node.h" -#include "components/performance_manager/public/render_frame_host_proxy.h" - -namespace page_load_metrics { - -namespace { - -using performance_manager::v8_memory::V8DetailedMemoryExecutionContextData; -using performance_manager::v8_memory::V8DetailedMemoryProcessData; -using performance_manager::v8_memory::V8DetailedMemoryRequest; - -// WeakPtrs cannot be used as the key to a map without a custom comparator, so -// we use a raw pointer for the map key and bundle the WeakPtr in a struct -// to be used as the value. -struct ObserverWeakPtrAndMemoryUpdates { - base::WeakPtr<MetricsWebContentsObserver> weak_ptr; - std::vector<MemoryUpdate> updates; - ObserverWeakPtrAndMemoryUpdates( - base::WeakPtr<MetricsWebContentsObserver> wk_ptr, - MemoryUpdate update) - : weak_ptr(wk_ptr) { - updates.emplace_back(update); - } -}; - -} // namespace - -// Results of the V8PerAdFrameMemoryPollParamsStudy indicated that at the -// ~99.8th percentile, collecting at 10-second or 60-second intervals -// yields nearly equivalent results, as does using kBounded or kLazy mode. -// As there is about 10% to 20% overhead total GC time, we chose the less -// aggressive kLazy mode with a 60-second polling interval. -// For further results please see crbug.com/1116087. -PageLoadMetricsMemoryTracker::PageLoadMetricsMemoryTracker() { - if (base::FeatureList::IsEnabled( - page_load_metrics::features::kV8PerFrameMemoryMonitoring)) { - memory_request_ = std::make_unique<V8DetailedMemoryRequest>( - base::Seconds(60), V8DetailedMemoryRequest::MeasurementMode::kLazy); - memory_request_->AddObserver(this); - memory_request_->StartMeasurement(); - } -} - -PageLoadMetricsMemoryTracker::~PageLoadMetricsMemoryTracker() = default; - -void PageLoadMetricsMemoryTracker::Shutdown() { - if (memory_request_) { - memory_request_->RemoveObserver(this); - memory_request_.reset(); - } -} - -void PageLoadMetricsMemoryTracker::OnV8MemoryMeasurementAvailable( - const performance_manager::ProcessNode* process_node, - const V8DetailedMemoryProcessData* process_data) { - std::map<MetricsWebContentsObserver*, ObserverWeakPtrAndMemoryUpdates> - memory_update_map; - - // Iterate through frames with available measurements. - for (const performance_manager::FrameNode* frame_node : - process_node->GetFrameNodes()) { - const auto* frame_data = - V8DetailedMemoryExecutionContextData::ForFrameNode(frame_node); - if (!frame_data) { - continue; - } - - content::RenderFrameHost* rfh = frame_node->GetRenderFrameHostProxy().Get(); - - // We lose a small amount of data due to a RenderFrameHost - // sometimes no longer being alive by the time that a report is received. - // UMA suggests we miss about 0.078% of updates on desktop and about 0.11% - // on mobile (as measured 10/30/2020). - // See crbug.com/1116087. - if (!rfh) { - continue; - } - - base::ByteCount delta_bytes = - UpdateMemoryUsageAndGetDelta(rfh, frame_data->v8_memory_used()); - - // Only send updates that are nontrivial. - if (delta_bytes.is_zero()) { - continue; - } - - // Note that at this point, we are guaranteed that the frame is alive, and - // frames cannot exist without an owning WebContents. - content::WebContents* web_contents = - content::WebContents::FromRenderFrameHost(rfh); - MetricsWebContentsObserver* observer = - MetricsWebContentsObserver::FromWebContents(web_contents); - - if (!observer) { - continue; - } - - auto emplace_pair = memory_update_map.emplace(std::make_pair( - observer, ObserverWeakPtrAndMemoryUpdates( - observer->AsWeakPtr(), - MemoryUpdate(rfh->GetGlobalId(), delta_bytes)))); - - if (!emplace_pair.second) { - emplace_pair.first->second.updates.emplace_back(rfh->GetGlobalId(), - delta_bytes); - } - } - - // Dispatch memory updates to each observer. Note that we store references to - // MetricsWebContentsObservers as weakptrs. This is done to ensure that if a - // WebContents was torn down synchronously as the result of a memory update - // in a different WebContents, we would not have a dangling pointer. - for (const auto& map_pair : memory_update_map) { - MetricsWebContentsObserver* observer = map_pair.second.weak_ptr.get(); - - if (!observer) { - continue; - } - - observer->OnV8MemoryChanged(map_pair.second.updates); - } -} - -void PageLoadMetricsMemoryTracker::OnRenderFrameDeleted( - content::RenderFrameHost* render_frame_host, - MetricsWebContentsObserver* observer) { - DCHECK(render_frame_host); - DCHECK(observer); - - auto it = per_frame_memory_usage_map_.find(render_frame_host->GetRoutingID()); - - if (it == per_frame_memory_usage_map_.end()) { - return; - } - - // The routing id for |render_frame_host| has been found in our usage map. - // We assume that the renderer has released the frame and that its - // contents will be picked up by the next GC. So for all intents and - // purposes, the memory is freed at this point, and we remove the entry from - // our usage map and notify observers of the delta. - base::ByteCount delta_bytes = -it->second; - per_frame_memory_usage_map_.erase(it); - - // Only send updates that are nontrivial. - if (delta_bytes.is_zero()) { - return; - } - - std::vector<MemoryUpdate> update( - {MemoryUpdate(render_frame_host->GetGlobalId(), delta_bytes)}); - observer->OnV8MemoryChanged(update); -} - -base::ByteCount PageLoadMetricsMemoryTracker::UpdateMemoryUsageAndGetDelta( - content::RenderFrameHost* render_frame_host, - base::ByteCount current_bytes_used) { - DCHECK(render_frame_host); - - base::ByteCount delta_bytes = current_bytes_used; - int routing_id = render_frame_host->GetRoutingID(); - auto it = per_frame_memory_usage_map_.find(routing_id); - - if (it != per_frame_memory_usage_map_.end()) { - delta_bytes -= it->second; - it->second = current_bytes_used; - } else { - per_frame_memory_usage_map_[routing_id] = current_bytes_used; - } - - return delta_bytes; -} - -} // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.h b/components/page_load_metrics/browser/page_load_metrics_memory_tracker.h deleted file mode 100644 index a531bb1..0000000 --- a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.h +++ /dev/null
@@ -1,65 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_MEMORY_TRACKER_H_ -#define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_MEMORY_TRACKER_H_ - -#include "base/byte_count.h" -#include "base/containers/flat_map.h" -#include "base/feature_list.h" -#include "components/keyed_service/core/keyed_service.h" -#include "components/page_load_metrics/browser/metrics_web_contents_observer.h" -#include "components/performance_manager/public/v8_memory/v8_detailed_memory.h" -#include "content/public/browser/render_frame_host.h" - -namespace performance_manager { -class ProcessNode; -} - -namespace page_load_metrics { - -// PageLoadMetricsMemoryTracker tracks per-frame memory usage by V8 and -// forwards an individual per-frame measurement to the -// MetricsWebContentsObserver associated with the WebContents containing that -// frame. -class PageLoadMetricsMemoryTracker - : public KeyedService, - public performance_manager::v8_memory::V8DetailedMemoryObserver { - public: - PageLoadMetricsMemoryTracker(); - ~PageLoadMetricsMemoryTracker() override; - PageLoadMetricsMemoryTracker(const PageLoadMetricsMemoryTracker&) = delete; - PageLoadMetricsMemoryTracker& operator=(const PageLoadMetricsMemoryTracker&) = - delete; - - // KeyedService: - void Shutdown() override; - - // performance_manager::v8_memory::V8DetailedMemoryObserver: - void OnV8MemoryMeasurementAvailable( - const performance_manager::ProcessNode* process_node, - const performance_manager::v8_memory::V8DetailedMemoryProcessData* - process_data) override; - - // Removes the entry for a deleted frame from `per_frame_memory_usage_map_`. - void OnRenderFrameDeleted(content::RenderFrameHost* render_frame_host, - MetricsWebContentsObserver* observer); - - private: - base::ByteCount UpdateMemoryUsageAndGetDelta( - content::RenderFrameHost* render_frame_host, - base::ByteCount current_bytes_used); - - // Tracks the most recent per-frame measurements by frame routing id. - base::flat_map<int, base::ByteCount> per_frame_memory_usage_map_; - - // Allows receipt of per-frame V8 memory measurements once instantiated - // and PageLoadMetricsMemoryTracker is added as an observer. - std::unique_ptr<performance_manager::v8_memory::V8DetailedMemoryRequest> - memory_request_; -}; - -} // namespace page_load_metrics - -#endif // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_MEMORY_TRACKER_H_
diff --git a/components/page_load_metrics/browser/page_load_metrics_memory_tracker_unittest.cc b/components/page_load_metrics/browser/page_load_metrics_memory_tracker_unittest.cc deleted file mode 100644 index bd5876f2..0000000 --- a/components/page_load_metrics/browser/page_load_metrics_memory_tracker_unittest.cc +++ /dev/null
@@ -1,307 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" - -#include <memory> - -#include "base/byte_count.h" -#include "base/containers/flat_map.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/singleton.h" -#include "base/memory/weak_ptr.h" -#include "base/test/scoped_feature_list.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" -#include "components/page_load_metrics/browser/features.h" -#include "components/page_load_metrics/browser/metrics_web_contents_observer.h" -#include "components/page_load_metrics/browser/page_load_metrics_embedder_base.h" -#include "components/page_load_metrics/browser/page_load_metrics_test_content_browser_client.h" -#include "components/performance_manager/public/graph/frame_node.h" -#include "components/performance_manager/public/graph/process_node.h" -#include "components/performance_manager/public/performance_manager.h" -#include "components/performance_manager/public/v8_memory/v8_detailed_memory.h" -#include "components/performance_manager/test_support/performance_manager_test_harness.h" -#include "content/public/browser/render_process_host.h" -#include "content/public/common/content_client.h" -#include "content/public/test/navigation_simulator.h" -#include "content/public/test/test_renderer_host.h" -#include "content/public/test/test_utils.h" -#include "testing/gtest/include/gtest/gtest.h" - -using performance_manager::v8_memory::V8DetailedMemoryExecutionContextData; -using performance_manager::v8_memory::V8DetailedMemoryProcessData; - -const char kMainUrl[] = "https://main.com/"; -const char kSubUrl[] = "https://foo.com/"; -const char kOtherSubUrl[] = "https://bar.com/"; - -namespace page_load_metrics { - -namespace { - -class TestPageLoadMetricsEmbedder - : public page_load_metrics::PageLoadMetricsEmbedderBase { - public: - explicit TestPageLoadMetricsEmbedder(content::WebContents* web_contents) - : PageLoadMetricsEmbedderBase(web_contents) {} - TestPageLoadMetricsEmbedder(const TestPageLoadMetricsEmbedder&) = delete; - TestPageLoadMetricsEmbedder& operator=(const TestPageLoadMetricsEmbedder&) = - delete; - ~TestPageLoadMetricsEmbedder() override = default; - - // page_load_metrics::PageLoadMetricsEmbedderBase: - bool IsNewTabPageUrl(const GURL& url) override { return false; } - bool IsNoStatePrefetch(content::WebContents* web_contents) override { - return false; - } - bool IsExtensionUrl(const GURL& url) override { return false; } - bool IsNonTabWebUI(const GURL& url) override { return false; } - - page_load_metrics::PageLoadMetricsMemoryTracker* - GetMemoryTrackerForBrowserContext( - content::BrowserContext* browser_context) override { - if (!base::FeatureList::IsEnabled(features::kV8PerFrameMemoryMonitoring)) { - return nullptr; - } - - return &memory_tracker_; - } - - private: - page_load_metrics::PageLoadMetricsMemoryTracker memory_tracker_; -}; - -class TestMetricsWebContentsObserver : public MetricsWebContentsObserver { - public: - TestMetricsWebContentsObserver( - content::WebContents* web_contents, - std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface) - : MetricsWebContentsObserver(web_contents, - std::move(embedder_interface)) {} - - int num_updates_received() const { return num_updates_received_; } - - const base::flat_map<int, base::ByteCount>& last_memory_deltas_received() - const { - return last_memory_deltas_received_; - } - - void OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) override { - for (const auto& update : memory_updates) { - num_updates_received_++; - - int routing_id = update.routing_id.frame_routing_id; - auto it = last_memory_deltas_received_.find(routing_id); - if (it == last_memory_deltas_received_.end()) { - last_memory_deltas_received_[routing_id] = update.delta_bytes; - } else { - it->second = update.delta_bytes; - } - } - } - - private: - base::flat_map<int, base::ByteCount> last_memory_deltas_received_; - int num_updates_received_ = 0; -}; - -class PageLoadMetricsMemoryTrackerTest - : public performance_manager::PerformanceManagerTestHarness { - public: - PageLoadMetricsMemoryTrackerTest() = default; - ~PageLoadMetricsMemoryTrackerTest() override = default; - PageLoadMetricsMemoryTrackerTest(const PageLoadMetricsMemoryTrackerTest&) = - delete; - PageLoadMetricsMemoryTrackerTest& operator=( - const PageLoadMetricsMemoryTrackerTest&) = delete; - - void SetUp() override { - scoped_feature_list_.InitAndEnableFeature( - features::kV8PerFrameMemoryMonitoring); - - performance_manager::PerformanceManagerTestHarness::SetUp(); - original_browser_client_ = - content::SetBrowserClientForTesting(&browser_client_); - - // Create a WebContents backed by Performance Manager objects. - SetContents(CreateTestWebContents()); - - auto embedder_interface = - std::make_unique<TestPageLoadMetricsEmbedder>(web_contents()); - embedder_interface_ = embedder_interface.get(); - observer_ = new TestMetricsWebContentsObserver( - web_contents(), std::move(embedder_interface)); - web_contents()->SetUserData(TestMetricsWebContentsObserver::UserDataKey(), - base::WrapUnique(observer_.get())); - - tracker_ = embedder_interface_->GetMemoryTrackerForBrowserContext( - browser_context()); - } - - void TearDown() override { - content::SetBrowserClientForTesting(original_browser_client_); - tracker_->Shutdown(); - performance_manager::PerformanceManagerTestHarness::TearDown(); - } - - // Returns the final RenderFrameHost after navigation commits. - content::RenderFrameHost* NavigateFrame(const std::string& url, - content::RenderFrameHost* frame) { - auto navigation_simulator = - content::NavigationSimulator::CreateRendererInitiated(GURL(url), frame); - navigation_simulator->Commit(); - return navigation_simulator->GetFinalRenderFrameHost(); - } - - // Returns the final RenderFrameHost after navigation commits. - content::RenderFrameHost* NavigateMainFrame(const std::string& url) { - return NavigateFrame(url, web_contents()->GetPrimaryMainFrame()); - } - - // Returns the final RenderFrameHost after navigation commits. - content::RenderFrameHost* CreateAndNavigateSubFrame( - const std::string& url, - content::RenderFrameHost* parent) { - content::RenderFrameHost* subframe = - content::RenderFrameHostTester::For(parent)->AppendChild("frame_name"); - auto navigation_simulator = - content::NavigationSimulator::CreateRendererInitiated(GURL(url), - subframe); - navigation_simulator->Commit(); - - return navigation_simulator->GetFinalRenderFrameHost(); - } - - void SimulateMemoryMeasurementUpdate( - content::RenderFrameHost* render_frame_host, - base::ByteCount bytes) { - if (!render_frame_host || !render_frame_host->GetProcess()) { - return; - } - - base::WeakPtr<performance_manager::FrameNode> frame_node = - performance_manager::PerformanceManager::GetFrameNodeForRenderFrameHost( - render_frame_host); - ASSERT_TRUE(frame_node); - const performance_manager::ProcessNode* process_node = - frame_node->GetProcessNode(); - ASSERT_TRUE(process_node); - - V8DetailedMemoryExecutionContextData::CreateForTesting(frame_node.get()) - ->set_v8_memory_used(base::ByteCount(bytes)); - V8DetailedMemoryProcessData process_data; - tracker_->OnV8MemoryMeasurementAvailable(process_node, &process_data); - } - - int num_updates_received() const { return observer_->num_updates_received(); } - - const base::flat_map<int, base::ByteCount>& last_memory_deltas_received() - const { - return observer_->last_memory_deltas_received(); - } - - protected: - raw_ptr<PageLoadMetricsMemoryTracker, DanglingUntriaged> tracker_; - - private: - base::test::ScopedFeatureList scoped_feature_list_; - raw_ptr<TestMetricsWebContentsObserver, DanglingUntriaged> observer_; - raw_ptr<TestPageLoadMetricsEmbedder, DanglingUntriaged> embedder_interface_; - PageLoadMetricsTestContentBrowserClient browser_client_; - raw_ptr<content::ContentBrowserClient> original_browser_client_ = nullptr; -}; - -} // namespace - -TEST_F(PageLoadMetricsMemoryTrackerTest, - InitialUpdatesOnly_CorrectDeltasReceived) { - content::RenderFrameHost* main_frame = NavigateMainFrame(kMainUrl); - int main_id = main_frame->GetRoutingID(); - content::RenderFrameHost* sub_frame1 = - CreateAndNavigateSubFrame(kSubUrl, main_frame); - int sub_frame1_id = sub_frame1->GetRoutingID(); - - // Create a nested subframe with the same origin as its parent. - content::RenderFrameHost* sub_frame2 = - CreateAndNavigateSubFrame(kOtherSubUrl, sub_frame1); - int sub_frame2_id = sub_frame2->GetRoutingID(); - - SimulateMemoryMeasurementUpdate(main_frame, base::KiB(100)); - SimulateMemoryMeasurementUpdate(sub_frame1, base::KiB(200)); - SimulateMemoryMeasurementUpdate(sub_frame2, base::KiB(300)); - - auto deltas_received = last_memory_deltas_received(); - EXPECT_EQ(3, num_updates_received()); - ASSERT_EQ(3UL, deltas_received.size()); - - EXPECT_TRUE(deltas_received.find(main_id) != deltas_received.end()); - EXPECT_EQ(base::KiB(100), deltas_received[main_id]); - EXPECT_TRUE(deltas_received.find(sub_frame1_id) != deltas_received.end()); - EXPECT_EQ(base::KiB(200), deltas_received[sub_frame1_id]); - EXPECT_TRUE(deltas_received.find(sub_frame2_id) != deltas_received.end()); - EXPECT_EQ(base::KiB(300), deltas_received[sub_frame2_id]); -} - -TEST_F(PageLoadMetricsMemoryTrackerTest, SecondUpdates_CorrectDeltasReceived) { - content::RenderFrameHost* main_frame = NavigateMainFrame(kMainUrl); - int main_id = main_frame->GetRoutingID(); - content::RenderFrameHost* sub_frame1 = - CreateAndNavigateSubFrame(kSubUrl, main_frame); - int sub_frame1_id = sub_frame1->GetRoutingID(); - - // Create a nested subframe with the same origin as its parent. - content::RenderFrameHost* sub_frame2 = - CreateAndNavigateSubFrame(kOtherSubUrl, sub_frame1); - int sub_frame2_id = sub_frame2->GetRoutingID(); - - SimulateMemoryMeasurementUpdate(main_frame, base::KiB(100)); - SimulateMemoryMeasurementUpdate(sub_frame1, base::KiB(200)); - SimulateMemoryMeasurementUpdate(sub_frame2, base::KiB(300)); - - // Simulate second round of updates. - SimulateMemoryMeasurementUpdate(main_frame, base::KiB(50)); - SimulateMemoryMeasurementUpdate(sub_frame1, base::KiB(300)); - SimulateMemoryMeasurementUpdate(sub_frame2, base::KiB(100)); - - auto deltas_received = last_memory_deltas_received(); - EXPECT_EQ(6, num_updates_received()); - ASSERT_EQ(3UL, deltas_received.size()); - - EXPECT_TRUE(deltas_received.find(main_id) != deltas_received.end()); - EXPECT_EQ(base::KiB(-50), deltas_received[main_id]); - EXPECT_TRUE(deltas_received.find(sub_frame1_id) != deltas_received.end()); - EXPECT_EQ(base::KiB(100), deltas_received[sub_frame1_id]); - EXPECT_TRUE(deltas_received.find(sub_frame2_id) != deltas_received.end()); - EXPECT_EQ(base::KiB(-200), deltas_received[sub_frame2_id]); -} - -TEST_F(PageLoadMetricsMemoryTrackerTest, FrameDeleted_CorrectDeltasReceived) { - content::RenderFrameHost* main_frame = NavigateMainFrame(kMainUrl); - int main_id = main_frame->GetRoutingID(); - content::RenderFrameHost* sub_frame = - CreateAndNavigateSubFrame(kSubUrl, main_frame); - int sub_frame_id = sub_frame->GetRoutingID(); - - SimulateMemoryMeasurementUpdate(main_frame, base::KiB(100)); - SimulateMemoryMeasurementUpdate(sub_frame, base::KiB(200)); - - content::RenderFrameDeletedObserver delete_observer(sub_frame); - // Delete |sub_frame| and refresh the usage map. An update should have been - // received that will make the usage corresponding to |sub_frame| zero. - content::RenderFrameHostTester::For(sub_frame)->Detach(); - delete_observer.WaitUntilDeleted(); - - auto deltas_received = last_memory_deltas_received(); - EXPECT_EQ(3, num_updates_received()); - ASSERT_EQ(2UL, deltas_received.size()); - - EXPECT_TRUE(deltas_received.find(main_id) != deltas_received.end()); - EXPECT_EQ(base::KiB(100), deltas_received[main_id]); - EXPECT_TRUE(deltas_received.find(sub_frame_id) != deltas_received.end()); - EXPECT_EQ(base::KiB(-200), deltas_received[sub_frame_id]); -} - -} // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer.cc b/components/page_load_metrics/browser/page_load_metrics_observer.cc index 5d27dee..7c28d6e2 100644 --- a/components/page_load_metrics/browser/page_load_metrics_observer.cc +++ b/components/page_load_metrics/browser/page_load_metrics_observer.cc
@@ -11,10 +11,6 @@ namespace page_load_metrics { -MemoryUpdate::MemoryUpdate(content::GlobalRenderFrameHostId id, - base::ByteCount delta) - : routing_id(id), delta_bytes(delta) {} - ExtraRequestCompleteInfo::ExtraRequestCompleteInfo( const url::SchemeHostPort& final_url, const net::IPEndPoint& remote_endpoint,
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer.h b/components/page_load_metrics/browser/page_load_metrics_observer.h index 93c4cfc..2f572d8 100644 --- a/components/page_load_metrics/browser/page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/page_load_metrics_observer.h
@@ -265,8 +265,6 @@ void DidActivatePrerenderedPage( content::NavigationHandle* navigation_handle) override {} void DidActivatePreviewedPage(base::TimeTicks activation_time) override {} - void OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) override {} void OnSharedStorageWorkletHostCreated() override {} void OnSharedStorageSelectURLCalled() override {} void OnCustomUserTimingMarkObserved(
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer_interface.h b/components/page_load_metrics/browser/page_load_metrics_observer_interface.h index b60312e..1e8a05b 100644 --- a/components/page_load_metrics/browser/page_load_metrics_observer_interface.h +++ b/components/page_load_metrics/browser/page_load_metrics_observer_interface.h
@@ -123,13 +123,6 @@ content::NavigationDiscardReason discard_reason; }; -// Struct for storing per-frame memory update data. -struct MemoryUpdate { - content::GlobalRenderFrameHostId routing_id; - base::ByteCount delta_bytes; - MemoryUpdate(content::GlobalRenderFrameHostId id, base::ByteCount delta); -}; - // Interface for PageLoadMetrics observers. Only PageLoadMetricsForwardObserver // should inherit this interface directly, and others should do // PageLoadMetricsObserver class. @@ -635,12 +628,6 @@ // Called when the previewed page is activated for the tab promotion. virtual void DidActivatePreviewedPage(base::TimeTicks activation_time) = 0; - // Called when V8 per-frame memory usage updates are available. Each - // MemoryUpdate consists of a GlobalRenderFrameHostId and a nonzero change in - // bytes used. - virtual void OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) = 0; - // Called when a `SharedStorageWorkletHost` is created. virtual void OnSharedStorageWorkletHostCreated() = 0;
diff --git a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc index 195679c..530c255f 100644 --- a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc +++ b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc
@@ -85,8 +85,6 @@ const gfx::Rect& main_frame_viewport_rect) override; void OnMainFrameAdRectsChanged( const base::flat_map<int, gfx::Rect>& main_frame_ad_rects) override; - void OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) override; void OnPageRenderDataUpdate(const mojom::FrameRenderDataUpdate& render_data, bool is_main_frame) override; void OnComplete(const mojom::PageLoadTiming& timing) override; @@ -232,11 +230,6 @@ expected_minimum_aggregate_cpu_time_ = minimum; } -void PageLoadMetricsTestWaiter::AddMemoryUpdateExpectation( - content::GlobalRenderFrameHostId routing_id) { - expected_.memory_update_frame_ids_.insert(routing_id); -} - void PageLoadMetricsTestWaiter::AddLoadingBehaviorExpectation( int behavior_flags) { expected_.loading_behavior_flags_ |= behavior_flags; @@ -489,15 +482,6 @@ run_loop_->Quit(); } -void PageLoadMetricsTestWaiter::OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) { - for (const auto& update : memory_updates) - observed_.memory_update_frame_ids_.insert(update.routing_id); - - if (ExpectationsSatisfied() && run_loop_) - run_loop_->Quit(); -} - void PageLoadMetricsTestWaiter::FrameSizeChanged( content::RenderFrameHost* render_frame_host, const gfx::Size& frame_size) { @@ -731,10 +715,6 @@ return observed_.did_observed_main_frame_ad_rects_; } -bool PageLoadMetricsTestWaiter::MemoryUpdateExpectationsSatisfied() const { - return IsSubset(expected_.memory_update_frame_ids_, - observed_.memory_update_frame_ids_); -} bool PageLoadMetricsTestWaiter::LayoutShiftExpectationsSatisfied() const { return expected_.num_layout_shifts_ <= observed_.num_layout_shifts_; } @@ -805,7 +785,6 @@ MainFrameIntersectionExpectationsSatisfied() && MainFrameViewportRectExpectationsSatisfied() && MainFrameAdRectsExpectationsSatisfied() && - MemoryUpdateExpectationsSatisfied() && LayoutShiftExpectationsSatisfied() && NumInteractionsExpectationsSatisfied() && NumLargestContentfulPaintImageSatisfied() && @@ -830,7 +809,6 @@ EXPECT_TRUE(CpuTimeExpectationsSatisfied()); EXPECT_TRUE(MainFrameIntersectionExpectationsSatisfied()); EXPECT_TRUE(MainFrameViewportRectExpectationsSatisfied()); - EXPECT_TRUE(MemoryUpdateExpectationsSatisfied()); } void PageLoadMetricsTestWaiter::ResetExpectations() { @@ -959,13 +937,6 @@ } } -void WaiterMetricsObserver::OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) { - if (waiter_) { - waiter_->OnV8MemoryChanged(memory_updates); - } -} - void WaiterMetricsObserver::OnPageRenderDataUpdate( const mojom::FrameRenderDataUpdate& render_data, bool is_main_frame) {
diff --git a/components/page_load_metrics/browser/page_load_metrics_test_waiter.h b/components/page_load_metrics/browser/page_load_metrics_test_waiter.h index 998700d..44fccaa3 100644 --- a/components/page_load_metrics/browser/page_load_metrics_test_waiter.h +++ b/components/page_load_metrics/browser/page_load_metrics_test_waiter.h
@@ -112,10 +112,6 @@ // Add aggregate time spent in cpu for page expectation. void AddMinimumAggregateCpuTimeExpectation(base::TimeDelta minimum); - // Inserts `routing_id` into `expected_.memory_update_frame_ids_`, the set of - // frame routing IDs expected to receive a memory measurement update. - void AddMemoryUpdateExpectation(content::GlobalRenderFrameHostId routing_id); - // Adds all |blink::LoadingBehaviorFlag|s set in |behavior_flags| to the // set of expected behaviors. void AddLoadingBehaviorExpectation(int behavior_flags); @@ -312,9 +308,6 @@ void OnComplete(const mojom::PageLoadTiming& timing); - // Called when V8 per-frame memory usage updates are available. - void OnV8MemoryChanged(const std::vector<MemoryUpdate>& memory_updates); - void OnTrackerCreated(page_load_metrics::PageLoadTracker* tracker) override; void OnCommit(page_load_metrics::PageLoadTracker* tracker) override; @@ -332,7 +325,6 @@ bool MainFrameIntersectionExpectationsSatisfied() const; bool MainFrameViewportRectExpectationsSatisfied() const; bool MainFrameAdRectsExpectationsSatisfied() const; - bool MemoryUpdateExpectationsSatisfied() const; bool LayoutShiftExpectationsSatisfied() const; bool NumInteractionsExpectationsSatisfied() const; bool NumLargestContentfulPaintImageSatisfied() const; @@ -363,9 +355,6 @@ bool did_observed_main_frame_ad_rects_ = false; std::vector<gfx::Rect> main_frame_intersections_; std::optional<gfx::Rect> main_frame_viewport_rect_; - std::unordered_set<content::GlobalRenderFrameHostId, - content::GlobalRenderFrameHostIdHasher> - memory_update_frame_ids_; uint64_t num_layout_shifts_ = 0; bool on_complete_ = false; };
diff --git a/components/page_load_metrics/browser/page_load_tracker.cc b/components/page_load_metrics/browser/page_load_tracker.cc index 42be9f78..bc50374 100644 --- a/components/page_load_metrics/browser/page_load_tracker.cc +++ b/components/page_load_metrics/browser/page_load_tracker.cc
@@ -23,7 +23,6 @@ #include "components/page_load_metrics/browser/observers/assert_page_load_metrics_observer.h" #include "components/page_load_metrics/browser/page_load_metrics_embedder_interface.h" #include "components/page_load_metrics/browser/page_load_metrics_forward_observer.h" -#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h" #include "components/page_load_metrics/browser/page_load_metrics_observer.h" #include "components/page_load_metrics/browser/page_load_metrics_util.h" #include "components/page_load_metrics/common/page_load_timing.h" @@ -1459,13 +1458,6 @@ page_end_time_ = base::TimeTicks(); } -void PageLoadTracker::OnV8MemoryChanged( - const std::vector<MemoryUpdate>& memory_updates) { - for (const auto& observer : observers_) { - observer->OnV8MemoryChanged(memory_updates); - } -} - void PageLoadTracker::OnSharedStorageWorkletHostCreated() { for (const auto& observer : observers_) { observer->OnSharedStorageWorkletHostCreated();
diff --git a/components/page_load_metrics/browser/page_load_tracker.h b/components/page_load_metrics/browser/page_load_tracker.h index 12bd050..e0985fc 100644 --- a/components/page_load_metrics/browser/page_load_tracker.h +++ b/components/page_load_metrics/browser/page_load_tracker.h
@@ -43,7 +43,6 @@ namespace page_load_metrics { -struct MemoryUpdate; class PageLoadMetricsEmbedderInterface; namespace internal { @@ -438,9 +437,6 @@ // Called when the previewed page was activated for the tab promotion. void DidActivatePreviewedPage(base::TimeTicks activation_time); - // Called when V8 per-frame memory usage updates are available. - void OnV8MemoryChanged(const std::vector<MemoryUpdate>& memory_updates); - // Called when a `SharedStorageWorkletHost` is created. void OnSharedStorageWorkletHostCreated();
diff --git a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc index 09cf0477..c7ef9d2 100644 --- a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc +++ b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc
@@ -247,10 +247,4 @@ return false; } -PageLoadMetricsMemoryTracker* -TestMetricsWebContentsObserverEmbedder::GetMemoryTrackerForBrowserContext( - content::BrowserContext* browser_context) { - return nullptr; -} - } // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h index 7dc50ab5..540dd63 100644 --- a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h +++ b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h
@@ -16,8 +16,6 @@ namespace page_load_metrics { -class PageLoadMetricsMemoryTracker; - class TestMetricsWebContentsObserverEmbedder : public PageLoadMetricsEmbedderInterface, public test::WeakMockTimerProvider { @@ -36,8 +34,6 @@ bool IsNonTabWebUI(const GURL& url) override; bool IsInternalWebUI(const GURL& url) override; bool ShouldObserveScheme(std::string_view scheme) override; - PageLoadMetricsMemoryTracker* GetMemoryTrackerForBrowserContext( - content::BrowserContext* browser_context) override; void set_is_ntp(bool is_ntp) { is_ntp_ = is_ntp; }
diff --git a/components/password_manager/core/browser/import/password_importer.cc b/components/password_manager/core/browser/import/password_importer.cc index 7faaa2c9..88986ce6 100644 --- a/components/password_manager/core/browser/import/password_importer.cc +++ b/components/password_manager/core/browser/import/password_importer.cc
@@ -28,7 +28,6 @@ #include "components/password_manager/core/common/password_manager_constants.h" #include "components/password_manager/services/csv_password/csv_password_parser_service.h" -using password_manager::ImportEntry; namespace password_manager { IncomingPasswords::IncomingPasswords() = default; @@ -159,15 +158,15 @@ if (password.empty()) { return base::unexpected(with_status(ImportEntry::Status::MISSING_PASSWORD)); } - if (password.length() > 1000) { + if (password.length() > constants::kMaxPasswordLengthForImport) { return base::unexpected(with_status(ImportEntry::Status::LONG_PASSWORD)); } - if (csv_password.GetUsername().length() > 1000) { + if (csv_password.GetUsername().length() > constants::kMaxUsernameLengthForImport) { return base::unexpected(with_status(ImportEntry::Status::LONG_USERNAME)); } - if (csv_password.GetNote().length() > 1000) { + if (csv_password.GetNote().length() > constants::kMaxPasswordNoteLength) { return base::unexpected(with_status(ImportEntry::Status::LONG_NOTE)); } @@ -176,7 +175,7 @@ return with_status(error.empty() ? ImportEntry::Status::MISSING_URL : ImportEntry::Status::INVALID_URL); }); - if (url.spec().length() > 2048) { + if (url.spec().length() > constants::kMaxUrlLengthForImport) { return base::unexpected(with_status(ImportEntry::Status::LONG_URL)); } if (!IsValidPasswordURL(url)) {
diff --git a/components/password_manager/core/browser/import/password_importer_unittest.cc b/components/password_manager/core/browser/import/password_importer_unittest.cc index 5cc6314..240c460 100644 --- a/components/password_manager/core/browser/import/password_importer_unittest.cc +++ b/components/password_manager/core/browser/import/password_importer_unittest.cc
@@ -282,7 +282,7 @@ } TEST_F(PasswordImporterTest, CSVImportLongNote) { - std::string long_note = std::string(1001, '*'); + std::string long_note = std::string(constants::kMaxPasswordNoteLength + 1, '*'); std::string kTestCSVInput = std::string("Url,Username,Password,Notes\n") + "https://test.com,test@gmail.com,pwd," + long_note + "\n"; @@ -810,7 +810,8 @@ } TEST_F(PasswordImporterTest, CSVImportLongURLReported) { - std::string long_url = "https://" + std::string(2048, 'a') + ".com"; + std::string long_url = + "https://" + std::string(constants::kMaxUrlLengthForImport, 'a') + ".com"; std::string kTestCSVInput = "Url,Username,Password\n" + long_url + ",test@gmail.com,test1 \n"; @@ -840,7 +841,8 @@ } TEST_F(PasswordImporterTest, CSVImportLongPassword) { - std::string long_password = "https://" + std::string(1001, '*') + ".com"; + std::string long_password = + std::string(constants::kMaxPasswordLengthForImport + 1, '*'); std::string kTestCSVInput = std::string("Url,Username,Password\n") + "https://test.com,test@gmail.com," + long_password + "\n"; @@ -870,7 +872,8 @@ } TEST_F(PasswordImporterTest, CSVImportLongUsername) { - std::string long_username = "https://" + std::string(1001, '*') + ".com"; + std::string long_username = + std::string(constants::kMaxUsernameLengthForImport + 1, 'a'); std::string kTestCSVInput = std::string("Url,Username,Password\n") + "https://test.com," + long_username + ",password\n";
diff --git a/components/password_manager/core/browser/passkey_credential.cc b/components/password_manager/core/browser/passkey_credential.cc index b2050877..43b6cf8 100644 --- a/components/password_manager/core/browser/passkey_credential.cc +++ b/components/password_manager/core/browser/passkey_credential.cc
@@ -54,6 +54,11 @@ base::Time::FromMillisecondsSinceUnixEpoch( passkey.creation_time())) : std::nullopt, + passkey.has_last_used_time_windows_epoch_micros() + ? std::make_optional( + base::Time::FromDeltaSinceWindowsEpoch(base::Microseconds( + passkey.last_used_time_windows_epoch_micros()))) + : std::nullopt, passkey.hidden()); } return ret; @@ -80,6 +85,7 @@ Username username, DisplayName display_name, std::optional<base::Time> creation_time, + std::optional<base::Time> last_used_time, bool hidden) : source_(source), rp_id_(std::move(rp_id)), @@ -88,6 +94,7 @@ username_(std::move(username)), display_name_(std::move(display_name)), creation_time_(std::move(creation_time)), + last_used_time_(std::move(last_used_time)), hidden_(hidden) {} PasskeyCredential::~PasskeyCredential() = default;
diff --git a/components/password_manager/core/browser/passkey_credential.h b/components/password_manager/core/browser/passkey_credential.h index 0a8a124..f514ecf 100644 --- a/components/password_manager/core/browser/passkey_credential.h +++ b/components/password_manager/core/browser/passkey_credential.h
@@ -55,6 +55,7 @@ DisplayName display_name = DisplayName(""), // Must be provided for kAndroidPhone credentials. std::optional<base::Time> creation_time = std::nullopt, + std::optional<base::Time> last_used_time = std::nullopt, bool hidden = false); ~PasskeyCredential(); @@ -81,6 +82,9 @@ const std::optional<base::Time>& creation_time() const { return creation_time_; } + const std::optional<base::Time>& last_used_time() const { + return last_used_time_; + } bool hidden() const { return hidden_; } private: @@ -119,6 +123,9 @@ // UIs. This value is not available for passkeys from some sources. std::optional<base::Time> creation_time_; + // The time when the credential was last used, when known. + std::optional<base::Time> last_used_time_; + // Indicates that the credential was marked for deletion (e.g. by a website) // and should be marked as such in management surfaces and hidden from // authentication surfaces.
diff --git a/components/password_manager/core/browser/passkey_credential_unittest.cc b/components/password_manager/core/browser/passkey_credential_unittest.cc index ae41830..d92032c 100644 --- a/components/password_manager/core/browser/passkey_credential_unittest.cc +++ b/components/password_manager/core/browser/passkey_credential_unittest.cc
@@ -31,12 +31,14 @@ constexpr char kUserName1[] = "reimu"; constexpr char kUserDisplayName1[] = "Reimu Hakurei"; constexpr int kCreationEpochSecs1 = 1; +constexpr int kLastUsedEpochSecs1 = 5; constexpr std::array<const uint8_t, 4> kCredentialId2 = {'e', 'f', 'g', 'h'}; constexpr std::array<const uint8_t, 4> kUserId2 = {'5', '6', '7', '8'}; constexpr char kUserName2[] = "marisa"; constexpr char kUserDisplayName2[] = "Marisa Kirisame"; constexpr int kCreationEpochSecs2 = 2; +constexpr int kLastUsedEpochSecs2 = 6; constexpr std::array<const uint8_t, 4> kCredentialIdShadow1 = {'i', 'j', 'k'}; constexpr std::array<const uint8_t, 4> kCredentialIdShadow2 = {'l', 'm', 'n'}; @@ -62,6 +64,8 @@ credential1.set_user_name(kUserName1); credential1.set_user_display_name(kUserDisplayName1); credential1.set_creation_time(kCreationEpochSecs1 * 1000); + credential1.set_last_used_time_windows_epoch_micros( + base::Seconds(kLastUsedEpochSecs1).InMicroseconds()); sync_pb::WebauthnCredentialSpecifics credential2; credential2.set_sync_id(base::RandBytesAsString(16)); @@ -71,6 +75,8 @@ credential2.set_user_name(kUserName2); credential2.set_user_display_name(kUserDisplayName2); credential2.set_creation_time(kCreationEpochSecs2 * 1000); + credential2.set_last_used_time_windows_epoch_micros( + base::Seconds(kLastUsedEpochSecs2).InMicroseconds()); credential2.set_hidden(true); // Shadow the first credential. @@ -85,6 +91,8 @@ credential1_shadow.add_newly_shadowed_credential_ids( credential1.credential_id()); credential1_shadow.set_creation_time(kCreationEpochSecs1 * 1000); + credential1_shadow.set_last_used_time_windows_epoch_micros( + kLastUsedEpochSecs1 * 1000000); std::vector<PasskeyCredential> credentials = PasskeyCredential::FromCredentialSpecifics(std::vector{ @@ -104,6 +112,8 @@ PasskeyCredential::Username(kUserName1), PasskeyCredential::DisplayName(kUserDisplayName1), base::Time::FromTimeT(kCreationEpochSecs1), + base::Time::FromDeltaSinceWindowsEpoch( + base::Seconds(kLastUsedEpochSecs1)), /*hidden=*/false), PasskeyCredential( PasskeyCredential::Source::kAndroidPhone, @@ -113,6 +123,8 @@ PasskeyCredential::Username(kUserName2), PasskeyCredential::DisplayName(kUserDisplayName2), base::Time::FromTimeT(kCreationEpochSecs2), + base::Time::FromDeltaSinceWindowsEpoch( + base::Seconds(kLastUsedEpochSecs2)), /*hidden=*/true))); }
diff --git a/components/password_manager/core/common/password_manager_constants.h b/components/password_manager/core/common/password_manager_constants.h index b7e47720..39e83712 100644 --- a/components/password_manager/core/common/password_manager_constants.h +++ b/components/password_manager/core/common/password_manager_constants.h
@@ -22,6 +22,9 @@ inline constexpr char kAutocompleteWebAuthn[] = "webauthn"; inline constexpr int kMaxPasswordNoteLength = 1000; +inline constexpr int kMaxPasswordLengthForImport = 1000; +inline constexpr int kMaxUsernameLengthForImport = 1000; +inline constexpr int kMaxUrlLengthForImport = 2048; inline constexpr int kMaxPasswordsPerCSVFile = 3000; inline constexpr base::TimeDelta kPasswordManagerAuthValidity =
diff --git a/components/password_manager/ios/shared_password_controller_unittest.mm b/components/password_manager/ios/shared_password_controller_unittest.mm index cd3858e..a75ac4e 100644 --- a/components/password_manager/ios/shared_password_controller_unittest.mm +++ b/components/password_manager/ios/shared_password_controller_unittest.mm
@@ -88,7 +88,7 @@ using ::testing::Return; const std::string kTestURL = "https://www.chromium.org/"; -NSString* kTestFrameID = @"11111111111111111111111111111111"; +NSString* const kTestFrameID = @"11111111111111111111111111111111"; constexpr uint64_t kMaxPasswordLength = 10; constexpr char16_t kGeneratedPassword[] = u"testpassword";
diff --git a/components/policy/test_support/fake_dmserver.cc b/components/policy/test_support/fake_dmserver.cc index 021b4921..3ab945ef 100644 --- a/components/policy/test_support/fake_dmserver.cc +++ b/components/policy/test_support/fake_dmserver.cc
@@ -11,6 +11,7 @@ #include "base/files/file_util.h" #include "base/json/json_file_value_serializer.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/notreached.h" #include "base/scoped_observation.h" #include "base/strings/string_number_conversions.h"
diff --git a/components/regional_capabilities/regional_capabilities_metrics.cc b/components/regional_capabilities/regional_capabilities_metrics.cc index 7c3704b5..388dacc 100644 --- a/components/regional_capabilities/regional_capabilities_metrics.cc +++ b/components/regional_capabilities/regional_capabilities_metrics.cc
@@ -6,6 +6,7 @@ #include "base/containers/flat_map.h" #include "base/metrics/histogram_functions.h" +#include "base/metrics/puma_histogram_functions.h" #include "base/notreached.h" #include "base/strings/strcat.h" #include "components/country_codes/country_codes.h" @@ -79,18 +80,27 @@ void RecordFunnelStage(FunnelStage stage) { base::UmaHistogramEnumeration("RegionalCapabilities.FunnelStage.Reported", stage); + base::PumaHistogramEnumeration( + base::PumaType::kRc, "PUMA.RegionalCapabilities.FunnelStage.Reported", + stage); } void RecordEligibilityFunnelStageDetails( SearchEngineChoiceScreenConditions conditions) { base::UmaHistogramEnumeration("RegionalCapabilities.FunnelStage.Eligibility", conditions); + base::PumaHistogramEnumeration( + base::PumaType::kRc, "PUMA.RegionalCapabilities.FunnelStage.Eligibility", + conditions); } void RecordTriggeringFunnelStageDetails( SearchEngineChoiceScreenConditions conditions) { base::UmaHistogramEnumeration("RegionalCapabilities.FunnelStage.Triggering", conditions); + base::PumaHistogramEnumeration( + base::PumaType::kRc, "PUMA.RegionalCapabilities.FunnelStage.Triggering", + conditions); } void RecordActiveRegionalProgram(
diff --git a/components/regional_capabilities/regional_capabilities_switches.cc b/components/regional_capabilities/regional_capabilities_switches.cc index a5eac523..8a0428f 100644 --- a/components/regional_capabilities/regional_capabilities_switches.cc +++ b/components/regional_capabilities/regional_capabilities_switches.cc
@@ -11,11 +11,6 @@ namespace switches { #if BUILDFLAG(IS_ANDROID) -// Mitigate overlap cases between the legacy search engine promo and the -// device-based program eligibility determinations. -BASE_FEATURE(kMitigateLegacySearchEnginePromoOverlap, - base::FEATURE_ENABLED_BY_DEFAULT); - BASE_FEATURE(kRestrictLegacySearchEnginePromoOnFormFactors, base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/components/regional_capabilities/regional_capabilities_switches.h b/components/regional_capabilities/regional_capabilities_switches.h index b3c1699..6731567 100644 --- a/components/regional_capabilities/regional_capabilities_switches.h +++ b/components/regional_capabilities/regional_capabilities_switches.h
@@ -40,10 +40,6 @@ inline constexpr char kEeaListCountryOverride[] = "EEA_ALL"; #if BUILDFLAG(IS_ANDROID) -// Mitigate overlap cases between the legacy search engine promo and the -// device-based program eligibility determinations. -BASE_DECLARE_FEATURE(kMitigateLegacySearchEnginePromoOverlap); - // Ensure that the legacy search engine promos don't trigger on out of // scope device types. BASE_DECLARE_FEATURE(kRestrictLegacySearchEnginePromoOnFormFactors);
diff --git a/components/reporting/storage/storage_unittest.cc b/components/reporting/storage/storage_unittest.cc index 66242a2..4904767 100644 --- a/components/reporting/storage/storage_unittest.cc +++ b/components/reporting/storage/storage_unittest.cc
@@ -4,6 +4,7 @@ #include "components/reporting/storage/storage.h" +#include <array> #include <atomic> #include <cstdint> #include <optional> @@ -11,7 +12,9 @@ #include <utility> #include "base/compiler_specific.h" +#include "base/containers/auto_spanification_helper.h" #include "base/containers/flat_map.h" +#include "base/containers/span_writer.h" #include "base/files/scoped_temp_dir.h" #include "base/functional/callback_helpers.h" #include "base/memory/raw_ptr.h" @@ -567,7 +570,7 @@ std::move(processed_cb)); return; } - // Decrypt encrypted_record asynhcronously, then resume on the current + // Decrypt encrypted_record asynchronously, then resume on the current // sequence. (new SingleDecryptionContext( encrypted_record, decryptor_, @@ -957,46 +960,44 @@ ASSERT_OK(c_result) << c_result; } + template <size_t N> + std::string_view Uint8ArrayToStringView(const std::array<uint8_t, N>& arr) { + return std::string_view(reinterpret_cast<const char*>(arr.data()), + arr.size()); + } + SignedEncryptionInfo GenerateAndSignKey() { CHECK(decryptor_) << "Decryptor not created"; // Generate new pair of private key and public value. - uint8_t private_key[kKeySize]; + std::array<uint8_t, kKeySize> private_key; Encryptor::PublicKeyId public_key_id; - uint8_t public_value[kKeySize]; + std::array<uint8_t, kKeySize> public_value; test::GenerateEncryptionKeyPair(private_key, public_value); test::TestEvent<StatusOr<Encryptor::PublicKeyId>> prepare_key_pair; - decryptor_->RecordKeyPair( - std::string(reinterpret_cast<const char*>(private_key), kKeySize), - std::string(reinterpret_cast<const char*>(public_value), kKeySize), - prepare_key_pair.cb()); + decryptor_->RecordKeyPair(Uint8ArrayToStringView(private_key), + Uint8ArrayToStringView(public_value), + prepare_key_pair.cb()); auto prepare_key_result = prepare_key_pair.result(); CHECK(prepare_key_result.has_value()) << prepare_key_result.error(); public_key_id = prepare_key_result.value(); // Prepare signed encryption key to be delivered to Storage. SignedEncryptionInfo signed_encryption_key; signed_encryption_key.set_public_asymmetric_key( - std::string(reinterpret_cast<const char*>(public_value), kKeySize)); + Uint8ArrayToStringView(public_value)); signed_encryption_key.set_public_key_id(public_key_id); // Sign public key. - uint8_t value_to_sign[sizeof(Encryptor::PublicKeyId) + kKeySize]; - UNSAFE_TODO( - memcpy(value_to_sign, &public_key_id, sizeof(Encryptor::PublicKeyId))); - UNSAFE_TODO(memcpy(value_to_sign + sizeof(Encryptor::PublicKeyId), - public_value, kKeySize)); - uint8_t signature[kSignatureSize]; - test::SignMessage( - signing_private_key_, - std::string_view(reinterpret_cast<const char*>(value_to_sign), - sizeof(value_to_sign)), - signature); - signed_encryption_key.set_signature( - std::string(reinterpret_cast<const char*>(signature), kSignatureSize)); + std::array<uint8_t, sizeof(Encryptor::PublicKeyId) + kKeySize> + value_to_sign; + auto writer = base::SpanWriter<uint8_t>(value_to_sign); + writer.Write(base::byte_span_from_ref(public_key_id)); + writer.Write(public_value); + std::array<uint8_t, kSignatureSize> signature; + test::SignMessage(signing_private_key_, + Uint8ArrayToStringView(value_to_sign), signature); + signed_encryption_key.set_signature(Uint8ArrayToStringView(signature)); // Double check signature. - CHECK(VerifySignature( - signature_verification_public_key_, - std::string_view(reinterpret_cast<const char*>(value_to_sign), - sizeof(value_to_sign)), - signature)); + CHECK(VerifySignature(signature_verification_public_key_, + Uint8ArrayToStringView(value_to_sign), signature)); return signed_encryption_key; } @@ -1013,9 +1014,8 @@ // Generate signing key pair. test::GenerateSigningKeyPair(signing_private_key_, signature_verification_public_key_); - options_.set_signature_verification_public_key(std::string( - reinterpret_cast<const char*>(signature_verification_public_key_), - kKeySize)); + options_.set_signature_verification_public_key( + Uint8ArrayToStringView(signature_verification_public_key_)); // Create decryption module. auto decryptor_result = test::Decryptor::Create(); ASSERT_TRUE(decryptor_result.has_value()) << decryptor_result.error(); @@ -1047,8 +1047,8 @@ base::test::ScopedFeatureList scoped_feature_list_; - uint8_t signature_verification_public_key_[kKeySize]; - uint8_t signing_private_key_[kSignKeySize]; + std::array<uint8_t, kKeySize> signature_verification_public_key_; + std::array<uint8_t, kSignKeySize> signing_private_key_; base::ScopedTempDir location_; TestStorageOptions options_;
diff --git a/components/safe_browsing/content/browser/client_side_detection_host.cc b/components/safe_browsing/content/browser/client_side_detection_host.cc index 6da9ab779..93e2317f 100644 --- a/components/safe_browsing/content/browser/client_side_detection_host.cc +++ b/components/safe_browsing/content/browser/client_side_detection_host.cc
@@ -861,6 +861,12 @@ void ClientSideDetectionHost::MaybeStartPreClassification( ClientSideDetectionType request_type) { + MaybeStartPreClassification(request_type, std::nullopt); +} + +void ClientSideDetectionHost::MaybeStartPreClassification( + ClientSideDetectionType request_type, + std::optional<std::string> credit_card_form_event) { if (base::FeatureList::IsEnabled(kClientSideDetectionKillswitch)) { return; } @@ -883,6 +889,12 @@ current_url_ = rfh->GetLastCommittedURL(); last_committed_url_map_[request_type] = current_url_; current_outermost_main_frame_id_ = rfh->GetGlobalId(); + if (credit_card_form_event) { + DCHECK(request_type == ClientSideDetectionType::CREDIT_CARD_FORM); + last_credit_card_form_event_trigger_url_map_[credit_card_form_event + .value()] = current_url_; + } + // Check whether we can cassify the current URL for phishing. classification_request_ = std::make_unique<ShouldClassifyUrlRequest>( rfh->GetLastCommittedURL(), rfh->GetLastResponseHead(), @@ -986,7 +998,9 @@ NOTREACHED(); }(); - OnCreditCardFormEvent("OnFieldTypesDetermined", field_heuristic); + OnCreditCardFormEvent("OnFieldTypesDetermined", + kCsdCreditCardFormPingOnDetection.Get(), + field_heuristic); } // OnBeforeFocusOnFormField is an Autofill observer callback that triggers a CSD @@ -1018,21 +1032,24 @@ field_heuristic = credit_card_form::kAutofillLocal; } - OnCreditCardFormEvent("OnBeforeFocusOnFormField", field_heuristic); + OnCreditCardFormEvent("OnBeforeFocusOnFormField", + kCsdCreditCardFormPingOnInteraction.Get(), + field_heuristic); } void ClientSideDetectionHost::OnCreditCardFormEvent( std::string event_name, + bool allow_ping, credit_card_form::FieldDetectionHeuristic field_heuristic) { // Early exit if ESB is not enabled. if (!IsEnhancedProtectionEnabled(*delegate_->GetPrefs())) { return; } - // Early exit if preclassification has already been done for - // CREDIT_CARD_FORM and this URL. + // Early exit if preclassification has already been done for this + // event triggering CREDIT_CARD_FORM and this URL. if (HasDonePreclassificationCheckOnSameURL( - ClientSideDetectionType::CREDIT_CARD_FORM)) { + ClientSideDetectionType::CREDIT_CARD_FORM, event_name)) { return; } @@ -1049,20 +1066,21 @@ history_service_->GetVisibleVisitCountToHost( url, base::BindOnce(&ClientSideDetectionHost::OnCreditCardFormVisitCount, - weak_factory_.GetWeakPtr(), event_name, + weak_factory_.GetWeakPtr(), event_name, allow_ping, base::TimeTicks::Now(), field_heuristic), &task_tracker_); } else { history::VisibleVisitCountToHostResult history_result = cached_history_result.value_or( history::VisibleVisitCountToHostResult{/*success=*/false}); - OnCreditCardFormVisitCount(event_name, std::nullopt, field_heuristic, - history_result); + OnCreditCardFormVisitCount(event_name, allow_ping, std::nullopt, + field_heuristic, history_result); } } void ClientSideDetectionHost::OnCreditCardFormVisitCount( std::string event_name, + bool allow_ping, std::optional<base::TimeTicks> start_time, credit_card_form::FieldDetectionHeuristic field_heuristic, history::VisibleVisitCountToHostResult history_result) { @@ -1082,12 +1100,19 @@ } credit_card_form::LogEvent(event_name, site_visit, field_heuristic); + // After logging, only continue to pre-classification if sending a ping + // is allowed. + if (!allow_ping) { + return; + } + // Early exit if it is known that the user has visited this site before. if (site_visit == credit_card_form::kRepeatSiteVisit) { return; } - MaybeStartPreClassification(ClientSideDetectionType::CREDIT_CARD_FORM); + MaybeStartPreClassification(ClientSideDetectionType::CREDIT_CARD_FORM, + event_name); } void ClientSideDetectionHost::KeyboardLockRequested() { @@ -1166,11 +1191,28 @@ bool ClientSideDetectionHost::HasDonePreclassificationCheckOnSameURL( ClientSideDetectionType client_side_detection_type) { + return HasDonePreclassificationCheckOnSameURL(client_side_detection_type, + std::nullopt); +} + +bool ClientSideDetectionHost::HasDonePreclassificationCheckOnSameURL( + ClientSideDetectionType client_side_detection_type, + std::optional<std::string> credit_card_form_event) { content::RenderFrameHost* rfh = web_contents()->GetPrimaryMainFrame(); auto last_committed_url = last_committed_url_map_.find(client_side_detection_type); - return last_committed_url != last_committed_url_map_.end() && - rfh->GetLastCommittedURL() == last_committed_url->second; + bool has_done_url = last_committed_url != last_committed_url_map_.end() && + rfh->GetLastCommittedURL() == last_committed_url->second; + if (client_side_detection_type == ClientSideDetectionType::CREDIT_CARD_FORM) { + DCHECK(credit_card_form_event); + auto last_event_url = last_credit_card_form_event_trigger_url_map_.find( + credit_card_form_event); + bool has_done_event = + last_event_url != last_credit_card_form_event_trigger_url_map_.end() && + rfh->GetLastCommittedURL() == last_event_url->second; + return has_done_url && has_done_event; + } + return has_done_url; } void ClientSideDetectionHost::OnPhishingPreClassificationDone(
diff --git a/components/safe_browsing/content/browser/client_side_detection_host.h b/components/safe_browsing/content/browser/client_side_detection_host.h index 71bc4a6a..50759a1b9 100644 --- a/components/safe_browsing/content/browser/client_side_detection_host.h +++ b/components/safe_browsing/content/browser/client_side_detection_host.h
@@ -340,6 +340,9 @@ // Helper function to create preclassification check once requirements are // met. void MaybeStartPreClassification(ClientSideDetectionType request_type); + void MaybeStartPreClassification( + ClientSideDetectionType request_type, + std::optional<std::string> credit_card_form_event); // Called when pre-classification checks are done for the phishing // classifiers. |request_type| is passed in to specify the process that @@ -510,11 +513,15 @@ // same as the last committed URL on the RenderFrameHost. bool HasDonePreclassificationCheckOnSameURL( ClientSideDetectionType client_side_detection_type); + bool HasDonePreclassificationCheckOnSameURL( + ClientSideDetectionType client_side_detection_type, + std::optional<std::string> credit_card_form_event); // OnCreditCardFormEvent is a common method called by Autofill credit card // form events that may trigger a CSD ping. void OnCreditCardFormEvent( std::string event_name, + bool allow_ping, credit_card_form::FieldDetectionHeuristic field_heuristic); // OnCreditCardFormVisitCount is a callback that is called when site @@ -523,6 +530,7 @@ // ping. void OnCreditCardFormVisitCount( std::string event_name, + bool allow_ping, std::optional<base::TimeTicks> start_time, credit_card_form::FieldDetectionHeuristic field_heuristic, history::VisibleVisitCountToHostResult history_result); @@ -611,6 +619,11 @@ // it can be triggered at a frequent basis per same URL. base::flat_map<ClientSideDetectionType, GURL> last_committed_url_map_; + // This map is used to track the last committed URL per credit card form + // event trigger that may trigger a CREDIT_CARD_FORM ping. + base::flat_map<std::string, GURL> + last_credit_card_form_event_trigger_url_map_; + base::ScopedObservation<AsyncCheckTracker, AsyncCheckTracker::Observer> async_check_observation_{this};
diff --git a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_unittest.cc b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_unittest.cc index 0d203df..cdfdc55 100644 --- a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_unittest.cc +++ b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_unittest.cc
@@ -47,15 +47,8 @@ TestingTailoredSecurityService( scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, PrefService* prefs, - syncer::SyncService* sync_service) - // NOTE: Simply pass null object for IdentityManager and SyncService. - // TailoredSecurityService's only usage of this object is to fetch access - // tokens via RequestImpl, and TestingTailoredSecurityService deliberately - // replaces this flow with TestRequest. - : TailoredSecurityService(/*identity_manager=*/nullptr, - /*sync_service=*/sync_service, - prefs), - url_loader_factory_(url_loader_factory) {} + syncer::SyncService* sync_service); + ~TestingTailoredSecurityService() override; std::unique_ptr<TailoredSecurityService::Request> CreateRequest( @@ -136,8 +129,6 @@ scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; }; -TestingTailoredSecurityService::~TestingTailoredSecurityService() = default; - // A testing request class that allows expected values to be filled in. class TestRequest : public TailoredSecurityService::Request { public: @@ -200,6 +191,21 @@ bool is_shut_down_ = false; }; +TestingTailoredSecurityService::TestingTailoredSecurityService( + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + PrefService* prefs, + syncer::SyncService* sync_service) + // NOTE: Simply pass null object for IdentityManager and SyncService. + // TailoredSecurityService's only usage of this object is to fetch access + // tokens via RequestImpl, and TestingTailoredSecurityService deliberately + // replaces this flow with TestRequest. + : TailoredSecurityService(/*identity_manager=*/nullptr, + /*sync_service=*/sync_service, + prefs), + url_loader_factory_(url_loader_factory) {} + +TestingTailoredSecurityService::~TestingTailoredSecurityService() = default; + // Overrides the production `CreateRequest` to support two modes of operation // for testing: //
diff --git a/components/safe_browsing/core/common/OWNERS b/components/safe_browsing/core/common/OWNERS index 5e84e2a..3611e22 100644 --- a/components/safe_browsing/core/common/OWNERS +++ b/components/safe_browsing/core/common/OWNERS
@@ -5,3 +5,4 @@ per-file features.cc=file://components/safe_browsing/core/common/SAFE_BROWSING_FEATURE_OWNERS per-file features.h=file://components/safe_browsing/core/common/SAFE_BROWSING_FEATURE_OWNERS +per-file proto/csd.proto=file://components/safe_browsing/core/common/SAFE_BROWSING_FEATURE_OWNERS
diff --git a/components/safe_browsing/core/common/features.cc b/components/safe_browsing/core/common/features.cc index 88a1ad08..c35dc990 100644 --- a/components/safe_browsing/core/common/features.cc +++ b/components/safe_browsing/core/common/features.cc
@@ -86,6 +86,12 @@ const base::FeatureParam<int> kCsdCreditCardFormMaxUserVisit{ &kClientSideDetectionCreditCardForm, "MaxUserVisit", /*default_value=*/1}; +const base::FeatureParam<bool> kCsdCreditCardFormPingOnDetection{ + &kClientSideDetectionCreditCardForm, "PingOnDetection", + /*default_value=*/false}; +const base::FeatureParam<bool> kCsdCreditCardFormPingOnInteraction{ + &kClientSideDetectionCreditCardForm, "PingOnInteraction", + /*default_value=*/false}; BASE_FEATURE(kClientSideDetectionForcedLlamaRedirectChainKillswitch, base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/components/safe_browsing/core/common/features.h b/components/safe_browsing/core/common/features.h index 1017f293..7ced7b8 100644 --- a/components/safe_browsing/core/common/features.h +++ b/components/safe_browsing/core/common/features.h
@@ -73,6 +73,12 @@ // If the user has visited more times than this max, then the CSD ping is // blocked. extern const base::FeatureParam<int> kCsdCreditCardFormMaxUserVisit; +// Specifies whether to allow pre-classification to continue on a credit card +// form detection event after logging telemetry. +extern const base::FeatureParam<bool> kCsdCreditCardFormPingOnDetection; +// Specifies whether to allow pre-classification to continue on a credit card +// form interaction event after logging telemetry. +extern const base::FeatureParam<bool> kCsdCreditCardFormPingOnInteraction; // Killswitch for Llama forced trigger info redirect chain check. BASE_DECLARE_FEATURE(kClientSideDetectionForcedLlamaRedirectChainKillswitch);
diff --git a/components/services/storage/dom_storage/dom_storage_database.h b/components/services/storage/dom_storage/dom_storage_database.h index 443e9a1..5a90630 100644 --- a/components/services/storage/dom_storage/dom_storage_database.h +++ b/components/services/storage/dom_storage/dom_storage_database.h
@@ -151,7 +151,6 @@ virtual DbStatus RewriteDB() = 0; // Test-only functions. - virtual bool ShouldFailAllCommits() = 0; virtual void MakeAllCommitsFailForTesting() = 0; virtual void SetDestructionCallbackForTesting(base::OnceClosure callback) = 0; };
diff --git a/components/services/storage/dom_storage/leveldb/dom_storage_batch_operation_leveldb.cc b/components/services/storage/dom_storage/leveldb/dom_storage_batch_operation_leveldb.cc index 3c0a5c6..b5832889 100644 --- a/components/services/storage/dom_storage/leveldb/dom_storage_batch_operation_leveldb.cc +++ b/components/services/storage/dom_storage/leveldb/dom_storage_batch_operation_leveldb.cc
@@ -87,7 +87,7 @@ if (!database_ || !db) { return DbStatus::IOError(kInvalidDatabaseMessage); } - if (database_->ShouldFailAllCommits()) { + if (database_->ShouldFailAllCommitsForTesting()) { return DbStatus::IOError("Simulated I/O Error"); } return FromLevelDBStatus(db->Write(leveldb::WriteOptions(), &write_batch_));
diff --git a/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.cc b/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.cc index 1b0c4bb..9a1b7b5 100644 --- a/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.cc +++ b/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.cc
@@ -221,8 +221,8 @@ return FromLevelDBStatus(status); } -bool DomStorageDatabaseLevelDB::ShouldFailAllCommits() { - return fail_all_commits_; +bool DomStorageDatabaseLevelDB::ShouldFailAllCommitsForTesting() { + return fail_all_commits_for_testing_; } void DomStorageDatabaseLevelDB::SetDestructionCallbackForTesting( @@ -231,7 +231,7 @@ } void DomStorageDatabaseLevelDB::MakeAllCommitsFailForTesting() { - fail_all_commits_ = true; + fail_all_commits_for_testing_ = true; } // This can only be called from `DomStorageBatchOperationLevelDB`.
diff --git a/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.h b/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.h index 3fe1d844..b115e40 100644 --- a/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.h +++ b/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.h
@@ -66,7 +66,7 @@ DbStatus RewriteDB(); - bool ShouldFailAllCommits(); + bool ShouldFailAllCommitsForTesting(); void SetDestructionCallbackForTesting(base::OnceClosure callback); void MakeAllCommitsFailForTesting(); @@ -127,9 +127,9 @@ memory_dump_id_; std::unique_ptr<leveldb::DB> db_; - // If true, all calls to `Commit()` fail with an IOError. This should only be - // set in tests to simulate disk failures. - bool fail_all_commits_ = false; + // If true, all calls to `DomStorageBatchOperationLevelDB::Commit()` fail with + // an IOError. This should only be set in tests to simulate disk failures. + bool fail_all_commits_for_testing_ = false; // Callback to run on destruction in tests. base::OnceClosure destruction_callback_;
diff --git a/components/services/storage/dom_storage/leveldb/local_storage_leveldb.cc b/components/services/storage/dom_storage/leveldb/local_storage_leveldb.cc index 752b8f8..179f921 100644 --- a/components/services/storage/dom_storage/leveldb/local_storage_leveldb.cc +++ b/components/services/storage/dom_storage/leveldb/local_storage_leveldb.cc
@@ -259,10 +259,6 @@ return leveldb_->RewriteDB(); } -bool LocalStorageLevelDB::ShouldFailAllCommits() { - return leveldb_->ShouldFailAllCommits(); -} - void LocalStorageLevelDB::MakeAllCommitsFailForTesting() { leveldb_->MakeAllCommitsFailForTesting(); }
diff --git a/components/services/storage/dom_storage/leveldb/local_storage_leveldb.h b/components/services/storage/dom_storage/leveldb/local_storage_leveldb.h index 7efa401..039ea95a 100644 --- a/components/services/storage/dom_storage/leveldb/local_storage_leveldb.h +++ b/components/services/storage/dom_storage/leveldb/local_storage_leveldb.h
@@ -133,7 +133,6 @@ DbStatus RewriteDB() override; // Test-only functions. - bool ShouldFailAllCommits() override; void MakeAllCommitsFailForTesting() override; void SetDestructionCallbackForTesting(base::OnceClosure callback) override;
diff --git a/components/services/storage/dom_storage/leveldb/session_storage_leveldb.cc b/components/services/storage/dom_storage/leveldb/session_storage_leveldb.cc index 09cdb9f..78388dd 100644 --- a/components/services/storage/dom_storage/leveldb/session_storage_leveldb.cc +++ b/components/services/storage/dom_storage/leveldb/session_storage_leveldb.cc
@@ -133,10 +133,6 @@ return leveldb_->RewriteDB(); } -bool SessionStorageLevelDB::ShouldFailAllCommits() { - return leveldb_->ShouldFailAllCommits(); -} - void SessionStorageLevelDB::MakeAllCommitsFailForTesting() { leveldb_->MakeAllCommitsFailForTesting(); }
diff --git a/components/services/storage/dom_storage/leveldb/session_storage_leveldb.h b/components/services/storage/dom_storage/leveldb/session_storage_leveldb.h index 09416e2..54ffbc17 100644 --- a/components/services/storage/dom_storage/leveldb/session_storage_leveldb.h +++ b/components/services/storage/dom_storage/leveldb/session_storage_leveldb.h
@@ -87,7 +87,6 @@ DbStatus RewriteDB() override; // Test-only functions. - bool ShouldFailAllCommits() override; void MakeAllCommitsFailForTesting() override; void SetDestructionCallbackForTesting(base::OnceClosure callback) override;
diff --git a/components/signin/public/android/BUILD.gn b/components/signin/public/android/BUILD.gn index d6b0dea..2e7a96b 100644 --- a/components/signin/public/android/BUILD.gn +++ b/components/signin/public/android/BUILD.gn
@@ -13,6 +13,7 @@ "//google_apis/gaia/android:java", "//net/android:net_java", "//third_party/android_deps:chromium_play_services_availability_java", + "//third_party/android_deps:com_google_errorprone_error_prone_annotations_java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/jni_zero:jni_zero_java", ]
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountInfo.java b/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountInfo.java index 7e12097..c05a53e5d 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountInfo.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountInfo.java
@@ -7,6 +7,8 @@ import android.graphics.Bitmap; import android.text.TextUtils; +import com.google.errorprone.annotations.DoNotMock; + import org.jni_zero.CalledByNative; import org.jni_zero.JniType; @@ -23,9 +25,10 @@ /** * Stores all the information known about an account. * - * This class has a native counterpart called AccountInfo. + * <p>This class has a native counterpart called AccountInfo. */ @NullMarked +@DoNotMock("Use TestAccounts or create a real instance.") public class AccountInfo extends CoreAccountInfo { /** Used to instantiate `AccountInfo`. */ public static class Builder {
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java b/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java index f35a9628..ed40669 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java
@@ -6,6 +6,8 @@ import android.accounts.Account; +import com.google.errorprone.annotations.DoNotMock; + import org.jni_zero.CalledByNative; import org.jni_zero.JniType; @@ -24,6 +26,7 @@ * <p>This class has a native counterpart called CoreAccountInfo. */ @NullMarked +@DoNotMock("Use TestAccounts or create a real instance.") public class CoreAccountInfo { private final CoreAccountId mId; private final String mEmail;
diff --git a/components/signin/public/base/signin_prefs.cc b/components/signin/public/base/signin_prefs.cc index f06a8f4..a827f1a 100644 --- a/components/signin/public/base/signin_prefs.cc +++ b/components/signin/public/base/signin_prefs.cc
@@ -49,6 +49,11 @@ constexpr char kChromeSigninInterceptionRepromptCount[] = "ChromeSigninInterceptionRepromptCount"; +// Same as kChromeSigninInterceptionRepromptCount, different value to be used in +// SigninPromoLimitsExperiment. +constexpr char kChromeSigninInterceptionRepromptCountForLimitsExperiment[] = + "ChromeSigninInterceptionRepromptCountForLimitsExperiment"; + // Pref used to store the number of dismisses of the Chrome Signin Bubble. It // is tied to an account, stored as the content of a dictionary mapped by the // gaia id of the account. @@ -250,16 +255,24 @@ int SigninPrefs::IncrementChromeSigninBubbleRepromptCount( const GaiaId& gaia_id) { - return IncrementIntPrefForAccount(gaia_id, - kChromeSigninInterceptionRepromptCount); + return IncrementIntPrefForAccount( + gaia_id, + base::FeatureList::IsEnabled(switches::kSigninPromoLimitsExperiment) + ? kChromeSigninInterceptionRepromptCountForLimitsExperiment + : kChromeSigninInterceptionRepromptCount); } int SigninPrefs::GetChromeSigninBubbleRepromptCount( const GaiaId& gaia_id) const { - return GetIntPrefForAccount(gaia_id, kChromeSigninInterceptionRepromptCount); + return GetIntPrefForAccount( + gaia_id, + base::FeatureList::IsEnabled(switches::kSigninPromoLimitsExperiment) + ? kChromeSigninInterceptionRepromptCountForLimitsExperiment + : kChromeSigninInterceptionRepromptCount); } void SigninPrefs::ClearChromeSigninBubbleRepromptCount(const GaiaId& gaia_id) { + ClearPref(gaia_id, kChromeSigninInterceptionRepromptCountForLimitsExperiment); ClearPref(gaia_id, kChromeSigninInterceptionRepromptCount); }
diff --git a/components/signin/public/base/signin_switches.cc b/components/signin/public/base/signin_switches.cc index d17b0f3..d57f0c8c 100644 --- a/components/signin/public/base/signin_switches.cc +++ b/components/signin/public/base/signin_switches.cc
@@ -350,6 +350,9 @@ BASE_FEATURE(kProfileCreationDeclineSigninCTAExperiment, base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kProfileCreationFrictionReductionExperiment, + base::FEATURE_DISABLED_BY_DEFAULT); + BASE_FEATURE(kProfilePickerTextVariations, base::FEATURE_DISABLED_BY_DEFAULT); constexpr base::FeatureParam<ProfilePickerVariation>::Option kProfilePickerVariations[] = { @@ -464,6 +467,24 @@ base::FEATURE_DISABLED_BY_DEFAULT); #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) +constexpr base::FeatureParam<ProfileCreationFrictionReductionVariation>::Option + kProfileCreationFrictionReductionVariations[] = { + {ProfileCreationFrictionReductionVariation::kRemoveSigninStep, + "remove-signin-step"}, + {ProfileCreationFrictionReductionVariation::kPrefillNameRequirement, + "prefill-name-requirement"}, + {ProfileCreationFrictionReductionVariation::kSkipCustomizeProfileStep, + "skip-customize-profile-step"}, +}; +constexpr base::FeatureParam<ProfileCreationFrictionReductionVariation> + kProfileCreationFrictionReductionVariation{ + &kProfileCreationFrictionReductionExperiment, + "profile-creation-friction-reduction-variation", + ProfileCreationFrictionReductionVariation::kRemoveSigninStep, + &kProfileCreationFrictionReductionVariations}; +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) + // keep-sorted end bool IsExtensionsExplicitBrowserSigninEnabled() {
diff --git a/components/signin/public/base/signin_switches.h b/components/signin/public/base/signin_switches.h index 0fa9b4ab..92e07fe4 100644 --- a/components/signin/public/base/signin_switches.h +++ b/components/signin/public/base/signin_switches.h
@@ -295,6 +295,11 @@ COMPONENT_EXPORT(SIGNIN_SWITCHES) BASE_DECLARE_FEATURE(kProfileCreationDeclineSigninCTAExperiment); +// Experimenting with removing steps in the profile creation flow to reduce +// friction. +COMPONENT_EXPORT(SIGNIN_SWITCHES) +BASE_DECLARE_FEATURE(kProfileCreationFrictionReductionExperiment); + // Enables variations of the profile picker text. COMPONENT_EXPORT(SIGNIN_SWITCHES) BASE_DECLARE_FEATURE(kProfilePickerTextVariations); @@ -410,6 +415,18 @@ kSeamlessSigninStringType; #endif // BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) +// Experimenting with variations of flow change. +enum class ProfileCreationFrictionReductionVariation { + kRemoveSigninStep = 0, + kPrefillNameRequirement = 1, + kSkipCustomizeProfileStep = 2, +}; +COMPONENT_EXPORT(SIGNIN_SWITCHES) +extern const base::FeatureParam<ProfileCreationFrictionReductionVariation> + kProfileCreationFrictionReductionVariation; +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) + // keep-sorted end // Helper functions that are no longer attached to any features.
diff --git a/components/sync/base/user_selectable_type.cc b/components/sync/base/user_selectable_type.cc index e7cd6eb..ac1a66c 100644 --- a/components/sync/base/user_selectable_type.cc +++ b/components/sync/base/user_selectable_type.cc
@@ -78,11 +78,6 @@ kSyncSupportAlwaysSyncingPriorityPreferences)) { types.Put(PRIORITY_PREFERENCES); } - if ((!skip_feature_checks_if_early || base::FeatureList::GetInstance()) && - base::FeatureList::IsEnabled( - kSpellcheckSeparateLocalAndAccountDictionaries)) { - types.Remove(DICTIONARY); - } return {kPreferencesTypeName, PREFERENCES, types}; } case UserSelectableType::kPasswords: @@ -97,17 +92,10 @@ {AUTOFILL, AUTOFILL_PROFILE, CONTACT_INFO}}; case UserSelectableType::kThemes: return {kThemesTypeName, THEMES, {THEMES}}; - case UserSelectableType::kHistory: { - DataTypeSet types = {HISTORY, HISTORY_DELETE_DIRECTIVES, USER_EVENTS}; - // With `kSpellcheckSeparateLocalAndAccountDictionaries` enabled, - // `DICTIONARY` is controlled by the History opt-in. - if ((!skip_feature_checks_if_early || base::FeatureList::GetInstance()) && - base::FeatureList::IsEnabled( - kSpellcheckSeparateLocalAndAccountDictionaries)) { - types.Put(DICTIONARY); - } - return {kHistoryTypeName, HISTORY, types}; - } + case UserSelectableType::kHistory: + return {kHistoryTypeName, + HISTORY, + {HISTORY, HISTORY_DELETE_DIRECTIVES, USER_EVENTS}}; case UserSelectableType::kExtensions: return { kExtensionsTypeName, EXTENSIONS, {EXTENSIONS, EXTENSION_SETTINGS}};
diff --git a/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json b/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json index 8e88645..b7a90dc 100644 --- a/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json +++ b/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json
@@ -1733,11 +1733,9 @@ "resources": [ 26 ], "secure_output_only": false, "shared_quad_state_index": 0, - "uv_bottom_right": { - "x": 1.0, - "y": 1.0 - }, - "uv_top_left": { + "tex_coord_rect": { + "height": 1.0, + "width": 1.0, "x": 0.0, "y": 0.0 }, @@ -1769,11 +1767,9 @@ "resources": [ 25 ], "secure_output_only": false, "shared_quad_state_index": 0, - "uv_bottom_right": { - "x": 1.0, - "y": 1.0 - }, - "uv_top_left": { + "tex_coord_rect": { + "height": 1.0, + "width": 1.0, "x": 0.0, "y": 0.0 }, @@ -2227,11 +2223,9 @@ "resources": [ 35 ], "secure_output_only": false, "shared_quad_state_index": 1, - "uv_bottom_right": { - "x": 1.0, - "y": 1.0 - }, - "uv_top_left": { + "tex_coord_rect": { + "height": 1.0, + "width": 1.0, "x": 0.0, "y": 0.0 }, @@ -2263,11 +2257,9 @@ "resources": [ 34 ], "secure_output_only": false, "shared_quad_state_index": 1, - "uv_bottom_right": { - "x": 1.0, - "y": 1.0 - }, - "uv_top_left": { + "tex_coord_rect": { + "height": 1.0, + "width": 1.0, "x": 0.0, "y": 0.0 }, @@ -2299,11 +2291,9 @@ "resources": [ 33 ], "secure_output_only": false, "shared_quad_state_index": 2, - "uv_bottom_right": { - "x": 1.0, - "y": 1.0 - }, - "uv_top_left": { + "tex_coord_rect": { + "height": 1.0, + "width": 1.0, "x": 0.0, "y": 0.0 }, @@ -2335,11 +2325,9 @@ "resources": [ 32 ], "secure_output_only": false, "shared_quad_state_index": 2, - "uv_bottom_right": { - "x": 1.0, - "y": 1.0 - }, - "uv_top_left": { + "tex_coord_rect": { + "height": 1.0, + "width": 1.0, "x": 0.0, "y": 0.0 }, @@ -4298,11 +4286,9 @@ "resources": [ 54 ], "secure_output_only": false, "shared_quad_state_index": 0, - "uv_bottom_right": { - "x": 1.0, - "y": 1.0 - }, - "uv_top_left": { + "tex_coord_rect": { + "height": 1.0, + "width": 1.0, "x": 0.0, "y": 0.0 },
diff --git a/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json b/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json index bfb5bdd..a3b5a87a 100644 --- a/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json +++ b/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json
@@ -1362,11 +1362,9 @@ "resources": [ 566 ], "secure_output_only": false, "shared_quad_state_index": 2, - "uv_bottom_right": { - "x": 1.0, - "y": 1.0 - }, - "uv_top_left": { + "tex_coord_rect": { + "height": 1.0, + "width": 1.0, "x": 0.0, "y": 0.0 }, @@ -1398,11 +1396,9 @@ "resources": [ 567 ], "secure_output_only": false, "shared_quad_state_index": 2, - "uv_bottom_right": { - "x": 1.0, - "y": 1.0 - }, - "uv_top_left": { + "tex_coord_rect": { + "height": 1.0, + "width": 1.0, "x": 0.0, "y": 0.0 },
diff --git a/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc b/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc index f3c045e..6b1d36d2 100644 --- a/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc +++ b/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc
@@ -31,6 +31,7 @@ #include "base/files/file_util.h" #include "base/i18n/icu_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/path_service.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h"
diff --git a/components/url_formatter/spoof_checks/top_domains/top_domain_generator.cc b/components/url_formatter/spoof_checks/top_domains/top_domain_generator.cc index f0f45d0..58e7c49 100644 --- a/components/url_formatter/spoof_checks/top_domains/top_domain_generator.cc +++ b/components/url_formatter/spoof_checks/top_domains/top_domain_generator.cc
@@ -19,6 +19,7 @@ #include "base/files/file_util.h" #include "base/i18n/icu_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/path_service.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h"
diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc index a3d4219..230ac39e6c1 100644 --- a/components/viz/common/features.cc +++ b/components/viz/common/features.cc
@@ -102,7 +102,7 @@ // can be split into during occlusion culling. BASE_FEATURE(kDrawQuadSplitLimit, base::FEATURE_DISABLED_BY_DEFAULT); -BASE_FEATURE(kEnableBackdropFiltersCullingOptimization, +BASE_FEATURE(kEnableRenderPassDrawQuadCullingOptimization, base::FEATURE_ENABLED_BY_DEFAULT); constexpr base::FeatureParam<DelegatedCompositingMode>::Option @@ -402,17 +402,17 @@ kMaxDrawQuadSplitLimit); } +bool IsRenderPassDrawQuadCullingOptimizationEnabled() { + static bool is_enabled = base::FeatureList::IsEnabled( + kEnableRenderPassDrawQuadCullingOptimization); + return is_enabled; +} + bool IsBackForwardTransitionsSameDocSharedImageEnabled() { return base::FeatureList::IsEnabled( kBackForwardTransitionsSameDocSharedImage); } -bool IsBackdropFiltersCullingOptimizationEnabled() { - static bool is_enabled = - base::FeatureList::IsEnabled(kEnableBackdropFiltersCullingOptimization); - return is_enabled; -} - bool IsDelegatedCompositingEnabled() { return base::FeatureList::IsEnabled(kDelegatedCompositing); }
diff --git a/components/viz/common/features.h b/components/viz/common/features.h index 484cf73..b47b1b8 100644 --- a/components/viz/common/features.h +++ b/components/viz/common/features.h
@@ -38,7 +38,7 @@ VIZ_COMMON_EXPORT BASE_DECLARE_FEATURE(kDrawQuadSplitLimit); VIZ_COMMON_EXPORT BASE_DECLARE_FEATURE( - kEnableBackdropFiltersCullingOptimization); + kEnableRenderPassDrawQuadCullingOptimization); enum class DelegatedCompositingMode { // Enable delegated compositing. @@ -156,8 +156,8 @@ VIZ_COMMON_EXPORT BASE_DECLARE_FEATURE(kDisplaySchedulerAsClient); VIZ_COMMON_EXPORT int DrawQuadSplitLimit(); +VIZ_COMMON_EXPORT bool IsRenderPassDrawQuadCullingOptimizationEnabled(); VIZ_COMMON_EXPORT bool IsBackForwardTransitionsSameDocSharedImageEnabled(); -VIZ_COMMON_EXPORT bool IsBackdropFiltersCullingOptimizationEnabled(); VIZ_COMMON_EXPORT bool IsDelegatedCompositingEnabled(); VIZ_COMMON_EXPORT bool IsVizDirectCompositorThreadIpcNonRootEnabled(); VIZ_COMMON_EXPORT bool IsVizDirectCompositorThreadIpcFrameSinkManagerEnabled();
diff --git a/components/viz/common/quads/draw_quad_unittest.cc b/components/viz/common/quads/draw_quad_unittest.cc index 03afcb0..ec2dc06 100644 --- a/components/viz/common/quads/draw_quad_unittest.cc +++ b/components/viz/common/quads/draw_quad_unittest.cc
@@ -32,6 +32,9 @@ #include "components/viz/common/resources/resource_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/gfx/geometry/rect.h" +#include "ui/gfx/geometry/rect_f.h" +#include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/transform.h" #include "ui/gfx/hdr_metadata.h" #include "ui/gfx/video_types.h" @@ -292,8 +295,8 @@ gfx::Rect visible_rect(40, 50, 30, 20); bool blending = true; ResourceId resource_id(82); - gfx::PointF uv_top_left(0.5f, 224.f); - gfx::PointF uv_bottom_right(51.5f, 260.f); + const gfx::RectF tex_coord_rect = + BoundingRect(gfx::PointF(0.5f, 224.f), gfx::PointF(51.5f, 260.f)); bool nearest_neighbor = true; bool secure_output_only = true; gfx::ProtectedVideoType protected_video_type = @@ -301,25 +304,24 @@ CREATE_SHARED_STATE(); CREATE_QUAD_NEW(TextureDrawQuad, visible_rect, blending, resource_id, - uv_top_left, uv_bottom_right, SkColors::kTransparent, - nearest_neighbor, secure_output_only, protected_video_type); + tex_coord_rect.origin(), tex_coord_rect.bottom_right(), + SkColors::kTransparent, nearest_neighbor, secure_output_only, + protected_video_type); EXPECT_EQ(DrawQuad::Material::kTextureContent, copy_quad->material); EXPECT_EQ(visible_rect, copy_quad->visible_rect); EXPECT_EQ(blending, copy_quad->needs_blending); EXPECT_EQ(resource_id, copy_quad->resource_id); - EXPECT_EQ(uv_top_left, copy_quad->uv_top_left); - EXPECT_EQ(uv_bottom_right, copy_quad->uv_bottom_right); + EXPECT_EQ(tex_coord_rect, copy_quad->GetNormalizedTexCoords(gfx::Size(1, 1))); EXPECT_EQ(nearest_neighbor, copy_quad->nearest_neighbor); EXPECT_EQ(secure_output_only, copy_quad->secure_output_only); EXPECT_EQ(protected_video_type, copy_quad->protected_video_type); - CREATE_QUAD_ALL(TextureDrawQuad, resource_id, uv_top_left, uv_bottom_right, - SkColors::kTransparent, nearest_neighbor, secure_output_only, - protected_video_type); + CREATE_QUAD_ALL(TextureDrawQuad, resource_id, tex_coord_rect.origin(), + tex_coord_rect.bottom_right(), SkColors::kTransparent, + nearest_neighbor, secure_output_only, protected_video_type); EXPECT_EQ(DrawQuad::Material::kTextureContent, copy_quad->material); EXPECT_EQ(resource_id, copy_quad->resource_id); - EXPECT_EQ(uv_top_left, copy_quad->uv_top_left); - EXPECT_EQ(uv_bottom_right, copy_quad->uv_bottom_right); + EXPECT_EQ(tex_coord_rect, copy_quad->GetNormalizedTexCoords(gfx::Size(1, 1))); EXPECT_EQ(nearest_neighbor, copy_quad->nearest_neighbor); EXPECT_EQ(secure_output_only, copy_quad->secure_output_only); EXPECT_EQ(protected_video_type, copy_quad->protected_video_type);
diff --git a/components/viz/common/quads/render_pass_io.cc b/components/viz/common/quads/render_pass_io.cc index 90f37a63..f1a3e272 100644 --- a/components/viz/common/quads/render_pass_io.cc +++ b/components/viz/common/quads/render_pass_io.cc
@@ -1242,6 +1242,11 @@ dict->Set("allow_merge", draw_quad->allow_merge); } +} // namespace + +// TODO(crbug.com/451876192): Move this function back into an anonymous +// namespace after the refactor to to make TextureDrawQuad use unnormalized +// coordinates is complete void TextureDrawQuadToDict(const TextureDrawQuad* draw_quad, base::Value::Dict* dict) { DCHECK(draw_quad); @@ -1249,8 +1254,7 @@ // Set premultiplied_alpha to not break backwards-compatibility with unit test // data. dict->Set("premultiplied_alpha", true); - dict->Set("uv_top_left", PointFToDict(draw_quad->uv_top_left)); - dict->Set("uv_bottom_right", PointFToDict(draw_quad->uv_bottom_right)); + dict->Set("tex_coord_rect", RectFToDict(draw_quad->tex_coord_rect_)); dict->Set("background_color", SkColor4fToDict(draw_quad->background_color)); // TODO(crbug.com/40942150): Update // "components/test/data/viz/render_pass_data/" to reflect the deprecation of @@ -1266,6 +1270,8 @@ } } +namespace { + void TileDrawQuadToDict(const TileDrawQuad* draw_quad, base::Value::Dict* dict) { DCHECK(draw_quad); @@ -1434,8 +1440,7 @@ TextureDrawQuad* draw_quad) { DCHECK(draw_quad); - const base::Value::Dict* uv_top_left = dict.FindDict("uv_top_left"); - const base::Value::Dict* uv_bottom_right = dict.FindDict("uv_bottom_right"); + const base::Value::Dict* tex_coord_rect = dict.FindDict("tex_coord_rect"); // TODO(crbug.com/40942150): Update // "components/test/data/viz/render_pass_data/" to reflect the deprecation of // vertex opacity. @@ -1446,18 +1451,17 @@ const std::string* protected_video_type = dict.FindString("protected_video_type"); - if (!uv_top_left || !uv_bottom_right || !vertex_opacity || - !nearest_neighbor || !secure_output_only || !protected_video_type) { + if (!tex_coord_rect || !vertex_opacity || !nearest_neighbor || + !secure_output_only || !protected_video_type) { return false; } int protected_video_type_index = StringToProtectedVideoType(*protected_video_type); if (protected_video_type_index < 0) return false; - gfx::PointF t_uv_top_left, t_uv_bottom_right; + gfx::RectF t_tex_coord_rect; SkColor4f t_background_color; - if (!PointFFromDict(*uv_top_left, &t_uv_top_left) || - !PointFFromDict(*uv_bottom_right, &t_uv_bottom_right) || + if (!RectFFromDict(*tex_coord_rect, &t_tex_coord_rect) || !ColorFromDict(dict, "background_color", &t_background_color)) { return false; } @@ -1465,8 +1469,9 @@ ResourceId resource_id = common.resource_id; draw_quad->SetAll( common.shared_quad_state, common.rect, common.visible_rect, - common.needs_blending, resource_id, t_uv_top_left, t_uv_bottom_right, - t_background_color, nearest_neighbor.value(), secure_output_only.value(), + common.needs_blending, resource_id, t_tex_coord_rect.origin(), + t_tex_coord_rect.bottom_right(), t_background_color, + nearest_neighbor.value(), secure_output_only.value(), static_cast<gfx::ProtectedVideoType>(protected_video_type_index)); gfx::Rect t_damage_rect;
diff --git a/components/viz/common/quads/texture_draw_quad.cc b/components/viz/common/quads/texture_draw_quad.cc index d34e1a3..9a16f504 100644 --- a/components/viz/common/quads/texture_draw_quad.cc +++ b/components/viz/common/quads/texture_draw_quad.cc
@@ -47,8 +47,7 @@ DrawQuad::SetAll(shared_quad_state, DrawQuad::Material::kTextureContent, rect, visible_rect, needs_blending); resource_id = resource; - uv_top_left = top_left; - uv_bottom_right = bottom_right; + tex_coord_rect_ = gfx::BoundingRect(top_left, bottom_right); background_color = background; nearest_neighbor = nearest; secure_output_only = secure_output; @@ -70,8 +69,7 @@ DrawQuad::SetAll(shared_quad_state, DrawQuad::Material::kTextureContent, rect, visible_rect, needs_blending); resource_id = resource; - uv_top_left = top_left; - uv_bottom_right = bottom_right; + tex_coord_rect_ = gfx::BoundingRect(top_left, bottom_right); background_color = background; nearest_neighbor = nearest; secure_output_only = secure_output; @@ -84,8 +82,7 @@ } void TextureDrawQuad::ExtendValue(base::trace_event::TracedValue* value) const { - cc::MathUtil::AddToTracedValue("uv_top_left", uv_top_left, value); - cc::MathUtil::AddToTracedValue("uv_bottom_right", uv_bottom_right, value); + cc::MathUtil::AddToTracedValue("tex_coord_rect", tex_coord_rect_, value); value->SetString("background_color", color_utils::SkColor4fToRgbaString(background_color)); value->SetString("dynamic_range_limit", dynamic_range_limit.ToString());
diff --git a/components/viz/common/quads/texture_draw_quad.h b/components/viz/common/quads/texture_draw_quad.h index 135fdb7..aa538d86 100644 --- a/components/viz/common/quads/texture_draw_quad.h +++ b/components/viz/common/quads/texture_draw_quad.h
@@ -8,6 +8,7 @@ #include <array> #include <optional> +#include "base/values.h" #include "cc/paint/paint_flags.h" #include "components/viz/common/quads/draw_quad.h" #include "components/viz/common/resources/resource_id.h" @@ -16,7 +17,15 @@ #include "ui/gfx/geometry/rect.h" #include "ui/gfx/video_types.h" +namespace mojo { +template <typename DataViewType, typename T> +struct StructTraits; +} + namespace viz { +namespace mojom { +class TextureQuadStateDataView; +} // The priority for a quads to require being promoted to overlay. enum class OverlayPriority { kLow, kRegular, kRequired }; @@ -54,8 +63,35 @@ bool secure_output, gfx::ProtectedVideoType video_type); - gfx::PointF uv_top_left; - gfx::PointF uv_bottom_right; + // Returns the texture coordinates in the range [0, 1]. + gfx::RectF GetNormalizedTexCoords(const gfx::Size& resource_size) const { + // TODO(crbug.com/451876192): This parameter is currently unused because + // tex_coord_rect_ is always normalized. It is included here to prepare for + // the next CL where tex_coord_rect_ may be unnormalized, requiring + // resource_size to perform the normalization. + return tex_coord_rect_; + } + + // Returns the texture coordinates in the range [0, resource_size]. + gfx::RectF GetUnnormalizedTexCoords(const gfx::Size& resource_size) const { + // tex_coord_rect_ is currently always normalized, so we must scale it. + // In the future, if the internal storage becomes unnormalized, this will + // simply return tex_coord_rect_ directly. + return gfx::ScaleRect(tex_coord_rect_, + static_cast<float>(resource_size.width()), + static_cast<float>(resource_size.height())); + } + + // Sets the texture coordinates in the range [0, 1]. + void SetNormalizedTexCoordsForTesting(const gfx::RectF& normalized_rect, + const gfx::Size& resource_size) { + // TODO(crbug.com/451876192): This parameter is unused because the internal + // storage is currently normalized. It is included to establish the API + // for the future CL where we will need to scale the input `normalized_rect` + // by `resource_size` to store it as unnormalized coordinates. + tex_coord_rect_ = normalized_rect; + } + SkColor4f background_color = SkColors::kTransparent; cc::PaintFlags::DynamicRangeLimitMixture dynamic_range_limit; bool nearest_neighbor : 1; @@ -129,6 +165,14 @@ static const TextureDrawQuad* MaterialCast(const DrawQuad*); private: + // TODO(crbug.com/451876192): Remove friend classes after the refactor + // to make TextureDrawQuad use unnormalized coordinates is complete + friend struct mojo::StructTraits<mojom::TextureQuadStateDataView, DrawQuad>; + friend void TextureDrawQuadToDict(const TextureDrawQuad* draw_quad, + base::Value::Dict* dict); + + gfx::RectF tex_coord_rect_; + void ExtendValue(base::trace_event::TracedValue* value) const override; };
diff --git a/components/viz/service/display/ca_layer_overlay.cc b/components/viz/service/display/ca_layer_overlay.cc index 6efbdbda..0bb35621 100644 --- a/components/viz/service/display/ca_layer_overlay.cc +++ b/components/viz/service/display/ca_layer_overlay.cc
@@ -162,8 +162,8 @@ ca_layer_overlay->transform = transform; } ca_layer_overlay->resource_id = resource_id; - ca_layer_overlay->uv_rect = - BoundingRect(quad->uv_top_left, quad->uv_bottom_right); + ca_layer_overlay->uv_rect = quad->GetNormalizedTexCoords( + resource_provider->GetResourceBackedSize(resource_id)); ca_layer_overlay->color = quad->background_color; ca_layer_overlay->nearest_neighbor_filter = quad->nearest_neighbor; ca_layer_overlay->hdr_metadata =
diff --git a/components/viz/service/display/dc_layer_overlay.cc b/components/viz/service/display/dc_layer_overlay.cc index 51fb27c..926cbfbb0 100644 --- a/components/viz/service/display/dc_layer_overlay.cc +++ b/components/viz/service/display/dc_layer_overlay.cc
@@ -540,7 +540,7 @@ dc_layer.resource_size_in_pixels = resource_provider->GetResourceBackedSize(quad->resource_id); dc_layer.uv_rect = - gfx::BoundingRect(quad->uv_top_left, quad->uv_bottom_right); + quad->GetNormalizedTexCoords(dc_layer.resource_size_in_pixels); dc_layer.display_rect = gfx::RectF(quad->rect); dc_layer.format = resource_provider->GetSharedImageFormat(quad->resource_id); dc_layer.color = quad->background_color;
diff --git a/components/viz/service/display/occlusion_culler.cc b/components/viz/service/display/occlusion_culler.cc index a2170d1..2fea27d 100644 --- a/components/viz/service/display/occlusion_culler.cc +++ b/components/viz/service/display/occlusion_culler.cc
@@ -20,6 +20,7 @@ #include "components/viz/common/quads/draw_quad.h" #include "components/viz/common/quads/shared_quad_state.h" #include "components/viz/common/quads/texture_draw_quad.h" +#include "components/viz/common/viz_utils.h" #include "components/viz/service/display/display_resource_provider.h" #include "components/viz/service/display/overlay_processor_interface.h" #include "ui/gfx/geometry/rect.h" @@ -281,6 +282,9 @@ void OcclusionCuller::RemoveOverdrawQuads(AggregatedFrame* frame) { base::flat_map<AggregatedRenderPassId, gfx::Rect> backdrop_filter_rects; + base::flat_map<AggregatedRenderPassId, raw_ptr<cc::FilterOperations>> + foreground_filters; + for (const auto& pass : frame->render_pass_list) { if (!pass->backdrop_filters.IsEmpty() && pass->backdrop_filters.HasFilterThatMovesPixels()) { @@ -290,6 +294,10 @@ backdrop_filter_rects[pass->id] = cc::MathUtil::MapEnclosingClippedRect( pass->transform_to_root_target, pass->output_rect); } + + if (!pass->filters.IsEmpty() && pass->filters.HasFilterThatMovesPixels()) { + foreground_filters[pass->id] = &pass->filters; + } } for (const auto& pass : frame->render_pass_list) { @@ -297,9 +305,6 @@ bool last_sqs_is_for_rpdq = false; cc::Region occlusion_in_target_space; - // TODO(b:424284352): Remove after - // `kEnableBackdropFiltersCullingOptimization` is enabled by default. - cc::Region backdrop_filters_in_target_space; bool current_sqs_intersects_occlusion = false; // TODO(yiyix): Add filter effects to draw occlusion calculation @@ -314,30 +319,13 @@ } auto quad_list_end = pass->quad_list.end(); - cc::Region occlusion_in_quad_content_space; - // TODO(b:424284352): Remove after - // `kEnableBackdropFiltersCullingOptimization` is enabled by default. - gfx::Rect render_pass_quads_in_content_space; for (auto quad = pass->quad_list.begin(); quad != quad_list_end;) { // Sanity check: we should not have a Compositor // CompositorRenderPassDrawQuad here. DCHECK_NE(quad->material, DrawQuad::Material::kCompositorRenderPass); - if (!features::IsBackdropFiltersCullingOptimizationEnabled()) { - if (auto* rpdq = quad->DynamicCast<AggregatedRenderPassDrawQuad>()) { - auto it = backdrop_filter_rects.find(rpdq->render_pass_id); - if (it != backdrop_filter_rects.end()) { - auto& [_, rect_in_target] = *it; - backdrop_filters_in_target_space.Union(rect_in_target); - } - - ++quad; - continue; - } - } - // Also skip quad if the DrawQuad is inside a 3d object. if (quad->shared_quad_state->sorting_context_id != 0) { ++quad; @@ -383,7 +371,7 @@ } } - if (features::IsBackdropFiltersCullingOptimizationEnabled() && rpdq) { + if (rpdq) { // A RenderPass with backdrop filters may apply to a quad underlying // RenderPassQuad. These regions should be tracked so that correctly // handle splitting and occlusion of the underlying quad. @@ -403,7 +391,6 @@ last_sqs = quad->shared_quad_state; last_sqs_is_for_rpdq = !!rpdq; occlusion_in_quad_content_space.Clear(); - render_pass_quads_in_content_space = gfx::Rect(); const auto current_sqs_in_target_space = cc::MathUtil::MapEnclosingClippedRect( @@ -447,36 +434,34 @@ SafeConvertRectForRegion(rect_in_content)); } } - - // A render pass quad may apply some filter or transform to an - // underlying quad. Do not split quads when they intersect with a - // render pass quad. - if (!features::IsBackdropFiltersCullingOptimizationEnabled() && - current_sqs_in_target_space.Intersects( - backdrop_filters_in_target_space.bounds())) { - for (auto rect_in_target_space : backdrop_filters_in_target_space) { - const auto rect_in_content = - cc::MathUtil::MapEnclosedRectWith2dAxisAlignedTransform( - reverse_transform, rect_in_target_space); - render_pass_quads_in_content_space.Union(rect_in_content); - } - } } } - // TODO(zoraiznaeem): Enable occlusion culling on render pass draw quads. - if (rpdq || !current_sqs_intersects_occlusion) { + if ((!features::IsRenderPassDrawQuadCullingOptimizationEnabled() && + rpdq) || + !current_sqs_intersects_occlusion) { ++quad; continue; } - if (occlusion_in_quad_content_space.Contains(quad->visible_rect)) { + gfx::Rect visible_rect = quad->visible_rect; + if (rpdq) { + // Render pass draw quads can have pixel-moving filters that expand + // their visible bounds. + auto filter_it = foreground_filters.find(rpdq->render_pass_id); + if (filter_it != foreground_filters.end()) { + visible_rect = + GetExpandedRectForPixelMovingFilters(*rpdq, *filter_it->second); + } + } + + if (occlusion_in_quad_content_space.Contains(visible_rect)) { // Case 1: for simple transforms (scale or translation), define the // occlusion region in the quad content space. If |quad| is not // shown on the screen, then set its rect and visible_rect to be empty. quad->visible_rect.set_size(gfx::Size()); - } else if (occlusion_in_quad_content_space.Intersects( - quad->visible_rect)) { + } else if (!rpdq && + occlusion_in_quad_content_space.Intersects(visible_rect)) { // Case 2: for simple transforms, if the quad is partially shown on // screen and the region formed by (occlusion region - visible_rect) is // a rect, then update visible_rect to the resulting rect. @@ -490,7 +475,6 @@ // more than X fragments. const bool should_split_quads = !overlay_processor_->DisableSplittingQuads() && - !visible_region.Intersects(render_pass_quads_in_content_space) && ReduceComplexity(visible_region, settings_.quad_split_limit, reduced_visible_region) && CanSplitDrawQuad(*quad, visible_region.bounds().size(), @@ -499,8 +483,8 @@ auto new_quad = pass->quad_list.InsertCopyBeforeDrawQuad( quad, reduced_visible_region.size() - 1); - for (const auto& visible_rect : reduced_visible_region) { - new_quad->visible_rect = visible_rect; + for (const auto& rect : reduced_visible_region) { + new_quad->visible_rect = rect; ++new_quad; } @@ -509,8 +493,8 @@ } } else if (occlusion_in_quad_content_space.IsEmpty() && occlusion_in_target_space.Contains( - cc::MathUtil::MapEnclosingClippedRect( - transform, quad->visible_rect))) { + cc::MathUtil::MapEnclosingClippedRect(transform, + visible_rect))) { // Case 3: for non simple transforms, define the occlusion region in // target space. If |quad| is not shown on the screen, then set its // rect and visible_rect to be empty.
diff --git a/components/viz/service/display/occlusion_culler_unittest.cc b/components/viz/service/display/occlusion_culler_unittest.cc index 69e6a05..cc455456 100644 --- a/components/viz/service/display/occlusion_culler_unittest.cc +++ b/components/viz/service/display/occlusion_culler_unittest.cc
@@ -168,91 +168,200 @@ EXPECT_EQ(1u, NumVisibleRects(frame.render_pass_list.back()->quad_list)); } -// Quads that intersect backdrop filter render pass quads should not be -// split because splitting may affect how the filter applies to an -// underlying quad. -// TODO(b:424284352): Remove the test once the optimization is enabled by -// default. -TEST_F(OcclusionCullerTest, OcclusionCullingWithIntersectingBackdropFilter) { - if (features::IsBackdropFiltersCullingOptimizationEnabled()) { +// Currently, quad cutting for AggregatedRenderPassDrawQuad is not supported. +// Only fully occluded AggregatedRenderPassDrawQuad are removed from the frame. +TEST_F(OcclusionCullerTest, OcclusionCullingForAggregatedRenderPass) { + if (!features::IsRenderPassDrawQuadCullingOptimizationEnabled()) { GTEST_SKIP(); } - RendererSettings::OcclusionCullerSettings settings; - settings.minimum_fragments_reduced = 0; - - InitOcclusionCuller(settings); - AggregatedFrame frame = MakeDefaultAggregatedFrame(/*num_render_passes=*/2); + // z-order: quad > render_pass_1 > render_pass_2 + InitOcclusionCuller(); + AggregatedFrame frame = MakeDefaultAggregatedFrame(/*num_render_passes=*/3); bool are_contents_opaque = true; float opacity = 1.f; - // Rects, shared quad states and quads map 1:1:1 - std::array<gfx::Rect, 3> rects = { - gfx::Rect(75, 0, 50, 100), - gfx::Rect(0, 0, 50, 50), - gfx::Rect(0, 0, 100, 100), - }; + gfx::Rect quad_1(0, 0, 1000, 1000); + gfx::Rect render_pass_1(200, 200, 500, 500); + gfx::Rect render_pass_2(700, 0, 500, 500); - std::array<SharedQuadState*, 3> shared_quad_states; - std::array<DrawQuad*, 3> quads; + auto& root_render_pass = frame.render_pass_list.at(2); - // Set up the backdrop filter render pass - auto& bd_render_pass = frame.render_pass_list.at(0); - auto& root_render_pass = frame.render_pass_list.at(1); - auto bd_filter_rect = rects[0]; - - cc::FilterOperations backdrop_filters; - backdrop_filters.Append(cc::FilterOperation::CreateBlurFilter(5.0)); - bd_render_pass->SetAll( - AggregatedRenderPassId{2}, bd_filter_rect, gfx::Rect(), gfx::Transform(), - cc::FilterOperations(), backdrop_filters, - SkPath::Rect(gfx::RectToSkRect(bd_filter_rect)), - gfx::ContentColorUsage::kSRGB, false, false, false, false); - - // Add quads to root render pass - for (int i = 0; i < 3; i++) { - shared_quad_states[i] = root_render_pass->CreateAndAppendSharedQuadState(); - shared_quad_states[i]->SetAll( - gfx::Transform(), rects[i], rects[i], gfx::MaskFilterInfo(), - /*clip=*/std::nullopt, are_contents_opaque, opacity, - SkBlendMode::kSrcOver, /*sorting_context=*/0, - /*layer_id=*/0u, /*fast_rounded_corner=*/false); - - if (i == 0) { // Backdrop filter quad - auto* new_quad = - root_render_pass->quad_list - .AllocateAndConstruct<AggregatedRenderPassDrawQuad>(); - new_quad->SetNew(shared_quad_states[i], rects[i], rects[i], - bd_render_pass->id, ResourceId(2), gfx::RectF(), - gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF(), - gfx::RectF(), false, 1.f); - quads[i] = new_quad; - } else { - auto* new_quad = root_render_pass->quad_list - .AllocateAndConstruct<SolidColorDrawQuad>(); - new_quad->SetNew(shared_quad_states[i], rects[i], rects[i], - SkColors::kBlack, false); - quads[i] = new_quad; - } + { + auto& render_pass = frame.render_pass_list.at(0); + render_pass->SetNew(AggregatedRenderPassId{1}, render_pass_1, render_pass_1, + gfx::Transform()); + } + { + auto& render_pass = frame.render_pass_list.at(1); + render_pass->SetNew(AggregatedRenderPassId{2}, render_pass_2, render_pass_2, + gfx::Transform()); } - // +---+-+-+-+ - // | 1 | | . | - // +---+ | 0 | - // | 2 | . | - // +-----+---+ - EXPECT_EQ(std::size(rects), root_render_pass->quad_list.size()); + { + SharedQuadState* shared_quad_state = + frame.render_pass_list.front()->CreateAndAppendSharedQuadState(); + shared_quad_state->SetAll(gfx::Transform(), quad_1, quad_1, + gfx::MaskFilterInfo(), + /*clip=*/std::nullopt, are_contents_opaque, + opacity, SkBlendMode::kSrcOver, + /*sorting_context=*/0, + /*layer_id=*/0u, /*fast_rounded_corner=*/false); + + auto* quad = + root_render_pass->quad_list.AllocateAndConstruct<SolidColorDrawQuad>(); + quad->SetNew(shared_quad_state, quad_1, quad_1, SkColors::kBlack, false); + } + { + SharedQuadState* shared_quad_state = + frame.render_pass_list.front()->CreateAndAppendSharedQuadState(); + shared_quad_state->SetAll(gfx::Transform(), render_pass_1, render_pass_1, + gfx::MaskFilterInfo(), + /*clip=*/std::nullopt, are_contents_opaque, + opacity, SkBlendMode::kSrcOver, + /*sorting_context=*/0, + /*layer_id=*/0u, /*fast_rounded_corner=*/false); + + auto* quad = root_render_pass->quad_list + .AllocateAndConstruct<AggregatedRenderPassDrawQuad>(); + quad->SetNew(shared_quad_state, render_pass_1, render_pass_1, + frame.render_pass_list.at(0)->id, ResourceId(1), gfx::RectF(), + gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF(), gfx::RectF(), + false, 1.f); + } + { + SharedQuadState* shared_quad_state = + frame.render_pass_list.front()->CreateAndAppendSharedQuadState(); + shared_quad_state->SetAll(gfx::Transform(), render_pass_2, render_pass_2, + gfx::MaskFilterInfo(), + /*clip=*/std::nullopt, are_contents_opaque, + opacity, SkBlendMode::kSrcOver, + /*sorting_context=*/0, + /*layer_id=*/0u, /*fast_rounded_corner=*/false); + + auto* quad = root_render_pass->quad_list + .AllocateAndConstruct<AggregatedRenderPassDrawQuad>(); + quad->SetNew(shared_quad_state, render_pass_2, render_pass_2, + frame.render_pass_list.at(1)->id, ResourceId(2), gfx::RectF(), + gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF(), gfx::RectF(), + false, 1.f); + } + + EXPECT_EQ(NumVisibleRects(root_render_pass->quad_list), 3u); occlusion_culler()->RemoveOverdrawQuads(&frame); - ASSERT_EQ(std::size(rects), root_render_pass->quad_list.size()); + EXPECT_EQ(NumVisibleRects(root_render_pass->quad_list), 2u); - for (int i = 0; i < 3; i++) { - EXPECT_EQ(rects[i], root_render_pass->quad_list.ElementAt(i)->visible_rect); - } + // `render_pass_1` is fully occluded by quad_1 so it is removed from the + // frame. `render_pass_2` is partially occluded by quad_1 and since we do + // not support quad cutting for AggregatedRenderPasses, `render_pass_2` + // remains untouched. + auto& quad_list = root_render_pass->quad_list; + EXPECT_EQ(quad_list.ElementAt(0)->visible_rect, quad_1); + EXPECT_TRUE(quad_list.ElementAt(1)->visible_rect.IsEmpty()); + EXPECT_EQ(quad_list.ElementAt(2)->visible_rect, render_pass_2); } TEST_F(OcclusionCullerTest, - OcclusionCullingWithIntersectingBackdropFilterWithOptimization) { + OcclusionCullingForAggregatedRenderPassWithExpandedDamage) { + if (!features::IsRenderPassDrawQuadCullingOptimizationEnabled()) { + GTEST_SKIP(); + } + + InitOcclusionCuller(); + AggregatedFrame frame = MakeDefaultAggregatedFrame(/*num_render_passes=*/3); + + bool are_contents_opaque = true; + float opacity = 1.f; + + gfx::Rect quad_1(0, 0, 1000, 1000); + gfx::Rect foreground_filter_rect_1(0, 0, 1000, 1000); + gfx::Rect foreground_filter_rect_2(0, 0, 1000, 1000); + + auto& foreground_render_pass_1 = frame.render_pass_list.at(0); + auto& foreground_render_pass_2 = frame.render_pass_list.at(1); + auto& root_render_pass = frame.render_pass_list.at(2); + + cc::FilterOperations foreground_filters_1; + foreground_filters_1.Append(cc::FilterOperation::CreateBlurFilter(5.0)); + + cc::FilterOperations foreground_filters_2; + foreground_filters_2.Append(cc::FilterOperation::CreateOpacityFilter(5.0)); + + foreground_render_pass_1->SetAll( + AggregatedRenderPassId{1}, foreground_filter_rect_1, gfx::Rect(), + gfx::Transform(), foreground_filters_1, cc::FilterOperations(), + SkPath::Rect(gfx::RectToSkRect(foreground_filter_rect_1)), + gfx::ContentColorUsage::kSRGB, false, false, false, false); + + foreground_render_pass_2->SetAll( + AggregatedRenderPassId{2}, foreground_filter_rect_2, gfx::Rect(), + gfx::Transform(), foreground_filters_2, cc::FilterOperations(), + SkPath::Rect(gfx::RectToSkRect(foreground_filter_rect_2)), + gfx::ContentColorUsage::kSRGB, false, false, false, false); + + { + SharedQuadState* shared_quad_state = + frame.render_pass_list.front()->CreateAndAppendSharedQuadState(); + shared_quad_state->SetAll(gfx::Transform(), quad_1, quad_1, + gfx::MaskFilterInfo(), + /*clip=*/std::nullopt, are_contents_opaque, + opacity, SkBlendMode::kSrcOver, + /*sorting_context=*/0, + /*layer_id=*/0u, /*fast_rounded_corner=*/false); + + auto* quad = + root_render_pass->quad_list.AllocateAndConstruct<SolidColorDrawQuad>(); + quad->SetNew(shared_quad_state, quad_1, quad_1, SkColors::kBlack, false); + } + + { + SharedQuadState* shared_quad_state = + frame.render_pass_list.front()->CreateAndAppendSharedQuadState(); + shared_quad_state->SetAll(gfx::Transform(), foreground_filter_rect_1, + foreground_filter_rect_1, gfx::MaskFilterInfo(), + /*clip=*/std::nullopt, are_contents_opaque, + opacity, SkBlendMode::kSrcOver, + /*sorting_context=*/0, + /*layer_id=*/0u, /*fast_rounded_corner=*/false); + + auto* quad = root_render_pass->quad_list + .AllocateAndConstruct<AggregatedRenderPassDrawQuad>(); + quad->SetNew(shared_quad_state, foreground_filter_rect_1, + foreground_filter_rect_1, foreground_render_pass_1->id, + ResourceId(1), gfx::RectF(), gfx::Size(), gfx::Vector2dF(1, 1), + gfx::PointF(), gfx::RectF(), false, 1.f); + } + + { + SharedQuadState* shared_quad_state = + frame.render_pass_list.front()->CreateAndAppendSharedQuadState(); + shared_quad_state->SetAll(gfx::Transform(), foreground_filter_rect_2, + foreground_filter_rect_2, gfx::MaskFilterInfo(), + /*clip=*/std::nullopt, are_contents_opaque, + opacity, SkBlendMode::kSrcOver, + /*sorting_context=*/0, + /*layer_id=*/0u, /*fast_rounded_corner=*/false); + + auto* quad = root_render_pass->quad_list + .AllocateAndConstruct<AggregatedRenderPassDrawQuad>(); + quad->SetNew(shared_quad_state, foreground_filter_rect_2, + foreground_filter_rect_2, foreground_render_pass_2->id, + ResourceId(2), gfx::RectF(), gfx::Size(), gfx::Vector2dF(1, 1), + gfx::PointF(), gfx::RectF(), false, 1.f); + } + + EXPECT_EQ(NumVisibleRects(root_render_pass->quad_list), 3u); + occlusion_culler()->RemoveOverdrawQuads(&frame); + EXPECT_EQ(NumVisibleRects(root_render_pass->quad_list), 2u); + + auto& quad_list = root_render_pass->quad_list; + EXPECT_EQ(quad_list.ElementAt(0)->visible_rect, quad_1); + EXPECT_EQ(quad_list.ElementAt(1)->visible_rect, foreground_filter_rect_1); + EXPECT_TRUE(quad_list.ElementAt(2)->visible_rect.IsEmpty()); +} + +TEST_F(OcclusionCullerTest, OcclusionCullingWithIntersectingBackdropFilter) { // // +-----------------------------+ quad_2 (0,0 1000x1000) // | | @@ -270,10 +379,6 @@ // z-order: backdrop_render_pass_1 > quad_1 > backdrop_render_pass_2 // > quad_2 - if (!features::IsBackdropFiltersCullingOptimizationEnabled()) { - GTEST_SKIP(); - } - RendererSettings::OcclusionCullerSettings settings; settings.minimum_fragments_reduced = 0; @@ -384,10 +489,6 @@ TEST_F(OcclusionCullerTest, EnsureOccluderComplexityWithBackdropFilters) { // z-order: quad_1 > backdrop_render_pass_1 >> quad_2 - if (!features::IsBackdropFiltersCullingOptimizationEnabled()) { - GTEST_SKIP(); - } - RendererSettings::OcclusionCullerSettings settings; settings.minimum_fragments_reduced = 0; settings.maximum_occluder_complexity = 2;
diff --git a/components/viz/service/display/overlay_candidate_factory.cc b/components/viz/service/display/overlay_candidate_factory.cc index 8b7be6f..c2801b58 100644 --- a/components/viz/service/display/overlay_candidate_factory.cc +++ b/components/viz/service/display/overlay_candidate_factory.cc
@@ -661,7 +661,11 @@ return CandidateStatus::kFailBlending; } - candidate.uv_rect = BoundingRect(quad->uv_top_left, quad->uv_bottom_right); + if (quad->resource_id != kInvalidResourceId) { + auto resource_size_in_pixels = + resource_provider_->GetResourceBackedSize(quad->resource_id); + candidate.uv_rect = quad->GetNormalizedTexCoords(resource_size_in_pixels); + } const bool y_flipped = resource_provider_->GetOrigin(quad->resource_id) == kBottomLeft_GrSurfaceOrigin;
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc index 2a2c2095..8e3d17a9 100644 --- a/components/viz/service/display/overlay_unittest.cc +++ b/components/viz/service/display/overlay_unittest.cc
@@ -5037,8 +5037,8 @@ auto* tex_rect = CreateCandidateQuadAt( pass->shared_quad_state_list.back(), pass.get(), kSmallCandidateRect); - tex_rect->uv_bottom_right = gfx::PointF(1, 1); - tex_rect->uv_top_left = gfx::PointF(0, 0); + tex_rect->SetNormalizedTexCoordsForTesting(gfx::RectF(0, 0, 1, 1), + kSmallCandidateRect.size()); pass->shared_quad_state_list.back()->clip_rect = kTestClip; // Check for potential candidates. OverlayCandidateList candidate_list; @@ -5065,10 +5065,9 @@ const auto kSmallCandidateRect = gfx::Rect(0, 0, 100, 100); const auto kTestClip = gfx::Rect(0, 50, 50, 50); auto* tex_rect = CreateCandidateQuadAt( - pass->shared_quad_state_list.back(), pass.get(), kSmallCandidateRect); - tex_rect->uv_bottom_right = gfx::PointF(1, 1); - tex_rect->uv_top_left = gfx::PointF(0, 0); + tex_rect->SetNormalizedTexCoordsForTesting(gfx::RectF(0, 0, 1, 1), + kSmallCandidateRect.size()); tex_rect->visible_rect = kTestClip; // Check for potential candidates. OverlayCandidateList candidate_list; @@ -5115,8 +5114,10 @@ EXPECT_EQ(1U, test::NumOverlaysExcludingPrimaryPlane(candidate_list)); auto expected_rect = kTestClip; expected_rect.Intersect(kSmallCandidateRect); + const gfx::RectF tex_coord_rect = + tex_rect->GetNormalizedTexCoords(kSmallCandidateRect.size()); gfx::RectF uv_rect = cc::MathUtil::ScaleRectProportional( - BoundingRect(tex_rect->uv_top_left, tex_rect->uv_bottom_right), + BoundingRect(tex_coord_rect.origin(), tex_coord_rect.bottom_right()), gfx::RectF(kSmallCandidateRect), gfx::RectF(expected_rect)); EXPECT_RECTF_NEAR(gfx::RectF(expected_rect), candidate_list[0].display_rect, 0.01f); @@ -5164,10 +5165,9 @@ const auto kOversizedCandidateRect = gfx::Rect(kDisplaySize.height() * 2, kDisplaySize.width() * 2); auto* tex_rect = CreateCandidateQuadAt( - pass->shared_quad_state_list.back(), pass.get(), kOversizedCandidateRect); - tex_rect->uv_bottom_right = gfx::PointF(1, 1); - tex_rect->uv_top_left = gfx::PointF(0, 0); + tex_rect->SetNormalizedTexCoordsForTesting(gfx::RectF(0, 0, 1, 1), + kOversizedCandidateRect.size()); // Check for potential candidates. OverlayCandidateList candidate_list; AggregatedRenderPassList pass_list;
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc index a0267ff..1f99ae4 100644 --- a/components/viz/service/display/renderer_pixeltest.cc +++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -64,6 +64,8 @@ #include "third_party/skia/include/private/chromium/SkPMColor.h" #include "ui/gfx/color_transform.h" #include "ui/gfx/geometry/mask_filter_info.h" +#include "ui/gfx/geometry/point_f.h" +#include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/geometry/skia_conversions.h" #include "ui/gfx/geometry/transform_util.h" #include "ui/gfx/video_types.h" @@ -975,8 +977,9 @@ quad->rect.Offset(10, 10); quad->visible_rect.Offset(10, 10); quad->visible_rect.Inset(gfx::Insets::TLBR(50, 30, 12, 12)); - quad->uv_top_left.SetPoint(.2, .3); - quad->uv_bottom_right.SetPoint(.4, .7); + quad->SetNormalizedTexCoordsForTesting( + gfx::BoundingRect(gfx::PointF(0.2f, 0.3f), gfx::PointF(0.4f, 0.7f)), + this->device_viewport_size_); quad->nearest_neighbor = true; // To avoid bilinear filter differences. SharedQuadState* color_quad_state = CreateTestSharedQuadState( gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index d96f2bee..db16606 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -2634,9 +2634,9 @@ const SkImage* image = builder.sk_image(); if (!image) return; - gfx::RectF uv_rect = gfx::ScaleRect( - gfx::BoundingRect(quad->uv_top_left, quad->uv_bottom_right), - image->width(), image->height()); + + gfx::RectF uv_rect = quad->GetUnnormalizedTexCoords( + gfx::Size(image->width(), image->height())); params->vis_tex_coords = cc::MathUtil::ScaleRectProportional( uv_rect, gfx::RectF(quad->rect), params->visible_rect);
diff --git a/components/viz/service/display/software_renderer.cc b/components/viz/service/display/software_renderer.cc index 8f7f2fd..f28afe94 100644 --- a/components/viz/service/display/software_renderer.cc +++ b/components/viz/service/display/software_renderer.cc
@@ -446,9 +446,8 @@ if (!lock.valid()) return; const SkImage* image = lock.sk_image(); - gfx::RectF uv_rect = gfx::ScaleRect( - gfx::BoundingRect(quad->uv_top_left, quad->uv_bottom_right), - image->width(), image->height()); + gfx::RectF uv_rect = quad->GetUnnormalizedTexCoords( + gfx::Size(image->width(), image->height())); gfx::RectF visible_uv_rect = cc::MathUtil::ScaleRectProportional( uv_rect, gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect)); SkRect sk_uv_rect = gfx::RectFToSkRect(visible_uv_rect);
diff --git a/components/viz/service/layers/layer_context_impl.cc b/components/viz/service/layers/layer_context_impl.cc index 95071d22..635ed44 100644 --- a/components/viz/service/layers/layer_context_impl.cc +++ b/components/viz/service/layers/layer_context_impl.cc
@@ -395,6 +395,11 @@ node.filters = wire.filters; node.backdrop_filters = wire.backdrop_filters; node.backdrop_filter_bounds = wire.backdrop_filter_bounds; + if (wire.backdrop_filter_quality <= 0.0f || + wire.backdrop_filter_quality > 1.0f || + !std::isfinite(wire.backdrop_filter_quality)) { + return base::unexpected("Invalid backdrop_filter_quality"); + } node.backdrop_filter_quality = wire.backdrop_filter_quality; node.backdrop_mask_element_id = wire.backdrop_mask_element_id; node.mask_filter_info = wire.mask_filter_info; @@ -550,6 +555,18 @@ cc::PropertyTrees& trees, cc::TransformTree& tree, mojom::TransformTreeUpdate& update) { + if (update.page_scale_factor <= 0 || + !std::isfinite(update.page_scale_factor)) { + return base::unexpected("Invalid page_scale_factor"); + } + if (update.device_scale_factor <= 0 || + !std::isfinite(update.device_scale_factor)) { + return base::unexpected("Invalid device_scale_factor"); + } + if (update.device_transform_scale_factor <= 0 || + !std::isfinite(update.device_transform_scale_factor)) { + return base::unexpected("Invalid device_transform_scale_factor"); + } tree.set_page_scale_factor(update.page_scale_factor); tree.set_device_scale_factor(update.device_scale_factor); tree.set_device_transform_scale_factor(update.device_transform_scale_factor); @@ -570,6 +587,11 @@ cc::PropertyTrees& trees, cc::ScrollTree& tree, const mojom::ScrollTreeUpdate& update) { + for (auto const& [element_id, overscroll] : update.elastic_overscroll) { + if (!std::isfinite(overscroll.x()) || !std::isfinite(overscroll.y())) { + return base::unexpected("Invalid elastic_overscroll"); + } + } tree.synced_scroll_offset_map() = update.synced_scroll_offsets; tree.scrolling_contents_cull_rects() = update.scrolling_contents_cull_rects; bool elastic_overscroll_changed = @@ -1881,6 +1903,21 @@ !std::isfinite(update->max_safe_area_inset_bottom)) { return base::unexpected("Invalid max safe area inset bottom"); } + if (update->browser_controls_params.top_controls_height < 0 || + !std::isfinite(update->browser_controls_params.top_controls_height) || + update->browser_controls_params.top_controls_min_height < 0 || + !std::isfinite(update->browser_controls_params.top_controls_min_height) || + update->browser_controls_params.bottom_controls_height < 0 || + !std::isfinite(update->browser_controls_params.bottom_controls_height) || + update->browser_controls_params.bottom_controls_min_height < 0 || + !std::isfinite( + update->browser_controls_params.bottom_controls_min_height) || + update->browser_controls_params.top_controls_min_height > + update->browser_controls_params.top_controls_height || + update->browser_controls_params.bottom_controls_min_height > + update->browser_controls_params.bottom_controls_height) { + return base::unexpected("Invalid browser controls params"); + } layers.SetBrowserControlsParams(update->browser_controls_params); host_impl_->browser_controls_manager()->SetOffsetTagModifications( update->browser_controls_offset_tag_modifications);
diff --git a/components/viz/service/layers/layer_context_impl_property_trees_unittest.cc b/components/viz/service/layers/layer_context_impl_property_trees_unittest.cc index 0332143..e4d2c9b8 100644 --- a/components/viz/service/layers/layer_context_impl_property_trees_unittest.cc +++ b/components/viz/service/layers/layer_context_impl_property_trees_unittest.cc
@@ -41,6 +41,12 @@ class LayerContextImplPropertyTreesTestBase : public LayerContextImplTest { protected: + base::expected<void, std::string> ApplyDefaultUpdate() { + // Apply a default valid update first. + auto update = CreateDefaultUpdate(); + return layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + } + mojom::TransformNodePtr CreateDefaultSecondaryRootTransformNode() { auto node = mojom::TransformNode::New(); node->id = cc::kSecondaryRootPropertyNodeId; @@ -80,9 +86,7 @@ TEST_F(LayerContextImplPropertyTreesTestBase, AnyTreeChangedTriggersResetCachedDataAndNeedsUpdateDrawProperties) { // Initial update to set up the tree. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto* active_tree = layer_context_impl_->host_impl()->active_tree(); // --- Test Transform Node Change --- @@ -181,10 +185,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateExistingTransformNodeProperties) { - // Apply a default valid update first. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -220,9 +221,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeToParent) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -243,9 +242,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeSnapAmount) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -264,9 +261,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeHasPotentialAnimation) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -284,9 +279,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeIsCurrentlyAnimating) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -304,9 +297,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeScrolls) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -324,9 +315,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeShouldUndoOverscroll) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -344,9 +333,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeShouldBeSnapped) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -364,9 +351,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeMovedByOuterViewportBoundsDeltaY) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -384,9 +369,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeTransformChanged) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -404,9 +387,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeDelegatesToParentForBackface) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -424,9 +405,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeMaximumAnimationScale) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -445,9 +424,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeNodeAndAncestorsAreAnimatedOrInvertible) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -465,9 +442,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeIsInvertible) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -485,9 +460,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeAncestorsAreInvertible) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -505,9 +478,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeNodeAndAncestorsAreFlat) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -525,9 +496,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeNodeOrAncestorsWillChangeTransform) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -545,9 +514,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, UpdateTransformNodeVisibleFrameElementId) { - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootTransformNode(); @@ -567,9 +534,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, AddRemoveTransformNodes) { // Apply a default valid update first. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); uint32_t initial_node_count = layer_context_impl_->host_impl() ->active_tree() ->property_trees() @@ -775,9 +740,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest, InvalidParentFrameId) { // Apply a default valid update first to set up the tree. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = mojom::TransformNode::New(); @@ -812,9 +775,7 @@ InvalidStickyPositionConstraintId_EmptyData) { // Apply a default valid update. sticky_position_data will be empty by // default. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); ASSERT_TRUE(layer_context_impl_->host_impl() ->active_tree() ->property_trees() @@ -863,9 +824,7 @@ InvalidAnchorPositionScrollDataId_EmptyData) { // Apply a default valid update. anchor_position_scroll_data will be empty by // default. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); ASSERT_TRUE(layer_context_impl_->host_impl() ->active_tree() ->property_trees() @@ -946,9 +905,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeClipNodeTest, UpdateExistingClipNodeProperties) { // Apply a default valid update first. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootClipNode(); @@ -969,9 +926,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeClipNodeTest, AddRemoveClipNodes) { // Apply a default valid update first. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); uint32_t initial_node_count = layer_context_impl_->host_impl() ->active_tree() ->property_trees() @@ -1158,9 +1113,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeEffectNodeTest, AddRemoveEffectNodes) { // Apply a default valid update first. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); uint32_t initial_node_count = layer_context_impl_->host_impl() ->active_tree() ->property_trees() @@ -1209,9 +1162,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeEffectNodeTest, AddRemoveCopyOutputRequests) { // Apply a default valid update first. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); // Add a copy request. auto update_add_request = CreateDefaultUpdate(); @@ -1880,7 +1831,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeEffectNodeTest, BackdropFilterQuality) { auto update = CreateDefaultUpdate(); auto node_update = CreateDefaultSecondaryRootEffectNode(); - node_update->backdrop_filter_quality = 2.f; + node_update->backdrop_filter_quality = 0.5f; update->effect_nodes.push_back(std::move(node_update)); auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); @@ -1889,7 +1840,7 @@ cc::EffectNode* node_impl = GetEffectNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); ASSERT_TRUE(node_impl); - EXPECT_EQ(node_impl->backdrop_filter_quality, 2.f); + EXPECT_EQ(node_impl->backdrop_filter_quality, 0.5f); } class LayerContextImplUpdateDisplayTreeScrollNodeTest @@ -1913,10 +1864,7 @@ TEST_F(LayerContextImplUpdateDisplayTreeScrollNodeTest, UpdateExistingScrollNodeProperties) { - // Apply a default valid update first. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); auto update2 = CreateDefaultUpdate(); auto node_update = mojom::ScrollNode::New(); @@ -1947,10 +1895,7 @@ } TEST_F(LayerContextImplUpdateDisplayTreeScrollNodeTest, AddRemoveScrollNodes) { - // Apply a default valid update first. - auto update1 = CreateDefaultUpdate(); - EXPECT_TRUE( - layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value()); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); uint32_t initial_node_count = layer_context_impl_->host_impl() ->active_tree() ->property_trees() @@ -2160,6 +2105,154 @@ "Invalid parent_id for non-root property tree node"); } +class LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest + : public LayerContextImplUpdateDisplayTreeScrollNodeTest, + public ::testing::WithParamInterface<bool> { + protected: + mojom::ScrollNodePtr CreateDefaultScrollNodeUpdate() { + auto node_update = mojom::ScrollNode::New(); + node_update->id = cc::kSecondaryRootPropertyNodeId; + node_update->parent_id = cc::kRootPropertyNodeId; + node_update->transform_id = cc::kSecondaryRootPropertyNodeId; + return node_update; + } +}; + +TEST_P(LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest, + MaxScrollOffsetAffectedByPageScale) { + const bool max_scroll_offset_affected_by_page_scale = GetParam(); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); + + auto update = CreateDefaultUpdate(); + auto node_update = CreateDefaultScrollNodeUpdate(); + if (max_scroll_offset_affected_by_page_scale) { + node_update->max_scroll_offset_affected_by_page_scale = + max_scroll_offset_affected_by_page_scale; + } + update->scroll_nodes.push_back(std::move(node_update)); + + cc::ScrollNode* node_impl = + GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); + ASSERT_TRUE(node_impl); + EXPECT_FALSE(node_impl->max_scroll_offset_affected_by_page_scale); + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_TRUE(result.has_value()); + + node_impl = GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); + ASSERT_TRUE(node_impl); + EXPECT_EQ(node_impl->max_scroll_offset_affected_by_page_scale, + max_scroll_offset_affected_by_page_scale); +} + +TEST_P(LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest, + ScrollsInnerViewport) { + const bool scrolls_inner_viewport = GetParam(); + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); + + auto update = CreateDefaultUpdate(); + auto node_update = CreateDefaultScrollNodeUpdate(); + if (scrolls_inner_viewport) { + node_update->scrolls_inner_viewport = scrolls_inner_viewport; + } + update->scroll_nodes.push_back(std::move(node_update)); + + cc::ScrollNode* node_impl = + GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); + ASSERT_TRUE(node_impl); + EXPECT_FALSE(node_impl->scrolls_inner_viewport); + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_TRUE(result.has_value()); + + node_impl = GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); + ASSERT_TRUE(node_impl); + EXPECT_EQ(node_impl->scrolls_inner_viewport, scrolls_inner_viewport); +} + +TEST_P(LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest, + ScrollsOuterViewport) { + const bool scrolls_outer_viewport = GetParam(); + // Apply a default valid update first. + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); + + auto update = CreateDefaultUpdate(); + auto node_update = CreateDefaultScrollNodeUpdate(); + if (scrolls_outer_viewport) { + node_update->scrolls_outer_viewport = scrolls_outer_viewport; + } + update->scroll_nodes.push_back(std::move(node_update)); + + cc::ScrollNode* node_impl = + GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); + ASSERT_TRUE(node_impl); + EXPECT_FALSE(node_impl->scrolls_outer_viewport); + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_TRUE(result.has_value()); + + node_impl = GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); + ASSERT_TRUE(node_impl); + EXPECT_EQ(node_impl->scrolls_outer_viewport, scrolls_outer_viewport); +} + +TEST_P(LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest, + PreventViewportScrollingFromInner) { + const bool prevent_viewport_scrolling_from_inner = GetParam(); + // Apply a default valid update first. + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); + + auto update = CreateDefaultUpdate(); + auto node_update = CreateDefaultScrollNodeUpdate(); + if (prevent_viewport_scrolling_from_inner) { + node_update->prevent_viewport_scrolling_from_inner = + prevent_viewport_scrolling_from_inner; + } + update->scroll_nodes.push_back(std::move(node_update)); + + cc::ScrollNode* node_impl = + GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); + ASSERT_TRUE(node_impl); + EXPECT_FALSE(node_impl->prevent_viewport_scrolling_from_inner); + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_TRUE(result.has_value()); + + node_impl = GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); + ASSERT_TRUE(node_impl); + EXPECT_EQ(node_impl->prevent_viewport_scrolling_from_inner, + prevent_viewport_scrolling_from_inner); +} + +TEST_P(LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest, + IsComposited) { + const bool is_composited = GetParam(); + // Apply a default valid update first. + EXPECT_TRUE(ApplyDefaultUpdate().has_value()); + + auto update = CreateDefaultUpdate(); + auto node_update = CreateDefaultScrollNodeUpdate(); + if (is_composited) { + node_update->is_composited = is_composited; + } + update->scroll_nodes.push_back(std::move(node_update)); + + cc::ScrollNode* node_impl = + GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); + ASSERT_TRUE(node_impl); + EXPECT_FALSE(node_impl->is_composited); + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_TRUE(result.has_value()); + + node_impl = GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId); + ASSERT_TRUE(node_impl); + EXPECT_EQ(node_impl->is_composited, is_composited); +} + +INSTANTIATE_TEST_SUITE_P( + DefaultValues, + LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest, + ::testing::Values(true, false), + [](const testing::TestParamInfo< + LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest:: + ParamType>& info) { return info.param ? "True" : "False"; }); + class LayerContextImplUpdateDisplayTreePageScaleFactorTest : public LayerContextImplTest, public ::testing::WithParamInterface<std::tuple<float, bool>> {};
diff --git a/components/viz/service/layers/layer_context_impl_unittest.cc b/components/viz/service/layers/layer_context_impl_unittest.cc index 0238fdf..2cf9950 100644 --- a/components/viz/service/layers/layer_context_impl_unittest.cc +++ b/components/viz/service/layers/layer_context_impl_unittest.cc
@@ -4012,5 +4012,325 @@ layer_context_impl_->host_impl()->viewport_damage_rect_for_testing()); } +class LayerContextImplUpdateDisplayTreeInvalidValuesTest + : public LayerContextImplTest, + public ::testing::WithParamInterface<float> {}; + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidValuesTest, PageScaleFactor) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->page_scale_factor = invalid_value; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid page scale factors"); +} + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidValuesTest, MinPageScaleFactor) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->min_page_scale_factor = invalid_value; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid page scale factors"); +} + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidValuesTest, MaxPageScaleFactor) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->max_page_scale_factor = invalid_value; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid page scale factors"); +} + +INSTANTIATE_TEST_SUITE_P( + InvalidFloats, + LayerContextImplUpdateDisplayTreeInvalidValuesTest, + ::testing::Values(std::numeric_limits<float>::infinity(), + -std::numeric_limits<float>::infinity(), + std::numeric_limits<float>::quiet_NaN(), + 0.0f, + -1.0f), + [](const testing::TestParamInfo< + LayerContextImplUpdateDisplayTreeInvalidValuesTest::ParamType>& info) { + if (std::isinf(info.param)) { + return info.param > 0 ? "Infinity" : "NegativeInfinity"; + } + if (std::isnan(info.param)) { + return "NaN"; + } + if (info.param == 0.0f) { + return "Zero"; + } + if (info.param < 0.0f) { + return "Negative"; + } + return "Other"; + }); + +TEST_F(LayerContextImplTest, InvalidMinMaxPageScaleFactor) { + auto update = CreateDefaultUpdate(); + update->min_page_scale_factor = 2.0f; + update->max_page_scale_factor = 1.0f; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid page scale factors"); +} + +class LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest + : public LayerContextImplTest, + public ::testing::WithParamInterface<float> {}; + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest, + TopControlsHeight) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->browser_controls_params.top_controls_height = invalid_value; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid browser controls params"); +} + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest, + TopControlsMinHeight) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->browser_controls_params.top_controls_min_height = invalid_value; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid browser controls params"); +} + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest, + BottomControlsHeight) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->browser_controls_params.bottom_controls_height = invalid_value; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid browser controls params"); +} + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest, + BottomControlsMinHeight) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->browser_controls_params.bottom_controls_min_height = invalid_value; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid browser controls params"); +} + +INSTANTIATE_TEST_SUITE_P( + InvalidFloats, + LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest, + ::testing::Values(std::numeric_limits<float>::infinity(), + -std::numeric_limits<float>::infinity(), + std::numeric_limits<float>::quiet_NaN(), + -1.0f), + [](const testing::TestParamInfo< + LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest::ParamType>& + info) { + if (std::isinf(info.param)) { + return info.param > 0 ? "Infinity" : "NegativeInfinity"; + } + if (std::isnan(info.param)) { + return "NaN"; + } + if (info.param < 0.0f) { + return "Negative"; + } + return "Other"; + }); + +TEST_F(LayerContextImplTest, InvalidMinMaxBrowserControlsHeight) { + auto update = CreateDefaultUpdate(); + update->browser_controls_params.top_controls_height = 10.f; + update->browser_controls_params.top_controls_min_height = 20.f; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid browser controls params"); + + update = CreateDefaultUpdate(); + update->browser_controls_params.bottom_controls_height = 10.f; + update->browser_controls_params.bottom_controls_min_height = 20.f; + + result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid browser controls params"); +} + +class LayerContextImplUpdateDisplayTreeInvalidElasticOverscrollTest + : public LayerContextImplTest, + public ::testing::WithParamInterface<float> {}; + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidElasticOverscrollTest, + ElasticOverscrollX) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->scroll_tree_update = mojom::ScrollTreeUpdate::New(); + update->scroll_tree_update->elastic_overscroll[cc::ElementId(123)] = + gfx::Vector2dF(invalid_value, 0.f); + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid elastic_overscroll"); +} + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidElasticOverscrollTest, + ElasticOverscrollY) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->scroll_tree_update = mojom::ScrollTreeUpdate::New(); + update->scroll_tree_update->elastic_overscroll[cc::ElementId(123)] = + gfx::Vector2dF(0.f, invalid_value); + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid elastic_overscroll"); +} + +INSTANTIATE_TEST_SUITE_P( + InvalidFloats, + LayerContextImplUpdateDisplayTreeInvalidElasticOverscrollTest, + ::testing::Values(std::numeric_limits<float>::infinity(), + -std::numeric_limits<float>::infinity(), + std::numeric_limits<float>::quiet_NaN()), + [](const testing::TestParamInfo< + LayerContextImplUpdateDisplayTreeInvalidElasticOverscrollTest:: + ParamType>& info) { + if (std::isinf(info.param)) { + return info.param > 0 ? "Infinity" : "NegativeInfinity"; + } + if (std::isnan(info.param)) { + return "NaN"; + } + return "Other"; + }); + +class LayerContextImplUpdateDisplayTreeInvalidBackdropFilterQualityTest + : public LayerContextImplTest, + public ::testing::WithParamInterface<float> {}; + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidBackdropFilterQualityTest, + BackdropFilterQuality) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->num_effect_nodes = 2; + auto effect_node = mojom::EffectNode::New(); + effect_node->id = 1; + effect_node->parent_id = 0; + effect_node->transform_id = 0; + effect_node->clip_id = 0; + effect_node->target_id = 0; + effect_node->backdrop_filter_quality = invalid_value; + update->effect_nodes.push_back(std::move(effect_node)); + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid backdrop_filter_quality"); +} + +INSTANTIATE_TEST_SUITE_P( + InvalidFloats, + LayerContextImplUpdateDisplayTreeInvalidBackdropFilterQualityTest, + ::testing::Values(std::numeric_limits<float>::infinity(), + -std::numeric_limits<float>::infinity(), + std::numeric_limits<float>::quiet_NaN(), + 0.0f, + -0.1f, // Less than 0 + 1.1f), // Greater than 1 + [](const testing::TestParamInfo< + LayerContextImplUpdateDisplayTreeInvalidBackdropFilterQualityTest:: + ParamType>& info) { + if (std::isinf(info.param)) { + return info.param > 0 ? "Infinity" : "NegativeInfinity"; + } + if (std::isnan(info.param)) { + return "NaN"; + } + if (info.param == 0.0f) { + return "Zero"; + } + if (info.param < 0.0f) { + return "Negative"; + } + if (info.param > 1.0f) { + return "GreaterThanOne"; + } + return "Other"; + }); + +class LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest + : public LayerContextImplTest, + public ::testing::WithParamInterface<float> {}; + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest, + PageScaleFactor) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->transform_tree_update = mojom::TransformTreeUpdate::New(); + update->transform_tree_update->page_scale_factor = invalid_value; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid page_scale_factor"); +} + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest, + DeviceScaleFactor) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->transform_tree_update = mojom::TransformTreeUpdate::New(); + update->transform_tree_update->device_scale_factor = invalid_value; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid device_scale_factor"); +} + +TEST_P(LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest, + DeviceTransformScaleFactor) { + const float invalid_value = GetParam(); + auto update = CreateDefaultUpdate(); + update->transform_tree_update = mojom::TransformTreeUpdate::New(); + update->transform_tree_update->device_transform_scale_factor = invalid_value; + + auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update)); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), "Invalid device_transform_scale_factor"); +} + +INSTANTIATE_TEST_SUITE_P( + InvalidFloats, + LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest, + ::testing::Values(std::numeric_limits<float>::infinity(), + -std::numeric_limits<float>::infinity(), + std::numeric_limits<float>::quiet_NaN(), + -1.0f), + [](const testing::TestParamInfo< + LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest:: + ParamType>& info) { + if (std::isinf(info.param)) { + return info.param > 0 ? "Infinity" : "NegativeInfinity"; + } + if (std::isnan(info.param)) { + return "NaN"; + } + if (info.param < 0.0f) { + return "Negative"; + } + return "Other"; + }); + } // namespace } // namespace viz
diff --git a/components/webapps/browser/android/app_banner_manager_android.cc b/components/webapps/browser/android/app_banner_manager_android.cc index af11e67..edfe206 100644 --- a/components/webapps/browser/android/app_banner_manager_android.cc +++ b/components/webapps/browser/android/app_banner_manager_android.cc
@@ -480,13 +480,16 @@ TrackUserResponse(USER_RESPONSE_NATIVE_APP_ACCEPTED); break; case AddToHomescreenParams::AppType::WEBAPK: - [[fallthrough]]; - case AddToHomescreenParams::AppType::SHORTCUT: TrackUserResponse(USER_RESPONSE_WEB_APP_ACCEPTED); AppBannerSettingsHelper::RecordBannerInstallEvent( web_contents(), a2hs_params.shortcut_info->url.spec()); break; default: + // a2hs_params should be the one created by + // CreateAddToHomescreenParams(), which only returns + // AddToHomescreenParams::AppType::NATIVE or + // AddToHomescreenParams::AppType::WEBAPK, so this shouldn't be + // reached. NOTREACHED(); } break; @@ -507,8 +510,7 @@ case AddToHomescreenInstaller::Event::INSTALL_REQUEST_FINISHED: SendBannerAccepted(); - if (a2hs_params.app_type == AddToHomescreenParams::AppType::WEBAPK || - a2hs_params.app_type == AddToHomescreenParams::AppType::SHORTCUT) { + if (a2hs_params.app_type == AddToHomescreenParams::AppType::WEBAPK) { OnInstall(a2hs_params.shortcut_info->display, /*set_current_web_app_not_installable=*/false); }
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2Api.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2Api.java index 58d1820..c1e2ea1 100644 --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2Api.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2Api.java
@@ -1569,6 +1569,9 @@ case 6: details.mIsPayment = parcel.readInt() != 0; break; + case 7: + details.mLastUsedTimeMs = parcel.readLong(); + break; default: // unknown tag. Skip over it. parcel.setDataPosition(addLengthToParcelPosition(header.second, parcel));
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiTestHelper.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiTestHelper.java index 50ff6cc2..66b82466 100644 --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiTestHelper.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiTestHelper.java
@@ -789,6 +789,7 @@ credential.mCredentialId = new byte[] {8, 7, 6}; credential.mIsDiscoverable = true; credential.mIsPayment = false; + credential.mLastUsedTimeMs = 42; return credential; }
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnBrowserBridge.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnBrowserBridge.java index b881c68..cee3287 100644 --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnBrowserBridge.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnBrowserBridge.java
@@ -251,6 +251,11 @@ } @CalledByNative + private static long getWebauthnCredentialDetailsLastUsedTimeMs(WebauthnCredentialDetails cred) { + return cred.mLastUsedTimeMs; + } + + @CalledByNative private static SelectedCredential createSelectedPasswordCredential( String username, String password) { return new SelectedCredential(
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnCredentialDetails.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnCredentialDetails.java index 93f12c7a..39fb5b8 100644 --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnCredentialDetails.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnCredentialDetails.java
@@ -28,5 +28,8 @@ /** Whether the credential is enabled for Secure Payment Confirmation. */ public boolean mIsPayment; + /** Last used time in UNIX epoch milliseconds. */ + public long mLastUsedTimeMs; + public WebauthnCredentialDetails() {} }
diff --git a/components/webauthn/android/webauthn_browser_bridge.cc b/components/webauthn/android/webauthn_browser_bridge.cc index 8abd2cf..58a8a800 100644 --- a/components/webauthn/android/webauthn_browser_bridge.cc +++ b/components/webauthn/android/webauthn_browser_bridge.cc
@@ -20,6 +20,7 @@ #include "base/check_op.h" #include "base/functional/bind.h" #include "base/functional/callback.h" +#include "base/time/time.h" #include "components/webauthn/android/webauthn_client_android.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" @@ -58,6 +59,13 @@ env, Java_WebauthnBrowserBridge_getWebauthnCredentialDetailsUserDisplayName( env, j_credential)); + int64_t last_used_time_ms = + Java_WebauthnBrowserBridge_getWebauthnCredentialDetailsLastUsedTimeMs( + env, j_credential); + if (last_used_time_ms != 0) { + credential.last_used_time = + base::Time::FromMillisecondsSinceUnixEpoch(last_used_time_ms); + } return credential; }
diff --git a/components/webauthn/ios/BUILD.gn b/components/webauthn/ios/BUILD.gn index 4d234163..8b953a3 100644 --- a/components/webauthn/ios/BUILD.gn +++ b/components/webauthn/ios/BUILD.gn
@@ -7,6 +7,10 @@ source_set("ios") { sources = [ "ios_passkey_client.h", + "ios_webauthn_credentials_delegate.h", + "ios_webauthn_credentials_delegate.mm", + "ios_webauthn_credentials_delegate_factory.h", + "ios_webauthn_credentials_delegate_factory.mm", "passkey_java_script_feature.h", "passkey_java_script_feature.mm", "passkey_tab_helper.h", @@ -18,6 +22,9 @@ ":passkey_controller_js", ":passkey_types", "//base", + "//components/autofill/ios/browser", + "//components/password_manager/core/browser", + "//components/password_manager/core/browser:passkey_credential", "//components/webauthn/core/browser:client_data", "//components/webauthn/core/browser:passkey_model", "//device/fido", @@ -57,11 +64,15 @@ source_set("unit_tests") { testonly = true - sources = [ "passkey_tab_helper_unittest.mm" ] + sources = [ + "ios_webauthn_credentials_delegate_factory_unittest.mm", + "passkey_tab_helper_unittest.mm", + ] deps = [ ":ios", ":js_tests", "//base/test:test_support", + "//components/autofill/ios/browser", "//components/webauthn/core/browser:passkey_model", "//components/webauthn/core/browser:test_support", "//ios/web/public/test",
diff --git a/components/webauthn/ios/DEPS b/components/webauthn/ios/DEPS index 92ecbeb..9896ad5 100644 --- a/components/webauthn/ios/DEPS +++ b/components/webauthn/ios/DEPS
@@ -1,4 +1,6 @@ include_rules = [ "+ios/web/public", "+net/test/embedded_test_server", + "+components/autofill/ios/browser", + "+components/password_manager/core/browser", ]
diff --git a/components/webauthn/ios/ios_webauthn_credentials_delegate.h b/components/webauthn/ios/ios_webauthn_credentials_delegate.h new file mode 100644 index 0000000..3f1116249 --- /dev/null +++ b/components/webauthn/ios/ios_webauthn_credentials_delegate.h
@@ -0,0 +1,37 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_H_ +#define COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_H_ + +#import "base/memory/weak_ptr.h" +#import "components/password_manager/core/browser/passkey_credential.h" +#import "components/password_manager/core/browser/webauthn_credentials_delegate.h" + +// iOS implementation of WebAuthnCredentialsDelegate. +class IOSWebAuthnCredentialsDelegate + : public password_manager::WebAuthnCredentialsDelegate { + public: + explicit IOSWebAuthnCredentialsDelegate(); + ~IOSWebAuthnCredentialsDelegate() override; + + // password_manager::WebAuthnCredentialsDelegate: + void LaunchSecurityKeyOrHybridFlow() override; + void SelectPasskey(const std::string& backend_id, + OnPasskeySelectedCallback callback) override; + base::expected<const std::vector<password_manager::PasskeyCredential>*, + PasskeysUnavailableReason> + GetPasskeys() const override; + void NotifyForPasskeysDisplay() override; + bool IsSecurityKeyOrHybridFlowAvailable() const override; + void RequestNotificationWhenPasskeysReady( + base::OnceCallback<void()> callback) override; + bool HasPendingPasskeySelection() override; + base::WeakPtr<WebAuthnCredentialsDelegate> AsWeakPtr() override; + + private: + base::WeakPtrFactory<IOSWebAuthnCredentialsDelegate> weak_ptr_factory_{this}; +}; + +#endif // COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_H_
diff --git a/components/webauthn/ios/ios_webauthn_credentials_delegate.mm b/components/webauthn/ios/ios_webauthn_credentials_delegate.mm new file mode 100644 index 0000000..a0993f5 --- /dev/null +++ b/components/webauthn/ios/ios_webauthn_credentials_delegate.mm
@@ -0,0 +1,62 @@ +// 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. + +#import "components/webauthn/ios/ios_webauthn_credentials_delegate.h" + +#import "base/notimplemented.h" + +IOSWebAuthnCredentialsDelegate::IOSWebAuthnCredentialsDelegate() {} + +IOSWebAuthnCredentialsDelegate::~IOSWebAuthnCredentialsDelegate() = default; + +void IOSWebAuthnCredentialsDelegate::LaunchSecurityKeyOrHybridFlow() { + // TODO(crbug.com/459451476): Implement. + NOTIMPLEMENTED(); +} + +void IOSWebAuthnCredentialsDelegate::SelectPasskey( + const std::string& backend_id, + OnPasskeySelectedCallback callback) { + // TODO(crbug.com/459451476): Implement. + NOTIMPLEMENTED(); +} + +base::expected< + const std::vector<password_manager::PasskeyCredential>*, + password_manager::WebAuthnCredentialsDelegate::PasskeysUnavailableReason> +IOSWebAuthnCredentialsDelegate::GetPasskeys() const { + // TODO(crbug.com/459451476): Implement. + NOTIMPLEMENTED(); + return base::unexpected( + IOSWebAuthnCredentialsDelegate::PasskeysUnavailableReason::kNotReceived); +} + +void IOSWebAuthnCredentialsDelegate::NotifyForPasskeysDisplay() { + // TODO(crbug.com/459451476): Implement. + NOTIMPLEMENTED(); +} + +bool IOSWebAuthnCredentialsDelegate::IsSecurityKeyOrHybridFlowAvailable() + const { + // TODO(crbug.com/459451476): Implement. + NOTIMPLEMENTED(); + return false; +} + +void IOSWebAuthnCredentialsDelegate::RequestNotificationWhenPasskeysReady( + base::OnceCallback<void()> callback) { + // TODO(crbug.com/459451476): Implement. + NOTIMPLEMENTED(); +} + +bool IOSWebAuthnCredentialsDelegate::HasPendingPasskeySelection() { + // TODO(crbug.com/459451476): Implement. + NOTIMPLEMENTED(); + return false; +} + +base::WeakPtr<password_manager::WebAuthnCredentialsDelegate> +IOSWebAuthnCredentialsDelegate::AsWeakPtr() { + return weak_ptr_factory_.GetWeakPtr(); +}
diff --git a/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h new file mode 100644 index 0000000..89a7599 --- /dev/null +++ b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h
@@ -0,0 +1,57 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_FACTORY_H_ +#define COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_FACTORY_H_ + +#import "base/memory/raw_ptr.h" +#import "components/webauthn/ios/ios_webauthn_credentials_delegate.h" +#import "ios/web/public/js_messaging/web_frames_manager.h" +#import "ios/web/public/web_state_user_data.h" + +namespace web { +class WebState; +} // namespace web + +// This factory creates and manages the lifecycle of +// IOSWebAuthnCredentialsDelegate objects. There is one factory per WebState, +// and it creates one delegate per WebFrame. +class IOSWebAuthnCredentialsDelegateFactory + : public web::WebFramesManager::Observer, + public web::WebStateUserData<IOSWebAuthnCredentialsDelegateFactory> { + public: + ~IOSWebAuthnCredentialsDelegateFactory() override; + + IOSWebAuthnCredentialsDelegateFactory( + const IOSWebAuthnCredentialsDelegateFactory&) = delete; + IOSWebAuthnCredentialsDelegateFactory& operator=( + const IOSWebAuthnCredentialsDelegateFactory&) = delete; + + // Returns the factory for the given `web_state`, creating one if it doesn't + // already exist. + static IOSWebAuthnCredentialsDelegateFactory* GetFactory( + web::WebState* web_state); + + // Returns the delegate for the given `frame`, creating one if it doesn't + // already exist. + IOSWebAuthnCredentialsDelegate* GetDelegateForFrame( + const std::string& frame_id); + + private: + friend class web::WebStateUserData<IOSWebAuthnCredentialsDelegateFactory>; + + explicit IOSWebAuthnCredentialsDelegateFactory(web::WebState* web_state); + + // web::WebFramesManager::Observer: + void WebFrameBecameUnavailable(web::WebFramesManager* web_frames_manager, + const std::string& frame_id) override; + + // Maps a frame ID to an IOSWebAuthnCredentialsDelegate. + base::flat_map<std::string, std::unique_ptr<IOSWebAuthnCredentialsDelegate>> + delegate_map_; + + raw_ptr<web::WebState> web_state_; +}; + +#endif // COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_FACTORY_H_
diff --git a/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.mm b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.mm new file mode 100644 index 0000000..b9c1ded --- /dev/null +++ b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.mm
@@ -0,0 +1,52 @@ +// 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. + +#import "components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h" + +#import <memory> + +#import "base/containers/flat_map.h" +#import "components/autofill/ios/browser/autofill_java_script_feature.h" +#import "ios/web/public/web_state.h" + +IOSWebAuthnCredentialsDelegateFactory::IOSWebAuthnCredentialsDelegateFactory( + web::WebState* web_state) + : web_state_(web_state) { + autofill::AutofillJavaScriptFeature::GetInstance() + ->GetWebFramesManager(web_state_) + ->AddObserver(this); +} + +IOSWebAuthnCredentialsDelegateFactory:: + ~IOSWebAuthnCredentialsDelegateFactory() { + autofill::AutofillJavaScriptFeature::GetInstance() + ->GetWebFramesManager(web_state_) + ->RemoveObserver(this); +} + +// static +IOSWebAuthnCredentialsDelegateFactory* +IOSWebAuthnCredentialsDelegateFactory::GetFactory(web::WebState* web_state) { + // This does nothing if it already exists. + CreateForWebState(web_state); + return FromWebState(web_state); +} + +IOSWebAuthnCredentialsDelegate* +IOSWebAuthnCredentialsDelegateFactory::GetDelegateForFrame( + const std::string& frame_id) { + auto it = delegate_map_.find(frame_id); + if (it == delegate_map_.end()) { + auto [new_it, inserted] = delegate_map_.try_emplace( + frame_id, std::make_unique<IOSWebAuthnCredentialsDelegate>()); + it = new_it; + } + return it->second.get(); +} + +void IOSWebAuthnCredentialsDelegateFactory::WebFrameBecameUnavailable( + web::WebFramesManager* web_frames_manager, + const std::string& frame_id) { + delegate_map_.erase(frame_id); +}
diff --git a/components/webauthn/ios/ios_webauthn_credentials_delegate_factory_unittest.mm b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory_unittest.mm new file mode 100644 index 0000000..755a964 --- /dev/null +++ b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory_unittest.mm
@@ -0,0 +1,105 @@ +// 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. + +#import "components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h" + +#import "components/autofill/ios/browser/autofill_java_script_feature.h" +#import "ios/web/public/js_messaging/content_world.h" +#import "ios/web/public/test/fakes/fake_web_frame.h" +#import "ios/web/public/test/fakes/fake_web_frames_manager.h" +#import "ios/web/public/test/fakes/fake_web_state.h" +#import "ios/web/public/test/web_task_environment.h" +#import "testing/platform_test.h" + +namespace { + +constexpr std::string kFrameId1 = "frame1"; +constexpr std::string kFrameId2 = "frame2"; + +} // namespace + +class IOSWebAuthnCredentialsDelegateFactoryTest : public PlatformTest { + protected: + void SetUp() override { + web_state_.SetWebFramesManager( + content_world(), std::make_unique<web::FakeWebFramesManager>()); + + factory_ = IOSWebAuthnCredentialsDelegateFactory::GetFactory(&web_state_); + ASSERT_TRUE(factory_); + } + + web::FakeWebFramesManager* web_frames_manager() { + return static_cast<web::FakeWebFramesManager*>( + web_state_.GetWebFramesManager(content_world())); + } + + IOSWebAuthnCredentialsDelegateFactory* factory() { return factory_; } + + web::ContentWorld content_world() { + return autofill::AutofillJavaScriptFeature::GetInstance() + ->GetSupportedContentWorld(); + } + + private: + web::WebTaskEnvironment task_environment_; + web::FakeWebState web_state_; + raw_ptr<IOSWebAuthnCredentialsDelegateFactory> factory_; +}; + +// Tests that the factory creates a delegate for a given frame. +TEST_F(IOSWebAuthnCredentialsDelegateFactoryTest, FactoryCreatesDelegate) { + IOSWebAuthnCredentialsDelegate* delegate = + factory()->GetDelegateForFrame(kFrameId1); + + EXPECT_TRUE(delegate); +} + +// Tests that the factory returns the same delegate for the same frame. +TEST_F(IOSWebAuthnCredentialsDelegateFactoryTest, SameDelegateForSameFrame) { + IOSWebAuthnCredentialsDelegate* delegate1 = + factory()->GetDelegateForFrame(kFrameId1); + + IOSWebAuthnCredentialsDelegate* delegate2 = + factory()->GetDelegateForFrame(kFrameId1); + + EXPECT_EQ(delegate1, delegate2); +} + +// Tests that the factory returns different delegates for different frames. +TEST_F(IOSWebAuthnCredentialsDelegateFactoryTest, + DifferentDelegateForDifferentFrame) { + IOSWebAuthnCredentialsDelegate* delegate1 = + factory()->GetDelegateForFrame(kFrameId1); + + IOSWebAuthnCredentialsDelegate* delegate2 = + factory()->GetDelegateForFrame(kFrameId2); + + EXPECT_NE(delegate1, delegate2); +} + +// Tests that the delegate is destroyed when the associated frame is removed. +TEST_F(IOSWebAuthnCredentialsDelegateFactoryTest, DelegateDestroyedWithFrame) { + auto fake_frame = web::FakeWebFrame::Create(kFrameId1, /*is_main_frame=*/true, + GURL::EmptyGURL()); + web_frames_manager()->AddWebFrame(std::move(fake_frame)); + + // Getting the delegate should create it. + IOSWebAuthnCredentialsDelegate* old_delegate = + factory()->GetDelegateForFrame(kFrameId1); + EXPECT_TRUE(old_delegate); + + // Removing the frame should destroy the delegate. + web_frames_manager()->RemoveWebFrame(kFrameId1); + + // Create another delegate for a different frame to make it less likely + // that the memory address of `old_delegate` is reused. + factory()->GetDelegateForFrame(kFrameId2); + + // Getting the delegate again for the frame with ID `kFrameId1` should create + // a new one. + IOSWebAuthnCredentialsDelegate* new_delegate = + factory()->GetDelegateForFrame(kFrameId1); + EXPECT_TRUE(new_delegate); + EXPECT_NE(old_delegate, new_delegate); +}
diff --git a/components/webrtc_logging/logging_unittest.cc b/components/webrtc_logging/logging_unittest.cc index 731a0d2..e9c02d04 100644 --- a/components/webrtc_logging/logging_unittest.cc +++ b/components/webrtc_logging/logging_unittest.cc
@@ -11,8 +11,10 @@ // since webrtc's logging.h file may conflict with chromium. #include "base/logging.h" + #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" +#include "base/logging/logging_settings.h" #include "build/build_config.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/wifi/wifi_test.cc b/components/wifi/wifi_test.cc index 2fa856e0..019f534 100644 --- a/components/wifi/wifi_test.cc +++ b/components/wifi/wifi_test.cc
@@ -13,6 +13,7 @@ #include "base/command_line.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h"
diff --git a/components/zucchini/zucchini_main.cc b/components/zucchini/zucchini_main.cc index 6b38153..c67a36e5 100644 --- a/components/zucchini/zucchini_main.cc +++ b/components/zucchini/zucchini_main.cc
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/process/memory.h" #include "build/build_config.h" #include "components/zucchini/main_utils.h"
diff --git a/content/app/android/library_loader_hooks.cc b/content/app/android/library_loader_hooks.cc index ddd53600..b095299 100644 --- a/content/app/android/library_loader_hooks.cc +++ b/content/app/android/library_loader_hooks.cc
@@ -6,6 +6,7 @@ #include "base/i18n/icu_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/process/current_process.h" #include "base/trace_event/trace_event.h" #include "content/common/content_constants_internal.h"
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc index 8452292..0cb600c 100644 --- a/content/browser/accessibility/browser_accessibility_android.cc +++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -292,7 +292,12 @@ // a click listener is present in its ancestry chain. if (HasIntAttribute(ax::mojom::IntAttribute::kDefaultActionVerb) && (GetData().GetDefaultActionVerb() != - ax::mojom::DefaultActionVerb::kClickAncestor)) { + ax::mojom::DefaultActionVerb::kClickAncestor) && + (!base::FeatureList::IsEnabled( + features::kAccessibilityRequestLayoutBasedActions) || + GetData().GetDefaultActionVerb() != + ax::mojom::DefaultActionVerb::kClickNotInHitTest) + ) { return true; } @@ -2306,6 +2311,15 @@ return false; } +bool BrowserAccessibilityAndroid::HasLayoutBasedActions() const { + const auto default_action_verb = GetData().GetDefaultActionVerb(); + return default_action_verb == + ax::mojom::DefaultActionVerb::kClickInHitTest || + default_action_verb == + ax::mojom::DefaultActionVerb::kClickNotInHitTest; +} + + bool BrowserAccessibilityAndroid::HasImage() const { if (ui::IsImageOrVideo(GetRole())) { return true;
diff --git a/content/browser/accessibility/browser_accessibility_android.h b/content/browser/accessibility/browser_accessibility_android.h index 29daeb7..e9ba885 100644 --- a/content/browser/accessibility/browser_accessibility_android.h +++ b/content/browser/accessibility/browser_accessibility_android.h
@@ -113,6 +113,7 @@ bool HasCharacterLocations() const; bool HasImage() const; + bool HasLayoutBasedActions() const; const char* GetClassName() const; bool IsChildOfLeaf() const override;
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc index cc82751..fee931c 100644 --- a/content/browser/accessibility/browser_accessibility_manager_android.cc +++ b/content/browser/accessibility/browser_accessibility_manager_android.cc
@@ -284,6 +284,9 @@ ANDROID_ACCESSIBILITY_EVENT_CONTENT_CHANGE_TYPE_STATE_DESCRIPTION); } break; + case ui::AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED: + wcax->HandleDefaultActionVerbChanged(android_node->GetUniqueId()); + break; case ui::AXEventGenerator::Event::DESCRIPTION_CHANGED: { wcax->HandleWindowContentChange( android_node->GetUniqueId(),
diff --git a/content/browser/accessibility/web_contents_accessibility_android.cc b/content/browser/accessibility/web_contents_accessibility_android.cc index ad44d5d..cce49a3 100644 --- a/content/browser/accessibility/web_contents_accessibility_android.cc +++ b/content/browser/accessibility/web_contents_accessibility_android.cc
@@ -925,6 +925,18 @@ unique_id); } +void WebContentsAccessibilityAndroid::HandleDefaultActionVerbChanged( + int32_t unique_id) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); + if (obj.is_null()) { + return; + } + + Java_WebContentsAccessibilityImpl_handleDefaultActionVerbChanged(env, obj, + unique_id); +} + void WebContentsAccessibilityAndroid::AnnounceLiveRegionText( const std::u16string& text) { CHECK(!base::FeatureList::IsEnabled( @@ -1330,7 +1342,8 @@ node->IsFocusable(), node->IsFocused(), node->HasImage(), node->IsPasswordField(), node->IsScrollable(), node->IsSelected(), node->IsVisibleToUser(), node->HasCharacterLocations(), - node->IsRequired(), node->IsHeading() || node->IsTableHeader()); + node->IsRequired(), node->IsHeading() || node->IsTableHeader(), + node->HasLayoutBasedActions()); } void WebContentsAccessibilityAndroid:: @@ -2396,6 +2409,21 @@ return static_cast<jint>(node->GetPaintOrder()); } +void WebContentsAccessibilityAndroid::RequestLayoutBasedActions( + JNIEnv* env, + jint unique_id, + const JavaParamRef<jobject>& info) { + ui::BrowserAccessibility* node = GetAXFromUniqueID(unique_id); + if (!node) { + return; + } + + ui::AXActionData action_data; + action_data.action = ax::mojom::Action::kRequestLayoutBasedAction; + action_data.target_node_id = node->GetId(); + node->AccessibilityPerformAction(action_data); +} + BrowserAccessibilityManagerAndroid* WebContentsAccessibilityAndroid::GetRootBrowserAccessibilityManager() const { if (snapshot_root_manager_) {
diff --git a/content/browser/accessibility/web_contents_accessibility_android.h b/content/browser/accessibility/web_contents_accessibility_android.h index 81a6957a..f08e8737 100644 --- a/content/browser/accessibility/web_contents_accessibility_android.h +++ b/content/browser/accessibility/web_contents_accessibility_android.h
@@ -304,6 +304,12 @@ // Get the paint order for a given node. jint GetPaintOrder(JNIEnv* env, jint unique_id); + // Request layout based actions for a given node. + void RequestLayoutBasedActions( + JNIEnv* env, + jint unique_id, + const base::android::JavaParamRef<jobject>& info); + void UpdateFrameInfo(float page_scale); // Set a new max for TYPE_WINDOW_CONTENT_CHANGED events to fire. @@ -402,6 +408,7 @@ void HandlePaneOpened(int32_t unique_id); // Dispatches LIVE_REGION_NODE_CHANGED AxGeneratedEvents over the JNI Bridge. void HandleLiveRegionNodeChanged(int32_t unique_id); + void HandleDefaultActionVerbChanged(int32_t unique_id); void AnnounceLiveRegionText(const std::u16string& text); void HandleActiveDescendantChanged(int32_t unique_id); void HandleTextSelectionChanged(int32_t unique_id);
diff --git a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc index 529ee8c..da2c6e1 100644 --- a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc +++ b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc
@@ -6,6 +6,7 @@ #include <memory> #include <optional> +#include <string> #include <utility> #include <vector> @@ -149,7 +150,7 @@ UrlLoaderList::iterator it, const GURL& url, NetworkFetchCallback callback, - std::unique_ptr<std::string> response_body) { + std::optional<std::string> response_body) { std::unique_ptr<network::SimpleURLLoader> loader = std::move(*it); loaders_in_progress_.erase(it);
diff --git a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.h b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.h index c834a0cc..3383205 100644 --- a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.h +++ b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.h
@@ -7,6 +7,8 @@ #include <list> #include <memory> +#include <optional> +#include <string> #include <string_view> #include "base/memory/raw_ptr.h" @@ -90,7 +92,7 @@ void OnSimpleLoaderComplete(UrlLoaderList::iterator it, const GURL& url, NetworkFetchCallback callback, - std::unique_ptr<std::string> response_body); + std::optional<std::string> response_body); // Callback for DataDecoder. `expiry_time` will be null if the freshness // lifetime is zero.
diff --git a/content/browser/android/content_feature_map.cc b/content/browser/android/content_feature_map.cc index c024df3..ff8ee32b 100644 --- a/content/browser/android/content_feature_map.cc +++ b/content/browser/android/content_feature_map.cc
@@ -35,6 +35,7 @@ &features::kAccessibilityDeprecateJavaNodeCache, &features::kAccessibilityDeprecateTypeAnnounce, &features::kAccessibilityImproveLiveRegionAnnounce, + &features::kAccessibilityRequestLayoutBasedActions, &features::kAccessibilityPageZoomV2, &features::kAccessibilityPopulateSupplementalDescriptionApi, &features::kAccessibilitySetSelectableOnAllNodesWithText,
diff --git a/content/browser/attribution_reporting/attribution_resolver_impl.cc b/content/browser/attribution_reporting/attribution_resolver_impl.cc index e3ce317..b435e02 100644 --- a/content/browser/attribution_reporting/attribution_resolver_impl.cc +++ b/content/browser/attribution_reporting/attribution_resolver_impl.cc
@@ -494,12 +494,6 @@ return make_result(StoreSourceResult::InternalError()); } - static_assert(AttributionStorageSql::kCurrentVersionNumber < 86); - base::UmaHistogramCustomCounts("Conversions.DbVersionOnSourceStored", - AttributionStorageSql::kCurrentVersionNumber, - /*min=*/56, - /*exclusive_max=*/86, /*buckets=*/30); - return make_result(StoreSourceResult::Success(min_fake_report_time, stored_source->source_id())); }
diff --git a/content/browser/attribution_reporting/attribution_resolver_unittest.cc b/content/browser/attribution_reporting/attribution_resolver_unittest.cc index 8eb7ee6c..fddd119 100644 --- a/content/browser/attribution_reporting/attribution_resolver_unittest.cc +++ b/content/browser/attribution_reporting/attribution_resolver_unittest.cc
@@ -232,10 +232,7 @@ }; TEST_F(AttributionResolverTest, ImpressionStoredAndRetrieved_ValuesIdentical) { - base::HistogramTester histograms; storage()->StoreSource(SourceBuilder().Build()); - histograms.ExpectBucketCount("Conversions.DbVersionOnSourceStored", - AttributionStorageSql::kCurrentVersionNumber, 1); EXPECT_THAT(storage()->GetActiveSources(), ElementsAre(SourceBuilder().BuildStored())); } @@ -477,8 +474,6 @@ } TEST_F(AttributionResolverTest, ConversionReportDeleted_RemovedFromStorage) { - base::HistogramTester histograms; - storage()->StoreSource(SourceBuilder().Build()); EXPECT_EQ(AttributionTrigger::EventLevelResult::kSuccess, MaybeCreateAndStoreEventLevelReport(DefaultTrigger())); @@ -489,7 +484,6 @@ DeleteReports(reports); EXPECT_THAT(storage()->GetAttributionReports(base::Time::Max()), IsEmpty()); - histograms.ExpectTotalCount("Conversions.DbVersionOnReportSentAndDeleted", 1); } TEST_F(AttributionResolverTest,
diff --git a/content/browser/attribution_reporting/attribution_storage_sql.cc b/content/browser/attribution_reporting/attribution_storage_sql.cc index 5bbaf2b..7f20580 100644 --- a/content/browser/attribution_reporting/attribution_storage_sql.cc +++ b/content/browser/attribution_reporting/attribution_storage_sql.cc
@@ -1516,14 +1516,7 @@ return true; } - bool success = DeleteReportInternal(report_id); - if (success) { - base::UmaHistogramCustomCounts( - "Conversions.DbVersionOnReportSentAndDeleted", kCurrentVersionNumber, - /*min=*/58, - /*exclusive_max=*/88, /*buckets=*/30); - } - return success; + return DeleteReportInternal(report_id); } bool AttributionStorageSql::DeleteReportInternal(
diff --git a/content/browser/file_system_access/file_system_access_safe_move_helper.cc b/content/browser/file_system_access/file_system_access_safe_move_helper.cc index 4b5f086..000b82c0 100644 --- a/content/browser/file_system_access/file_system_access_safe_move_helper.cc +++ b/content/browser/file_system_access/file_system_access_safe_move_helper.cc
@@ -117,7 +117,7 @@ // checked_cast<size_t> is safe here: bytes_read < 0 and bytes_read == 0 are // both handled above by code paths that return. - hash_.Update(buffer_->span().first(base::checked_cast<size_t>(bytes_read))); + hash_.Update(buffer_->first(base::checked_cast<size_t>(bytes_read))); ReadMore(); }
diff --git a/content/browser/interest_group/bidding_and_auction_server_key_fetcher.cc b/content/browser/interest_group/bidding_and_auction_server_key_fetcher.cc index 84006336..51dee12 100644 --- a/content/browser/interest_group/bidding_and_auction_server_key_fetcher.cc +++ b/content/browser/interest_group/bidding_and_auction_server_key_fetcher.cc
@@ -4,6 +4,9 @@ #include "content/browser/interest_group/bidding_and_auction_server_key_fetcher.h" +#include <optional> +#include <string> + #include "base/base64.h" #include "base/functional/callback_helpers.h" #include "base/json/json_reader.h" @@ -466,7 +469,7 @@ // Pretend we succeeded in loading from network. OnFetchKeysFromNetworkComplete( std::move(coordinator), - std::make_unique<std::string>(std::move(serialized_keys))); + std::make_optional<std::string>(std::move(serialized_keys))); } void BiddingAndAuctionServerKeyFetcher::FetchKeys( @@ -547,7 +550,7 @@ void BiddingAndAuctionServerKeyFetcher::OnFetchKeysFromNetworkComplete( url::Origin coordinator, - std::unique_ptr<std::string> response) { + std::optional<std::string> response) { PerCoordinatorFetcherState& state = fetcher_state_map_.at(coordinator); bool was_cached = !state.debug_override && state.loader->LoadedFromCache(); state.loader.reset();
diff --git a/content/browser/interest_group/bidding_and_auction_server_key_fetcher.h b/content/browser/interest_group/bidding_and_auction_server_key_fetcher.h index 54813ff..d1c6bd4 100644 --- a/content/browser/interest_group/bidding_and_auction_server_key_fetcher.h +++ b/content/browser/interest_group/bidding_and_auction_server_key_fetcher.h
@@ -202,7 +202,7 @@ // Called when the JSON blob containing the keys have been successfully // fetched over the network. void OnFetchKeysFromNetworkComplete(url::Origin coordinator, - std::unique_ptr<std::string> response); + std::optional<std::string> response); // Called when the JSON blob containing the keys has be parsed into // base::Values. Uses the parsed result to add keys to the cache and calls
diff --git a/content/browser/interest_group/interest_group_permissions_checker.cc b/content/browser/interest_group/interest_group_permissions_checker.cc index 7f240a0..1579fd6 100644 --- a/content/browser/interest_group/interest_group_permissions_checker.cc +++ b/content/browser/interest_group/interest_group_permissions_checker.cc
@@ -4,6 +4,9 @@ #include "content/browser/interest_group/interest_group_permissions_checker.h" +#include <optional> +#include <string> + #include "base/functional/callback.h" #include "base/strings/escape.h" #include "base/strings/strcat.h" @@ -167,7 +170,7 @@ void InterestGroupPermissionsChecker::OnRequestComplete( ActiveRequestMap::iterator active_request, - std::unique_ptr<std::string> response_body) { + std::optional<std::string> response_body) { const auto* response_info = active_request->second->simple_url_loader->ResponseInfo(); if (!response_body || !response_info ||
diff --git a/content/browser/interest_group/interest_group_permissions_checker.h b/content/browser/interest_group/interest_group_permissions_checker.h index f69f4424..3fff19b 100644 --- a/content/browser/interest_group/interest_group_permissions_checker.h +++ b/content/browser/interest_group/interest_group_permissions_checker.h
@@ -5,17 +5,18 @@ #ifndef CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_PERMISSIONS_CHECKER_H_ #define CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_PERMISSIONS_CHECKER_H_ -#include "content/common/content_export.h" - #include <list> #include <map> #include <memory> +#include <optional> +#include <string> #include <tuple> #include "base/functional/callback_forward.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "content/browser/interest_group/interest_group_permissions_cache.h" +#include "content/common/content_export.h" #include "net/base/network_isolation_key.h" #include "services/data_decoder/public/cpp/data_decoder.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" @@ -143,7 +144,7 @@ // Invoked with the result of the ".well-known" fetch for `active_request`. void OnRequestComplete(ActiveRequestMap::iterator active_request, - std::unique_ptr<std::string> response_body); + std::optional<std::string> response_body); // Invoked with the result of parsing the response body associated with // `active_request` as JSON.
diff --git a/content/browser/interest_group/interest_group_update_manager.cc b/content/browser/interest_group/interest_group_update_manager.cc index aa93392..0d80226 100644 --- a/content/browser/interest_group/interest_group_update_manager.cc +++ b/content/browser/interest_group/interest_group_update_manager.cc
@@ -1238,7 +1238,7 @@ UrlLoadersList::iterator simple_url_loader_it, blink::InterestGroupKey group_key, base::TimeTicks start_time, - std::unique_ptr<std::string> fetch_body) { + std::optional<std::string> fetch_body) { DCHECK_EQ(group_key.owner, owners_to_update_.FrontOwner()); DCHECK_GT(num_in_flight_updates_, 0); DCHECK(!waiting_on_db_read_);
diff --git a/content/browser/interest_group/interest_group_update_manager.h b/content/browser/interest_group/interest_group_update_manager.h index c30856a..3c8dd659 100644 --- a/content/browser/interest_group/interest_group_update_manager.h +++ b/content/browser/interest_group/interest_group_update_manager.h
@@ -11,6 +11,7 @@ #include <map> #include <memory> #include <optional> +#include <string> #include "base/containers/circular_deque.h" #include "base/containers/flat_map.h" @@ -218,7 +219,7 @@ UrlLoadersList::iterator simple_url_loader, blink::InterestGroupKey group_key, base::TimeTicks start_time, - std::unique_ptr<std::string> fetch_body); + std::optional<std::string> fetch_body); void DidUpdateInterestGroupsOfOwnerJsonParse( blink::InterestGroupKey group_key, data_decoder::DataDecoder::ValueOrError result);
diff --git a/content/browser/resources/media/media_internals.css b/content/browser/resources/media/media_internals.css index 5574e2d..19f26df4 100644 --- a/content/browser/resources/media/media_internals.css +++ b/content/browser/resources/media/media_internals.css
@@ -182,8 +182,13 @@ } #player-property-table th:first-child, -#player-property-table td:first-child { - width: 250px; +#player-property-table td:first-child, +#log th:nth-child(2), +#log td:nth-child(2) { + width: 80px; + max-width: 130px; + word-wrap: unset; + overflow: hidden; } ul { @@ -370,8 +375,14 @@ #player-actions { display: flex; + flex-wrap: wrap; gap: 10px; - flex-shrink: 0; + align-items: center; +} + +.action-buttons { + display: flex; + gap: 10px; } #player-details-content { @@ -486,12 +497,28 @@ } #player-details-header { - flex-wrap: wrap; - gap: 10px; + flex-direction: column; + align-items: stretch; } #player-actions { - flex-wrap: wrap; + width: 100%; + gap: 10px; + } + + #filter-text { + width: min(200px, 90%); + order: 2; + } + + .action-buttons { + display: flex; + order: 1; + gap: 5px; + } + + .action-buttons button { + padding: 8px 6px; } .mobile-player-view-active #left-pane, @@ -507,6 +534,7 @@ height: 100%; z-index: 2; background-color: var(--background-color); + box-sizing: border-box; } .mobile-player-view-active #close-player-view-button { @@ -517,4 +545,8 @@ #player-property-table td:first-child { width: 80px; } + + #player-details-content { + overflow-x: auto; + } }
diff --git a/content/browser/resources/media/media_internals.html b/content/browser/resources/media/media_internals.html index 24f92896..ffbd730d 100644 --- a/content/browser/resources/media/media_internals.html +++ b/content/browser/resources/media/media_internals.html
@@ -46,9 +46,11 @@ <h2 id="player-details-title">Player Properties</h2> <div id="player-actions"> <input id="filter-text" type="text" placeholder="Filter log..."> - <button id="copy-log-button">Copy All</button> - <button id="save-log-button">Save Log</button> - <button id="close-player-view-button">Close</button> + <div class="action-buttons"> + <button id="copy-log-button">Copy All</button> + <button id="save-log-button">Save Log</button> + <button id="close-player-view-button">Close</button> + </div> </div> </div> <div id="player-details-content">
diff --git a/content/browser/service_worker/service_worker_cache_writer.cc b/content/browser/service_worker/service_worker_cache_writer.cc index 73fc74ba..319e450 100644 --- a/content/browser/service_worker/service_worker_cache_writer.cc +++ b/content/browser/service_worker/service_worker_cache_writer.cc
@@ -864,7 +864,7 @@ checksum_.Update(data->first(length)); } - mojo_base::BigBuffer big_buffer(base::as_bytes(data->span().first(length))); + mojo_base::BigBuffer big_buffer(base::as_bytes(data->first(length))); writer_->WriteData( std::move(big_buffer), base::BindOnce(&AsyncOnlyCompletionCallbackAdaptor::WrappedCallback,
diff --git a/content/browser/shared_storage/shared_storage_worklet_host.cc b/content/browser/shared_storage/shared_storage_worklet_host.cc index d7a3136..d0d187f8 100644 --- a/content/browser/shared_storage/shared_storage_worklet_host.cc +++ b/content/browser/shared_storage/shared_storage_worklet_host.cc
@@ -1822,7 +1822,7 @@ } void SharedStorageWorkletHost::OnOptInRequestComplete( - std::unique_ptr<std::string> response_body) { + std::optional<std::string> response_body) { const auto* response_info = data_origin_opt_in_url_loader_->ResponseInfo(); if (!response_body || !response_info || !blink::IsJSONMimeType(response_info->mime_type)) {
diff --git a/content/browser/shared_storage/shared_storage_worklet_host.h b/content/browser/shared_storage/shared_storage_worklet_host.h index ec73e670..23f242d 100644 --- a/content/browser/shared_storage/shared_storage_worklet_host.h +++ b/content/browser/shared_storage/shared_storage_worklet_host.h
@@ -227,7 +227,7 @@ bool opted_in, std::string data_origin_opt_in_error_message); - void OnOptInRequestComplete(std::unique_ptr<std::string> response_body); + void OnOptInRequestComplete(std::optional<std::string> response_body); void OnJsonParsed(std::optional<base::Value::List> result);
diff --git a/content/browser/webid/idp_network_request_manager.cc b/content/browser/webid/idp_network_request_manager.cc index c1e7b88..d6f41afef 100644 --- a/content/browser/webid/idp_network_request_manager.cc +++ b/content/browser/webid/idp_network_request_manager.cc
@@ -4,6 +4,9 @@ #include "content/browser/webid/idp_network_request_manager.h" +#include <optional> +#include <string> + #include "base/barrier_closure.h" #include "base/base64.h" #include "base/containers/flat_set.h" @@ -900,7 +903,7 @@ } void OnLogoutCompleted(IdpNetworkRequestManager::LogoutCallback callback, - std::unique_ptr<std::string> response_body, + std::optional<std::string> response_body, int response_code, const std::string& mime_type, bool cors_error) { @@ -1400,7 +1403,7 @@ void IdpNetworkRequestManager::OnDownloadedImage( ImageCallback callback, - std::unique_ptr<std::string> response_body, + std::optional<std::string> response_body, int response_code, const std::string& mime_type, bool cors_error) {
diff --git a/content/browser/webid/idp_network_request_manager.h b/content/browser/webid/idp_network_request_manager.h index a06c59d..435e70a 100644 --- a/content/browser/webid/idp_network_request_manager.h +++ b/content/browser/webid/idp_network_request_manager.h
@@ -358,7 +358,7 @@ bool IsCrossSiteIframe() const; void OnDownloadedImage(ImageCallback callback, - std::unique_ptr<std::string> response_body, + std::optional<std::string> response_body, int response_code, const std::string& mime_type, bool cors_error);
diff --git a/content/browser/webid/navigation_interceptor.cc b/content/browser/webid/navigation_interceptor.cc index fcf013c..a8e31bb 100644 --- a/content/browser/webid/navigation_interceptor.cc +++ b/content/browser/webid/navigation_interceptor.cc
@@ -10,6 +10,7 @@ #include "base/values.h" #include "content/browser/webid/flags.h" #include "content/browser/webid/request_service.h" +#include "content/browser/webid/webid_utils.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" @@ -38,10 +39,11 @@ NavigationThrottleRegistry& registry) : NavigationInterceptor( registry, - base::BindRepeating([](content::RenderFrameHost* rfh) - -> blink::mojom::FederatedAuthRequest* { - return webid::RequestService::GetOrCreateForCurrentDocument(rfh); - })) {} + base::BindRepeating( + [](content::RenderFrameHost* rfh) -> RequestService* { + return webid::RequestService::GetOrCreateForCurrentDocument( + rfh); + })) {} NavigationInterceptor::NavigationInterceptor( NavigationThrottleRegistry& registry, @@ -58,6 +60,12 @@ return PROCEED; } + // Only intercept user-initiated navigations because we want to use + // active mode. + if (!DidNavigationHandleHaveActivation(navigation_handle())) { + return PROCEED; + } + auto* headers = navigation_handle()->GetResponseHeaders(); if (!headers) { @@ -121,6 +129,7 @@ service_builder_.Run(rfh)->RequestToken( std::move(*idp_get_params_vector), password_manager::CredentialMediationRequirement::kOptional, + navigation_handle(), base::BindOnce(&NavigationInterceptor::OnTokenResponse, weak_ptr_factory_.GetWeakPtr())); }
diff --git a/content/browser/webid/navigation_interceptor.h b/content/browser/webid/navigation_interceptor.h index e5d1e0c..c7978e96 100644 --- a/content/browser/webid/navigation_interceptor.h +++ b/content/browser/webid/navigation_interceptor.h
@@ -22,6 +22,7 @@ class RenderFrameHost; namespace webid { +class RequestService; // The NavigationInterceptor enables Identity Providers to control // navigations to their endpoints by cancelling it and replacing it @@ -45,8 +46,7 @@ }; using RequestServiceBuilder = - base::RepeatingCallback<blink::mojom::FederatedAuthRequest*( - content::RenderFrameHost* rfh)>; + base::RepeatingCallback<RequestService*(content::RenderFrameHost* rfh)>; explicit NavigationInterceptor(NavigationThrottleRegistry& registry); NavigationInterceptor(NavigationThrottleRegistry& registry,
diff --git a/content/browser/webid/navigation_interceptor_unittest.cc b/content/browser/webid/navigation_interceptor_unittest.cc index bbee44cf..e22e6b75 100644 --- a/content/browser/webid/navigation_interceptor_unittest.cc +++ b/content/browser/webid/navigation_interceptor_unittest.cc
@@ -10,6 +10,8 @@ #include "base/strings/string_util.h" #include "base/test/bind.h" #include "base/test/task_environment.h" +#include "content/browser/webid/accounts_fetcher.h" +#include "content/browser/webid/request_service.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/web_contents_observer.h" @@ -26,12 +28,26 @@ #include "url/gurl.h" using ::testing::_; +using testing::WithArgs; namespace content::webid { -class MockFederatedAuthRequest : public blink::mojom::FederatedAuthRequest { +class InterceptorMockNavigationHandle : public MockNavigationHandle { public: - explicit MockFederatedAuthRequest() {} + explicit InterceptorMockNavigationHandle(WebContents* web_contents) + : MockNavigationHandle(web_contents) {} + + blink::mojom::NavigationInitiatorActivationAndAdStatus + GetNavigationInitiatorActivationAndAdStatus() override { + return blink::mojom::NavigationInitiatorActivationAndAdStatus:: + kStartedWithTransientActivationFromNonAd; + } +}; + +class MockFederatedAuthRequest : public RequestService { + public: + explicit MockFederatedAuthRequest(RenderFrameHost* rfh) + : RequestService(rfh) {} MOCK_METHOD( void, @@ -39,6 +55,7 @@ (std::vector<blink::mojom::IdentityProviderGetParametersPtr> idp_get_params, password_manager::CredentialMediationRequirement mediation_requirement, + NavigationHandle* navigation_handle, RequestTokenCallback callback), (override)); MOCK_METHOD(void, CancelTokenRequest, (), (override)); @@ -181,10 +198,11 @@ data_decoder::test::InProcessDataDecoder in_process_data_decoder; std::unique_ptr<MockFederatedAuthRequest> federated_auth_request = - std::make_unique<MockFederatedAuthRequest>(); + std::make_unique<MockFederatedAuthRequest>( + web_contents()->GetPrimaryMainFrame()); NavigateAndCommit(GURL("https://rp.example/")); - content::MockNavigationHandle mock_navigation_handle(web_contents()); + InterceptorMockNavigationHandle mock_navigation_handle(web_contents()); mock_navigation_handle.set_render_frame_host( web_contents()->GetPrimaryMainFrame()); mock_navigation_handle.set_is_in_primary_main_frame(true); @@ -202,16 +220,16 @@ content::MockNavigationThrottleRegistry registry(&mock_navigation_handle); webid::NavigationInterceptor interceptor( - registry, base::BindLambdaForTesting( - [&federated_auth_request](content::RenderFrameHost* rfh) - -> blink::mojom::FederatedAuthRequest* { - return federated_auth_request.get(); - })); + registry, + base::BindLambdaForTesting( + [&federated_auth_request](RenderFrameHost* rfh) -> RequestService* { + return federated_auth_request.get(); + })); GURL redirect_to("https://rp.example"); - EXPECT_CALL(*federated_auth_request.get(), RequestToken(_, _, _)) - .WillOnce(testing::WithArgs<2>( + EXPECT_CALL(*federated_auth_request.get(), RequestToken) + .WillOnce(WithArgs<3>( [&redirect_to]( blink::mojom::FederatedAuthRequest::RequestTokenCallback callback) { @@ -234,14 +252,15 @@ EXPECT_EQ(observer.started_url(), redirect_to); } -TEST_F(NavigationInterceptorTest, WillProcessResponseTokenRequestFails) { - // Uses an in-process data decoder service for testing. - data_decoder::test::InProcessDataDecoder in_process_data_decoder; - - auto federated_auth_request = std::make_unique<MockFederatedAuthRequest>(); +TEST_F(NavigationInterceptorTest, WillProcessResponseNoActivation) { + std::unique_ptr<MockFederatedAuthRequest> federated_auth_request = + std::make_unique<MockFederatedAuthRequest>( + web_contents()->GetPrimaryMainFrame()); NavigateAndCommit(GURL("https://rp.example/")); - content::MockNavigationHandle mock_navigation_handle(web_contents()); + // MockNavigationHandle (as opposed to InterceptorNavigationHandle) does not + // have activation. + MockNavigationHandle mock_navigation_handle(web_contents()); mock_navigation_handle.set_render_frame_host( web_contents()->GetPrimaryMainFrame()); mock_navigation_handle.set_is_in_primary_main_frame(true); @@ -259,14 +278,51 @@ content::MockNavigationThrottleRegistry registry(&mock_navigation_handle); webid::NavigationInterceptor interceptor( - registry, base::BindLambdaForTesting( - [&federated_auth_request](content::RenderFrameHost* rfh) - -> blink::mojom::FederatedAuthRequest* { - return federated_auth_request.get(); - })); + registry, + base::BindLambdaForTesting( + [&federated_auth_request](RenderFrameHost* rfh) -> RequestService* { + return federated_auth_request.get(); + })); - EXPECT_CALL(*federated_auth_request.get(), RequestToken(_, _, _)) - .WillOnce(testing::WithArgs<2>( + // Because there was no activation, we should proceed. + auto result = interceptor.WillProcessResponse(); + EXPECT_EQ(result, content::NavigationThrottle::PROCEED); +} + +TEST_F(NavigationInterceptorTest, WillProcessResponseTokenRequestFails) { + // Uses an in-process data decoder service for testing. + data_decoder::test::InProcessDataDecoder in_process_data_decoder; + + auto federated_auth_request = std::make_unique<MockFederatedAuthRequest>( + web_contents()->GetPrimaryMainFrame()); + + NavigateAndCommit(GURL("https://rp.example/")); + InterceptorMockNavigationHandle mock_navigation_handle(web_contents()); + mock_navigation_handle.set_render_frame_host( + web_contents()->GetPrimaryMainFrame()); + mock_navigation_handle.set_is_in_primary_main_frame(true); + + auto headers = base::MakeRefCounted<net::HttpResponseHeaders>(""); + headers->AddHeader("FedCM-Intercept-Navigation", + net::structured_headers::SerializeDictionary( + webid::EncodeParams({ + {"config_url", "https://idp.example/fedcm.json"}, + {"client_id", "1234"}, + })) + .value()); + mock_navigation_handle.set_response_headers(headers); + + content::MockNavigationThrottleRegistry registry(&mock_navigation_handle); + + webid::NavigationInterceptor interceptor( + registry, + base::BindLambdaForTesting( + [&federated_auth_request](RenderFrameHost* rfh) -> RequestService* { + return federated_auth_request.get(); + })); + + EXPECT_CALL(*federated_auth_request.get(), RequestToken) + .WillOnce(WithArgs<3>( [](blink::mojom::FederatedAuthRequest::RequestTokenCallback callback) { std::move(callback).Run(
diff --git a/content/browser/webid/network_request_manager.cc b/content/browser/webid/network_request_manager.cc index d71da1f2..bfc4a00 100644 --- a/content/browser/webid/network_request_manager.cc +++ b/content/browser/webid/network_request_manager.cc
@@ -4,7 +4,11 @@ #include "content/browser/webid/network_request_manager.h" +#include <optional> +#include <string> + #include "base/strings/string_util.h" +#include "base/types/optional_ref.h" #include "content/browser/devtools/devtools_instrumentation.h" #include "content/browser/webid/flags.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" @@ -26,7 +30,7 @@ // response size that is a part of this protocol. constexpr int maxResponseSizeInKiB = 1024; -ParseStatus GetResponseError(std::string* response_body, +ParseStatus GetResponseError(base::optional_ref<std::string> response_body, int response_code, const std::string& mime_type) { if (response_code == net::HTTP_NOT_FOUND) { @@ -64,12 +68,12 @@ } void OnDownloadedJson(ParseJsonCallback parse_json_callback, - std::unique_ptr<std::string> response_body, + std::optional<std::string> response_body, int response_code, const std::string& mime_type, bool cors_error) { ParseStatus parse_status = - GetResponseError(response_body.get(), response_code, mime_type); + GetResponseError(response_body, response_code, mime_type); if (parse_status != ParseStatus::kSuccess) { std::move(parse_json_callback) @@ -193,7 +197,7 @@ void NetworkRequestManager::OnDownloadedUrl( std::unique_ptr<network::SimpleURLLoader> url_loader, DownloadCallback callback, - std::unique_ptr<std::string> response_body) { + std::optional<std::string> response_body) { auto* response_info = url_loader->ResponseInfo(); // Use the HTTP response code, if available. If it is not available, use the // NetError(). Note that it is acceptable to put these in the same int because @@ -210,7 +214,7 @@ if (it != urlloader_devtools_request_id_map_.end()) { auto request_id = it->second; const std::string& response_body_str = - response_body ? *response_body : std::string(); + response_body.value_or(std::string()); auto completion_status = status.value_or( network::URLLoaderCompletionStatus(url_loader->NetError()));
diff --git a/content/browser/webid/network_request_manager.h b/content/browser/webid/network_request_manager.h index d56c2638..4faf1f4 100644 --- a/content/browser/webid/network_request_manager.h +++ b/content/browser/webid/network_request_manager.h
@@ -24,7 +24,7 @@ namespace content::webid { using DownloadCallback = - base::OnceCallback<void(std::unique_ptr<std::string> response_body, + base::OnceCallback<void(std::optional<std::string> response_body, int response_code, const std::string& mime_type, bool cors_error)>; @@ -103,7 +103,7 @@ // Called when download initiated by DownloadUrl() completes. void OnDownloadedUrl(std::unique_ptr<network::SimpleURLLoader> url_loader, DownloadCallback callback, - std::unique_ptr<std::string> response_body); + std::optional<std::string> response_body); std::unique_ptr<network::ResourceRequest> CreateUncredentialedResourceRequest( const GURL& target_url,
diff --git a/content/browser/webid/request_service.cc b/content/browser/webid/request_service.cc index 8c79dd9..6671138f 100644 --- a/content/browser/webid/request_service.cc +++ b/content/browser/webid/request_service.cc
@@ -40,6 +40,7 @@ #include "content/browser/webid/webid_utils.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/webid/federated_identity_api_permission_context_delegate.h" @@ -283,6 +284,16 @@ std::vector<IdentityProviderGetParametersPtr> idp_get_params_ptrs, MediationRequirement requirement, RequestTokenCallback callback) { + // This call is coming from Mojo, so we have no navigation handle. + RequestToken(std::move(idp_get_params_ptrs), requirement, + /*navigation_handle=*/nullptr, std::move(callback)); +} + +void RequestService::RequestToken( + std::vector<IdentityProviderGetParametersPtr> idp_get_params_ptrs, + MediationRequirement requirement, + NavigationHandle* navigation_handle, + RequestTokenCallback callback) { if (ShouldTerminateRequest(idp_get_params_ptrs, requirement)) { return; } @@ -337,6 +348,8 @@ } had_transient_user_activation_ = + (navigation_handle && + DidNavigationHandleHaveActivation(navigation_handle)) || render_frame_host().HasTransientUserActivation(); // Store the previous `idp_order_` value from this class. Note that this is {}
diff --git a/content/browser/webid/request_service.h b/content/browser/webid/request_service.h index 0c8e875..492deaa 100644 --- a/content/browser/webid/request_service.h +++ b/content/browser/webid/request_service.h
@@ -41,6 +41,7 @@ class FederatedIdentityAutoReauthnPermissionContextDelegate; class FederatedIdentityPermissionContextDelegate; +class NavigationHandle; class RenderFrameHost; namespace webid { @@ -111,6 +112,16 @@ // this method. void ResetAndDeleteThisForTesting(); + // An overload of the mojo version of RequestToken. If |navigation_handle| + // is provided, that handle is checked to see if user activation is present. + // This is virtual so that it can be mocked.MockNavigationThrottleRegistry + virtual void RequestToken( + std::vector<blink::mojom::IdentityProviderGetParametersPtr> + idp_get_params_ptrs, + MediationRequirement requirement, + NavigationHandle* navigation_handle, + RequestTokenCallback); + // blink::mojom::FederatedAuthRequest: void RequestToken(std::vector<blink::mojom::IdentityProviderGetParametersPtr> idp_get_params_ptrs,
diff --git a/content/browser/webid/webid_utils.cc b/content/browser/webid/webid_utils.cc index b3e36fd..e28eb49 100644 --- a/content/browser/webid/webid_utils.cc +++ b/content/browser/webid/webid_utils.cc
@@ -14,6 +14,7 @@ #include "content/browser/webid/metrics.h" #include "content/browser/webid/request_page_data.h" #include "content/public/browser/browser_context.h" +#include "content/public/browser/navigation_handle.h" #include "content/public/browser/runtime_feature_state/runtime_feature_state_document_data.h" #include "content/public/browser/webid/federated_identity_api_permission_context_delegate.h" #include "content/public/browser/webid/federated_identity_permission_context_delegate.h" @@ -470,6 +471,12 @@ } } +bool DidNavigationHandleHaveActivation(NavigationHandle* handle) { + return handle->GetNavigationInitiatorActivationAndAdStatus() != + blink::mojom::NavigationInitiatorActivationAndAdStatus:: + kDidNotStartWithTransientActivation; +} + perfetto::NamedTrack CreatePerfettoTrackForFedCM(void* class_pointer) { return perfetto::NamedTrack::ThreadScoped( "FedCM", reinterpret_cast<uintptr_t>(class_pointer));
diff --git a/content/browser/webid/webid_utils.h b/content/browser/webid/webid_utils.h index d62046ea..c681ac0 100644 --- a/content/browser/webid/webid_utils.h +++ b/content/browser/webid/webid_utils.h
@@ -27,6 +27,7 @@ class FederatedIdentityApiPermissionContextDelegate; class FederatedIdentityPermissionContextDelegate; enum class IdpSigninStatus; +class NavigationHandle; class RenderFrameHost; namespace webid { @@ -116,6 +117,8 @@ const char* fetch_description, int response_code); +bool DidNavigationHandleHaveActivation(NavigationHandle* handle); + // Creates a Perfetto track for the class pointed to by `class_pointer`. perfetto::NamedTrack CreatePerfettoTrackForFedCM(void* class_pointer);
diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc index 1429422..2b38e39 100644 --- a/content/child/child_thread_impl.cc +++ b/content/child/child_thread_impl.cc
@@ -23,6 +23,7 @@ #include "base/functional/callback_helpers.h" #include "base/location.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/memory/memory_pressure_listener.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_pump.h"
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java index 706799e..3bfe892 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java
@@ -137,6 +137,9 @@ "AccessibilityNodeInfo.requestImageData"; public static final String EXTRAS_KEY_IMAGE_DATA = "AccessibilityNodeInfo.imageData"; + public static final String EXTRAS_KEY_REQUEST_LAYOUT_BASED_ACTIONS = + "AccessibilityNodeInfo.requestLayoutBasedActions"; + public static final String ACCESSIBILITY_SPANNABLE_CREATION_TIME = "Accessibility.Android.Performance.SpannableCreationTime2"; private static final int MAX_TIME_BUCKET = 5 * 1000; // 5,000 microseconds = 5ms. @@ -199,7 +202,8 @@ boolean visibleToUser, boolean hasCharacterLocations, boolean isRequired, - boolean isHeading) { + boolean isHeading, + boolean hasLayoutBasedActions) { node.setCheckable(checkable); node.setClickable(clickable); node.setEditable(editable); @@ -225,6 +229,11 @@ availableExtraData.add(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY); availableExtraData.add(EXTRA_DATA_TEXT_CHARACTER_LOCATION_IN_WINDOW_KEY); } + + if (clickable && !hasLayoutBasedActions) { + availableExtraData.add(EXTRAS_KEY_REQUEST_LAYOUT_BASED_ACTIONS); + } + node.setAvailableExtraData(availableExtraData); node.setMovementGranularities(
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java index 0122005cd..3b7812f 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java
@@ -55,6 +55,7 @@ import static org.chromium.build.NullUtil.assumeNonNull; import static org.chromium.content.browser.accessibility.AccessibilityNodeInfoBuilder.EXTRAS_DATA_REQUEST_IMAGE_DATA_KEY; import static org.chromium.content.browser.accessibility.AccessibilityNodeInfoBuilder.EXTRAS_KEY_URL; +import static org.chromium.content.browser.accessibility.AccessibilityNodeInfoBuilder.EXTRAS_KEY_REQUEST_LAYOUT_BASED_ACTIONS; import static org.chromium.content_public.browser.ContentFeatureList.ACCESSIBILITY_MANAGE_BROADCAST_RECEIVER_ON_BACKGROUND; import android.annotation.SuppressLint; @@ -2128,6 +2129,21 @@ } @CalledByNative + private void handleDefaultActionVerbChanged(int virtualViewId) { + if (isAccessibilityEnabled()) { + // TODO(crbug.com/460580025): Check if AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED + // is the right type to use here. + AccessibilityEvent event = + AccessibilityEvent.obtain(AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + if (event == null) { + return; + } + event.setSource(mView, virtualViewId); + requestSendAccessibilityEvent(event); + } + } + + @CalledByNative private void announceLiveRegionText(String text) { assert !ContentFeatureMap.isEnabled( ContentFeatureList.ACCESSIBILITY_DEPRECATE_TYPE_ANNOUNCE) @@ -2269,6 +2285,9 @@ case EXTRA_DATA_ABSOLUTE_DRAWING_ORDER_KEY: getPaintOrder(virtualViewId, info); break; + case EXTRAS_KEY_REQUEST_LAYOUT_BASED_ACTIONS: + requestLayoutBasedActions(virtualViewId, info); + break; } } @@ -2342,6 +2361,11 @@ info.getExtras().putInt(EXTRA_DATA_ABSOLUTE_DRAWING_ORDER_KEY, paintOrder); } + private void requestLayoutBasedActions(int virtualViewId, AccessibilityNodeInfoCompat info) { + WebContentsAccessibilityImplJni.get() + .requestLayoutBasedActions(mNativeObj, virtualViewId, info); + } + @NativeMethods interface Natives { long init( @@ -2518,5 +2542,9 @@ boolean hasSentPreviousRequest); int getPaintOrder(long nativeWebContentsAccessibilityAndroid, int id); + void requestLayoutBasedActions( + long nativeWebContentsAccessibilityAndroid, + int id, + AccessibilityNodeInfoCompat info); } }
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index 2d1fd4c..6030fca 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -1291,6 +1291,14 @@ BASE_FEATURE(kAccessibilityImproveLiveRegionAnnounce, base::FEATURE_DISABLED_BY_DEFAULT); +// When this feature is enabled, the accessibility tree will be requested to +// layout based on the actions that are performed on the renderer side. In +// particular this will be used to determine whether or not a node is clickable +// or not. +BASE_FEATURE(kAccessibilityRequestLayoutBasedActions, + "AccessibilityRequestLayoutBasedActions", + base::FEATURE_DISABLED_BY_DEFAULT); + // Enables the second iteration of AccessibilityPageZoom, which continues // the work completed in the first experiment and the subsequent fast-follow. // This version of the experiment explores enabling OS-level adjustments.
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index 29c999a0..58359ed 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -348,6 +348,7 @@ kAccessibilityDeprecateJavaNodeCacheDisableCache; CONTENT_EXPORT BASE_DECLARE_FEATURE(kAccessibilityDeprecateTypeAnnounce); CONTENT_EXPORT BASE_DECLARE_FEATURE(kAccessibilityImproveLiveRegionAnnounce); +CONTENT_EXPORT BASE_DECLARE_FEATURE(kAccessibilityRequestLayoutBasedActions); CONTENT_EXPORT BASE_DECLARE_FEATURE(kAccessibilityPageZoomV2); CONTENT_EXPORT BASE_DECLARE_FEATURE( kAccessibilityPopulateSupplementalDescriptionApi);
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc index edb07d83..b7102147 100644 --- a/content/renderer/accessibility/render_accessibility_impl.cc +++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -416,6 +416,7 @@ case ax::mojom::Action::kStopDuckingMedia: case ax::mojom::Action::kSuspendMedia: case ax::mojom::Action::kLongClick: + case ax::mojom::Action::kRequestLayoutBasedAction: break; } }
diff --git a/content/renderer/font_data/font_data_manager.cc b/content/renderer/font_data/font_data_manager.cc index ed1302a..9ef41c24 100644 --- a/content/renderer/font_data/font_data_manager.cc +++ b/content/renderer/font_data/font_data_manager.cc
@@ -80,8 +80,9 @@ FontDataManager::~FontDataManager() = default; int FontDataManager::onCountFamilies() const { + base::AutoLock locked(family_names_lock_); if (family_names_.empty()) { - GetAllFamilyNames(); + GetAllFamilyNamesLockRequired(); } return family_names_.size(); @@ -89,14 +90,15 @@ void FontDataManager::onGetFamilyName(int index, SkString* requested_family_name) const { - if (family_names_.empty()) { - GetAllFamilyNames(); - } - if (index < 0) { return; } + base::AutoLock locked(family_names_lock_); + if (family_names_.empty()) { + GetAllFamilyNamesLockRequired(); + } + size_t family_index = static_cast<size_t>(index); if (family_index >= family_names_.size()) { return; @@ -341,7 +343,7 @@ // request that resolves to the same font file. base::MemoryMappedFile* file_mapping = nullptr; { - base::AutoLock locked(lock_); + base::AutoLock locked(mapped_files_lock_); std::unique_ptr<base::MemoryMappedFile>& mapped_files_entry = mapped_files_[match_result->typeface_data->get_font_file()->id]; @@ -374,7 +376,7 @@ // process. A cache is used to avoid mapping the same memory space // multiple time. { - base::AutoLock locked(lock_); + base::AutoLock locked(mapped_regions_lock_); const auto iter = mapped_regions_.find(font_data_memory_region.GetGUID()); @@ -405,13 +407,13 @@ return typeface; } -void FontDataManager::GetAllFamilyNames() const { +void FontDataManager::GetAllFamilyNamesLockRequired() const { GetRemoteFontDataService().GetAllFamilyNames(&family_names_); } std::optional<sk_sp<SkTypeface>> FontDataManager::TryGetFromCache( const FontDataManager::MatchFamilyRequest& request) const { - base::AutoLock locked(lock_); + base::AutoLock locked(typeface_cache_lock_); auto iter = typeface_cache_.Get(request); if (iter != typeface_cache_.end()) { return iter->second; @@ -423,7 +425,7 @@ void FontDataManager::AddToCache( const FontDataManager::MatchFamilyRequest& request, sk_sp<SkTypeface> typeface) const { - base::AutoLock locked(lock_); + base::AutoLock locked(typeface_cache_lock_); typeface_cache_.Put(std::move(request), typeface); }
diff --git a/content/renderer/font_data/font_data_manager.h b/content/renderer/font_data/font_data_manager.h index 1eb4b43..e9d59ad 100644 --- a/content/renderer/font_data/font_data_manager.h +++ b/content/renderer/font_data/font_data_manager.h
@@ -90,8 +90,9 @@ mojom::MatchFamilyNameResultPtr match_result) const; // This must be const to allow being called from onCountFamilies and - // onGetFamilyNames, but it does mutate family_names_. - void GetAllFamilyNames() const; + // onGetFamilyNames, but it does mutate family_names_. Requires holding + // `family_names_lock_`. + void GetAllFamilyNamesLockRequired() const; // Key of the typeface_cache_. struct MatchFamilyRequest { @@ -131,21 +132,32 @@ lhs.width == rhs.width && lhs.slant == rhs.slant; } }; - // Cache of the font requests to existing typefaces. + + // Calls to this class can be on any thread hence there is a lock to guard + // each of the caches. The mapped regions, mapped files, typeface, and family + // names caches are independent of one another (they're not read/written in + // the same circumstances and they don't have to stay in sync), so they can + // each get a separate lock. + mutable base::Lock mapped_regions_lock_; + mutable base::Lock mapped_files_lock_; + mutable base::Lock family_names_lock_; + mutable base::Lock typeface_cache_lock_; + + // Cache of the font requests to existing typefaces. Allows replying directly + // with a typeface for a match request that was already made. mutable base::HashingLRUCache<MatchFamilyRequest, sk_sp<SkTypeface>, MatchFamilyRequestHash, MatchFamilyRequestEqual> - typeface_cache_; + typeface_cache_ GUARDED_BY(typeface_cache_lock_); - // Calls to this class can be on any thread hence there is a lock to guard - // the cache. - mutable base::Lock lock_; - - // Cache of the shared memory region by GUID to known font mappings. + // Cache of the shared memory region by GUID to known font mappings. Allows + // reusing a pre-existing shared memory region if it contains the data + // required to fulfill a match request even though that match request doesn't + // correspond to a typeface cached in `typeface_cache_`. mutable absl::flat_hash_map<base::UnguessableToken, base::ReadOnlySharedMemoryMapping> - mapped_regions_; + mapped_regions_ GUARDED_BY(mapped_regions_lock_); // Cache of the memory mapped files to ensure the mapping lives. // The key is an ID received from the renderer along with the handle that @@ -159,13 +171,13 @@ // typeface objects that reference them which can be used for the entire // lifetime of the renderer process. mutable absl::flat_hash_map<uint64_t, std::unique_ptr<base::MemoryMappedFile>> - mapped_files_ GUARDED_BY(lock_); + mapped_files_ GUARDED_BY(mapped_files_lock_); // A cache of all the font family names that could be returned by // onGetFamilyName. When populated, this has the same amount of elements as // returned by onCountFamilies. This is populated on the first call to either // onCountFamilies or onGetFamilyName. - mutable std::vector<std::string> family_names_; + mutable std::vector<std::string> family_names_ GUARDED_BY(family_names_lock_); #if BUILDFLAG(ENABLE_FREETYPE) sk_sp<SkFontMgr> custom_fnt_mgr_;
diff --git a/content/shell/app/shell_main_delegate.cc b/content/shell/app/shell_main_delegate.cc index 8ba5b711..3cd7013 100644 --- a/content/shell/app/shell_main_delegate.cc +++ b/content/shell/app/shell_main_delegate.cc
@@ -17,6 +17,7 @@ #include "base/files/file.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/no_destructor.h" #include "base/path_service.h" #include "base/process/current_process.h"
diff --git a/content/shell/browser/shell_platform_delegate_mac.mm b/content/shell/browser/shell_platform_delegate_mac.mm index 2c4a400..1994e7f 100644 --- a/content/shell/browser/shell_platform_delegate_mac.mm +++ b/content/shell/browser/shell_platform_delegate_mac.mm
@@ -82,7 +82,7 @@ namespace { -NSString* kWindowTitle = @"Content Shell"; +NSString* const kWindowTitle = @"Content Shell"; // Layout constants (in view coordinates) const CGFloat kButtonWidth = 72;
diff --git a/content/test/gpu/gpu_tests/pixel_integration_test.py b/content/test/gpu/gpu_tests/pixel_integration_test.py index 3b32c269..8cf122d 100644 --- a/content/test/gpu/gpu_tests/pixel_integration_test.py +++ b/content/test/gpu/gpu_tests/pixel_integration_test.py
@@ -80,6 +80,14 @@ 'Pixel_OffscreenCanvasWebGLSoftwareCompositingWorker', } + if host_information.IsMac() and host_information.Isx86Cpu(): + serial_tests |= { + # Can take a while to finish and does not reliably send heartbeats in + # the meantime. To avoid potential slowdowns from other tests which + # cause flaky timeouts, run this test serially on older hardware. + 'Pixel_SVGHuge', + } + if host_information.IsWindows() and host_information.IsArmCpu(): serial_tests |= { # Context loss tests don't like being run in parallel on Windows
diff --git a/content/zygote/zygote_linux.cc b/content/zygote/zygote_linux.cc index c90abfa..5a6f1c0 100644 --- a/content/zygote/zygote_linux.cc +++ b/content/zygote/zygote_linux.cc
@@ -25,6 +25,7 @@ #include "base/files/platform_file.h" #include "base/linux_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/metrics/histogram_shared_memory.h" #include "base/notreached.h" #include "base/numerics/safe_conversions.h"
diff --git a/crypto/BUILD.gn b/crypto/BUILD.gn index b2a61b9..e42d1187 100644 --- a/crypto/BUILD.gn +++ b/crypto/BUILD.gn
@@ -97,6 +97,8 @@ "apple/keychain_util.mm", "apple/keychain_v2.h", "apple/keychain_v2.mm", + "apple/scoped_keychain_user_interaction_allowed.cc", + "apple/scoped_keychain_user_interaction_allowed.h", ] if (is_mac) {
diff --git a/crypto/apple/keychain.cc b/crypto/apple/keychain.cc index b4c6b43..9544f6eb 100644 --- a/crypto/apple/keychain.cc +++ b/crypto/apple/keychain.cc
@@ -21,50 +21,4 @@ Keychain::Keychain() = default; Keychain::~Keychain() = default; -#if BUILDFLAG(IS_MAC) - -// ---------- ScopedKeychainUserInteractionAllowed ---------- - -// On the Mac, the SecItem keychain API has ways to suppress user interaction, -// but none of those ways work when using it to access file-based keychains. -// This was filed as FB16959400, but until that is addressed, this usage of -// deprecated API cannot be removed. - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -ScopedKeychainUserInteractionAllowed::ScopedKeychainUserInteractionAllowed( - Boolean allowed, - OSStatus* status) { - Boolean was_allowed; - OSStatus local_status = noErr; - absl::Cleanup cleanup = [&status, &local_status] { - if (status) { - *status = local_status; - } - }; - - local_status = SecKeychainGetUserInteractionAllowed(&was_allowed); - if (local_status != noErr) { - return; - } - - local_status = SecKeychainSetUserInteractionAllowed(allowed); - if (local_status != noErr) { - return; - } - - was_allowed_ = was_allowed; -} - -ScopedKeychainUserInteractionAllowed::~ScopedKeychainUserInteractionAllowed() { - if (was_allowed_.has_value()) { - SecKeychainSetUserInteractionAllowed(was_allowed_.value()); - } -} - -#pragma clang diagnostic pop - -#endif // BUILDFLAG(IS_MAC) - } // namespace crypto::apple
diff --git a/crypto/apple/keychain.h b/crypto/apple/keychain.h index b5e604c..1d2264a52 100644 --- a/crypto/apple/keychain.h +++ b/crypto/apple/keychain.h
@@ -7,7 +7,6 @@ #include <Security/Security.h> -#include <optional> #include <string_view> #include <vector> @@ -56,34 +55,6 @@ Keychain(); }; -#if BUILDFLAG(IS_MAC) - -// Sets whether Keychain Services is permitted to display UI if needed by -// calling SecKeychainSetUserInteractionAllowed. This operates in a scoped -// fashion: on destruction, the previous state will be restored. This is useful -// to interact with the Keychain on a best-effort basis, without displaying any -// Keychain Services UI (which is beyond the application's control) to the user. -class CRYPTO_EXPORT ScopedKeychainUserInteractionAllowed { - public: - ScopedKeychainUserInteractionAllowed( - const ScopedKeychainUserInteractionAllowed&) = delete; - ScopedKeychainUserInteractionAllowed& operator=( - const ScopedKeychainUserInteractionAllowed&) = delete; - - explicit ScopedKeychainUserInteractionAllowed(Boolean allowed, - OSStatus* status = nullptr); - - ~ScopedKeychainUserInteractionAllowed(); - - private: - // The previous value of whether user interaction was allowed, for - // restoration. If this is nullopt, this scoper did not succeed in its - // constructor, so it must not attempt to restore the value. - std::optional<Boolean> was_allowed_; -}; - -#endif // BUILDFLAG(IS_MAC) - } // namespace crypto::apple #endif // CRYPTO_APPLE_KEYCHAIN_H_
diff --git a/crypto/apple/scoped_keychain_user_interaction_allowed.cc b/crypto/apple/scoped_keychain_user_interaction_allowed.cc new file mode 100644 index 0000000..abebb53 --- /dev/null +++ b/crypto/apple/scoped_keychain_user_interaction_allowed.cc
@@ -0,0 +1,59 @@ +// 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 "crypto/apple/scoped_keychain_user_interaction_allowed.h" + +#include <Security/Security.h> + +#include "build/build_config.h" +#include "third_party/abseil-cpp/absl/cleanup/cleanup.h" + +#if BUILDFLAG(IS_MAC) + +// ---------- ScopedKeychainUserInteractionAllowed ---------- + +// On the Mac, the SecItem keychain API has ways to suppress user interaction, +// but none of those ways work when using it to access file-based keychains. +// This was filed as FB16959400, but until that is addressed, this usage of +// deprecated API cannot be removed. + +namespace crypto::apple { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + +ScopedKeychainUserInteractionAllowed::ScopedKeychainUserInteractionAllowed( + Boolean allowed, + OSStatus* status) { + Boolean was_allowed; + OSStatus local_status = noErr; + absl::Cleanup cleanup = [&status, &local_status] { + if (status) { + *status = local_status; + } + }; + + local_status = SecKeychainGetUserInteractionAllowed(&was_allowed); + if (local_status != noErr) { + return; + } + + local_status = SecKeychainSetUserInteractionAllowed(allowed); + if (local_status != noErr) { + return; + } + + was_allowed_ = was_allowed; +} + +ScopedKeychainUserInteractionAllowed::~ScopedKeychainUserInteractionAllowed() { + if (was_allowed_.has_value()) { + SecKeychainSetUserInteractionAllowed(was_allowed_.value()); + } +} + +#pragma clang diagnostic pop + +} // namespace crypto::apple + +#endif // BUILDFLAG(IS_MAC)
diff --git a/crypto/apple/scoped_keychain_user_interaction_allowed.h b/crypto/apple/scoped_keychain_user_interaction_allowed.h new file mode 100644 index 0000000..c09c694 --- /dev/null +++ b/crypto/apple/scoped_keychain_user_interaction_allowed.h
@@ -0,0 +1,41 @@ +// 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 CRYPTO_APPLE_SCOPED_KEYCHAIN_USER_INTERACTION_ALLOWED_H_ +#define CRYPTO_APPLE_SCOPED_KEYCHAIN_USER_INTERACTION_ALLOWED_H_ + +#include <MacTypes.h> +#include <optional> + +#include "crypto/crypto_export.h" + +namespace crypto::apple { + +// Sets whether Keychain Services is permitted to display UI if needed by +// calling SecKeychainSetUserInteractionAllowed. This operates in a scoped +// fashion: on destruction, the previous state will be restored. This is useful +// to interact with the Keychain on a best-effort basis, without displaying any +// Keychain Services UI (which is beyond the application's control) to the user. +class CRYPTO_EXPORT ScopedKeychainUserInteractionAllowed { + public: + ScopedKeychainUserInteractionAllowed( + const ScopedKeychainUserInteractionAllowed&) = delete; + ScopedKeychainUserInteractionAllowed& operator=( + const ScopedKeychainUserInteractionAllowed&) = delete; + + explicit ScopedKeychainUserInteractionAllowed(Boolean allowed, + OSStatus* status = nullptr); + + ~ScopedKeychainUserInteractionAllowed(); + + private: + // The previous value of whether user interaction was allowed, for + // restoration. If this is nullopt, this scoper did not succeed in its + // constructor, so it must not attempt to restore the value. + std::optional<Boolean> was_allowed_; +}; + +} // namespace crypto::apple + +#endif // CRYPTO_APPLE_SCOPED_KEYCHAIN_USER_INTERACTION_ALLOWED_H_
diff --git a/device/bluetooth/socket.cc b/device/bluetooth/socket.cc index 21cf46c..18f3eb20 100644 --- a/device/bluetooth/socket.cc +++ b/device/bluetooth/socket.cc
@@ -119,7 +119,7 @@ return; pending_write_buffer.copy_prefix_from( - io_buffer->span().first(base::checked_cast<size_t>(num_bytes_received))); + io_buffer->first(base::checked_cast<size_t>(num_bytes_received))); receive_stream_->EndWriteData(static_cast<uint32_t>(num_bytes_received)); ReceiveMore();
diff --git a/extensions/browser/api/automation_internal/automation_internal_api.cc b/extensions/browser/api/automation_internal/automation_internal_api.cc index 9231fd76..bea3ed4 100644 --- a/extensions/browser/api/automation_internal/automation_internal_api.cc +++ b/extensions/browser/api/automation_internal/automation_internal_api.cc
@@ -291,6 +291,9 @@ case api::automation::ActionType::kLongClick: action->action = ax::mojom::Action::kLongClick; break; + case api::automation::ActionType::kRequestLayoutBasedAction: + action->action = ax::mojom::Action::kRequestLayoutBasedAction; + break; case api::automation::ActionType::kAnnotatePageImages: case api::automation::ActionType::kSignalEndOfTest: case api::automation::ActionType::kStitchChildTree:
diff --git a/extensions/browser/api/messaging/message_port.h b/extensions/browser/api/messaging/message_port.h index 43b85f0..851d6cc 100644 --- a/extensions/browser/api/messaging/message_port.h +++ b/extensions/browser/api/messaging/message_port.h
@@ -25,7 +25,7 @@ namespace extensions { -struct Message; +class Message; struct MessagingEndpoint; struct PortContext;
diff --git a/extensions/browser/api/messaging/native_message_port.cc b/extensions/browser/api/messaging/native_message_port.cc index da827f6..6f387b81 100644 --- a/extensions/browser/api/messaging/native_message_port.cc +++ b/extensions/browser/api/messaging/native_message_port.cc
@@ -45,7 +45,7 @@ void NativeMessagePort::DispatchOnMessage(const Message& message) { DCHECK(thread_checker_.CalledOnValidThread()); - dispatcher_->DispatchOnMessage(message.data); + dispatcher_->DispatchOnMessage(message.data()); } void NativeMessagePort::PostMessageFromNativeHost(const std::string& message) {
diff --git a/extensions/browser/api/messaging/native_message_port.h b/extensions/browser/api/messaging/native_message_port.h index 6d7756a9..33d5bbf 100644 --- a/extensions/browser/api/messaging/native_message_port.h +++ b/extensions/browser/api/messaging/native_message_port.h
@@ -20,7 +20,7 @@ namespace extensions { class NativeMessageHost; class NativeMessagePortDispatcher; -struct Message; +class Message; struct PortId; // A port that manages communication with a native application.
diff --git a/extensions/browser/guest_view/web_view/controlled_frame_embedder_url_fetcher.cc b/extensions/browser/guest_view/web_view/controlled_frame_embedder_url_fetcher.cc index 77b072c..ae72c82 100644 --- a/extensions/browser/guest_view/web_view/controlled_frame_embedder_url_fetcher.cc +++ b/extensions/browser/guest_view/web_view/controlled_frame_embedder_url_fetcher.cc
@@ -9,6 +9,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/storage_partition.h" #include "extensions/browser/extensions_browser_client.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/base/load_flags.h" #include "net/http/http_response_headers.h" #include "net/traffic_annotation/network_traffic_annotation.h"
diff --git a/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc b/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc index 082a2439..6f57dd12 100644 --- a/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc +++ b/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc
@@ -7,6 +7,7 @@ #include "base/functional/bind.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_ui_url_loader_factory.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/base/load_flags.h" #include "net/http/http_response_headers.h" #include "net/traffic_annotation/network_traffic_annotation.h"
diff --git a/extensions/common/BUILD.gn b/extensions/common/BUILD.gn index 8ceaffc..d85b5aa 100644 --- a/extensions/common/BUILD.gn +++ b/extensions/common/BUILD.gn
@@ -275,6 +275,7 @@ "api/declarative_net_request/dnr_manifest_handler.h", "api/extension_action/action_info.cc", "api/extension_action/action_info.h", + "api/messaging/message.cc", "api/messaging/message.h", "api/messaging/messaging_endpoint.cc", "api/messaging/messaging_endpoint.h",
diff --git a/extensions/common/api/automation.idl b/extensions/common/api/automation.idl index ea91844..90331fcf 100644 --- a/extensions/common/api/automation.idl +++ b/extensions/common/api/automation.idl
@@ -35,6 +35,7 @@ clicked, collapsed, controlsChanged, + defaultActionVerbChanged, detailsChanged, describedByChanged, descriptionChanged, @@ -408,6 +409,7 @@ loadInlineTextBoxes, longClick, replaceSelectedText, + requestLayoutBasedAction, resumeMedia, scrollBackward, scrollDown, @@ -544,6 +546,8 @@ check, click, clickAncestor, + clickInHitTest, + clickNotInHitTest, jump, open, press,
diff --git a/extensions/common/api/messaging/message.cc b/extensions/common/api/messaging/message.cc new file mode 100644 index 0000000..08907d9 --- /dev/null +++ b/extensions/common/api/messaging/message.cc
@@ -0,0 +1,37 @@ +// 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 "extensions/common/api/messaging/message.h" + +namespace extensions { + +Message::Message() = default; + +Message::Message(const std::string& data, + mojom::SerializationFormat format, + bool user_gesture, + bool from_privileged_context) + : data_(data), + format_(format), + user_gesture_(user_gesture), + from_privileged_context_(from_privileged_context) {} + +Message::Message(const Message& other) = default; + +Message::Message(Message&& other) = default; + +Message::~Message() = default; + +Message& Message::operator=(const Message& other) = default; + +Message& Message::operator=(Message&& other) = default; + +bool Message::operator==(const Message& other) const { + // Skipping the equality check for `from_privileged_context` here + // because this field is used only for histograms. + return data_ == other.data_ && user_gesture_ == other.user_gesture_ && + format_ == other.format_; +} + +} // namespace extensions
diff --git a/extensions/common/api/messaging/message.h b/extensions/common/api/messaging/message.h index 80f1e65..77de5c4a 100644 --- a/extensions/common/api/messaging/message.h +++ b/extensions/common/api/messaging/message.h
@@ -5,33 +5,39 @@ #ifndef EXTENSIONS_COMMON_API_MESSAGING_MESSAGE_H_ #define EXTENSIONS_COMMON_API_MESSAGING_MESSAGE_H_ +#include <string> + #include "extensions/common/mojom/message_port.mojom-shared.h" namespace extensions { // A message consists of both the data itself as well as a user gesture state. -struct Message { - std::string data; - mojom::SerializationFormat format = mojom::SerializationFormat::kJson; - bool user_gesture = false; - bool from_privileged_context = false; - - Message() = default; +class Message { + public: + Message(); Message(const std::string& data, mojom::SerializationFormat format, bool user_gesture, - bool from_privileged_context = false) - : data(data), - format(format), - user_gesture(user_gesture), - from_privileged_context(from_privileged_context) {} + bool from_privileged_context = false); + Message(const Message& other); + Message(Message&& other); + ~Message(); - bool operator==(const Message& other) const { - // Skipping the equality check for `from_privileged_context` here - // because this field is used only for histograms. - return data == other.data && user_gesture == other.user_gesture && - format == other.format; - } + Message& operator=(const Message& other); + Message& operator=(Message&& other); + + bool operator==(const Message& other) const; + + const std::string& data() const { return data_; } + mojom::SerializationFormat format() const { return format_; } + bool user_gesture() const { return user_gesture_; } + bool from_privileged_context() const { return from_privileged_context_; } + + private: + std::string data_; + mojom::SerializationFormat format_ = mojom::SerializationFormat::kJson; + bool user_gesture_ = false; + bool from_privileged_context_ = false; }; } // namespace extensions
diff --git a/extensions/common/extension_api.cc b/extensions/common/extension_api.cc index 04a217d..a264e5b 100644 --- a/extensions/common/extension_api.cc +++ b/extensions/common/extension_api.cc
@@ -218,7 +218,7 @@ const ContextData& context_data) { const Feature* feature = GetFeatureDependency(full_name); if (!feature) { - return Feature::Availability(Feature::NOT_PRESENT, + return Feature::Availability(Feature::AvailabilityResult::kNotPresent, "Unknown feature: " + std::string(full_name)); } @@ -309,7 +309,8 @@ const ContextData& context_data) { const std::string& alias = feature.alias(); if (alias.empty()) { - return Feature::Availability(Feature::NOT_PRESENT, "Alias not defined"); + return Feature::Availability(Feature::AvailabilityResult::kNotPresent, + "Alias not defined"); } auto provider = dependency_providers_.find("api");
diff --git a/extensions/common/features/complex_feature_unittest.cc b/extensions/common/features/complex_feature_unittest.cc index d7bbe700..a4793c2 100644 --- a/extensions/common/features/complex_feature_unittest.cc +++ b/extensions/common/features/complex_feature_unittest.cc
@@ -44,7 +44,7 @@ std::unique_ptr<ComplexFeature> feature(new ComplexFeature(&features)); // Test match 1st rule. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest(kIdFoo, Manifest::Type::kExtension, ManifestLocation::kInvalidLocation, @@ -55,7 +55,7 @@ // Test match 2nd rule. EXPECT_EQ( - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest( kIdBar, Manifest::Type::kLegacyPackagedApp, @@ -64,7 +64,7 @@ .result()); // Test allowlist with wrong extension type. - EXPECT_NE(Feature::IS_AVAILABLE, + EXPECT_NE(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest(kIdBar, Manifest::Type::kExtension, ManifestLocation::kInvalidLocation, @@ -73,7 +73,7 @@ kUnspecifiedContextId) .result()); EXPECT_NE( - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest( kIdFoo, Manifest::Type::kLegacyPackagedApp, @@ -104,7 +104,7 @@ std::unique_ptr<ComplexFeature> feature(new ComplexFeature(&features)); // Available to extensions because of the content_security_policy rule. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest(HashedExtensionId(std::string(32, 'a')), Manifest::Type::kExtension, @@ -115,7 +115,7 @@ .result()); // Available to platform apps because of the videoCapture rule. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest(HashedExtensionId(std::string(32, 'b')), Manifest::Type::kPlatformApp, @@ -126,7 +126,7 @@ .result()); // Not available to hosted apps. - EXPECT_EQ(Feature::INVALID_TYPE, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidType, feature ->IsAvailableToManifest(HashedExtensionId(std::string(32, 'c')), Manifest::Type::kHostedApp, @@ -206,7 +206,7 @@ // This feature should be available the second time that the delegated // availability check is called. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, complex_feature .IsAvailableToContext( /*extension=*/nullptr, mojom::ContextType::kUnspecified,
diff --git a/extensions/common/features/feature.h b/extensions/common/features/feature.h index 2508f2e..334e7af 100644 --- a/extensions/common/features/feature.h +++ b/extensions/common/features/feature.h
@@ -46,25 +46,27 @@ // Whether a feature is available in a given situation or not, and if not, // why not. - enum AvailabilityResult { - IS_AVAILABLE, - NOT_FOUND_IN_ALLOWLIST, - INVALID_URL, - INVALID_TYPE, - INVALID_CONTEXT, - INVALID_LOCATION, - INVALID_PLATFORM, - INVALID_MIN_MANIFEST_VERSION, - INVALID_MAX_MANIFEST_VERSION, - INVALID_SESSION_TYPE, - NOT_PRESENT, - UNSUPPORTED_CHANNEL, - FOUND_IN_BLOCKLIST, - MISSING_COMMAND_LINE_SWITCH, - FEATURE_FLAG_DISABLED, - REQUIRES_DEVELOPER_MODE, - MISSING_DELEGATED_AVAILABILITY_CHECK, - FAILED_DELEGATED_AVAILABILITY_CHECK, + // Note: do not reorder or remove enum values because the order impacts + // result_as_int32() used by V8ContextNativeHandler::GetAvailability(). + enum class AvailabilityResult { + kIsAvailable, + kNotFoundInAllowlist, + kInvalidUrl, + kInvalidType, + kInvalidContext, + kInvalidLocation, + kInvalidPlatform, + kInvalidMinManifestVersion, + kInvalidMaxManifestVersion, + kInvalidSessionType, + kNotPresent, + kUnsupportedChannel, + kFoundInBlocklist, + kMissingCommandLineSwitch, + kFeatureFlagDisabled, + kRequiresDeveloperMode, + kMissingDelegatedAvailabilityCheck, + kFailedDelegatedAvailabilityCheck }; // Shorthand for delegated availability check handler function signature. The @@ -92,7 +94,11 @@ : result_(result), message_(message) {} AvailabilityResult result() const { return result_; } - bool is_available() const { return result_ == IS_AVAILABLE; } + // Used by V8ContextNativeHandler::GetAvailability(). + int32_t result_as_int32() const { return static_cast<int32_t>(result_); } + bool is_available() const { + return result_ == AvailabilityResult::kIsAvailable; + } const std::string& message() const { return message_; } private:
diff --git a/extensions/common/features/feature_provider_unittest.cc b/extensions/common/features/feature_provider_unittest.cc index 68ea2786..5bb9253 100644 --- a/extensions/common/features/feature_provider_unittest.cc +++ b/extensions/common/features/feature_provider_unittest.cc
@@ -60,7 +60,7 @@ ExtensionBuilder("test extension").Build(); const Feature* feature = provider->GetFeature("description"); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToContext(extension.get(), mojom::ContextType::kUnspecified, GURL(), @@ -70,7 +70,7 @@ // This is a generic extension, so an app-only feature isn't allowed. feature = provider->GetFeature("app.background"); ASSERT_TRUE(feature); - EXPECT_EQ(Feature::INVALID_TYPE, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidType, feature ->IsAvailableToContext(extension.get(), mojom::ContextType::kUnspecified, GURL(), @@ -80,7 +80,7 @@ // A feature not listed in the manifest isn't allowed. feature = provider->GetFeature("background"); ASSERT_TRUE(feature); - EXPECT_EQ(Feature::NOT_PRESENT, + EXPECT_EQ(Feature::AvailabilityResult::kNotPresent, feature ->IsAvailableToContext(extension.get(), mojom::ContextType::kUnspecified, GURL(), @@ -118,7 +118,7 @@ // A permission requested in the manifest is available. const Feature* feature = provider->GetFeature("power"); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToContext(app.get(), mojom::ContextType::kUnspecified, GURL(), @@ -126,12 +126,12 @@ .result()); // A permission only available to allowlisted extensions returns availability - // NOT_FOUND_IN_ALLOWLIST. + // AvailabilityResult::kNotFoundInAllowlist. // bluetoothPrivate is unsupported in desktop-android build. #if BUILDFLAG(ENABLE_EXTENSIONS) feature = provider->GetFeature("bluetoothPrivate"); ASSERT_TRUE(feature); - EXPECT_EQ(Feature::NOT_FOUND_IN_ALLOWLIST, + EXPECT_EQ(Feature::AvailabilityResult::kNotFoundInAllowlist, feature ->IsAvailableToContext(app.get(), mojom::ContextType::kUnspecified, GURL(), @@ -139,10 +139,11 @@ .result()); #endif - // A permission that isn't part of the manifest returns NOT_PRESENT. + // A permission that isn't part of the manifest returns + // AvailabilityResult::kNotPresent. feature = provider->GetFeature("unlimitedStorage"); ASSERT_TRUE(feature); - EXPECT_EQ(Feature::NOT_PRESENT, + EXPECT_EQ(Feature::AvailabilityResult::kNotPresent, feature ->IsAvailableToContext(app.get(), mojom::ContextType::kUnspecified, GURL(),
diff --git a/extensions/common/features/manifest_feature.cc b/extensions/common/features/manifest_feature.cc index 4533fd6..354b1bd 100644 --- a/extensions/common/features/manifest_feature.cc +++ b/extensions/common/features/manifest_feature.cc
@@ -33,9 +33,10 @@ // We know we can skip manifest()->GetKey() here because we just did the same // validation it would do above. if (extension && !extension->manifest()->value()->contains(name())) - return CreateAvailability(NOT_PRESENT, extension->GetType()); + return CreateAvailability(AvailabilityResult::kNotPresent, + extension->GetType()); - return CreateAvailability(IS_AVAILABLE); + return CreateAvailability(AvailabilityResult::kIsAvailable); } } // namespace extensions
diff --git a/extensions/common/features/permission_feature.cc b/extensions/common/features/permission_feature.cc index f012b69..d46c87d 100644 --- a/extensions/common/features/permission_feature.cc +++ b/extensions/common/features/permission_feature.cc
@@ -31,9 +31,10 @@ return availability; if (extension && !extension->permissions_data()->HasAPIPermission(name())) - return CreateAvailability(NOT_PRESENT, extension->GetType()); + return CreateAvailability(AvailabilityResult::kNotPresent, + extension->GetType()); - return CreateAvailability(IS_AVAILABLE); + return CreateAvailability(AvailabilityResult::kIsAvailable); } } // namespace extensions
diff --git a/extensions/common/features/simple_feature.cc b/extensions/common/features/simple_feature.cc index 74f269a..31ab718a 100644 --- a/extensions/common/features/simple_feature.cc +++ b/extensions/common/features/simple_feature.cc
@@ -263,7 +263,8 @@ ? RunDelegatedAvailabilityCheck(extension, context, url, platform, context_id, check_developer_mode, context_data) - : CreateAvailability(MISSING_DELEGATED_AVAILABILITY_CHECK); + : CreateAvailability( + AvailabilityResult::kMissingDelegatedAvailabilityCheck); if (!delegated_availibility.is_available()) { return delegated_availibility; @@ -315,24 +316,24 @@ version_info::Channel channel, mojom::FeatureSessionType session_type) const { switch (result) { - case IS_AVAILABLE: + case AvailabilityResult::kIsAvailable: return std::string(); - case NOT_FOUND_IN_ALLOWLIST: - case FOUND_IN_BLOCKLIST: + case AvailabilityResult::kNotFoundInAllowlist: + case AvailabilityResult::kFoundInBlocklist: return base::StringPrintf( "'%s' is not allowed for specified extension ID.", name().c_str()); - case INVALID_URL: + case AvailabilityResult::kInvalidUrl: return base::StringPrintf("'%s' is not allowed on %s.", name().c_str(), url.spec().c_str()); - case INVALID_TYPE: + case AvailabilityResult::kInvalidType: return base::StringPrintf( "'%s' is only allowed for %s, but this is a %s.", name().c_str(), ListDisplayNames(std::vector<Manifest::Type>( extension_types_.begin(), extension_types_.end())).c_str(), GetDisplayName(type).c_str()); - case INVALID_CONTEXT: + case AvailabilityResult::kInvalidContext: DCHECK(contexts_); return base::StringPrintf( "'%s' is only allowed to run in %s, but this is a %s", name().c_str(), @@ -340,25 +341,25 @@ contexts_->end())) .c_str(), GetDisplayName(context).c_str()); - case INVALID_LOCATION: + case AvailabilityResult::kInvalidLocation: return base::StringPrintf( "'%s' is not allowed for specified install location.", name().c_str()); - case INVALID_PLATFORM: + case AvailabilityResult::kInvalidPlatform: return base::StringPrintf( "'%s' is not allowed for specified platform.", name().c_str()); - case INVALID_MIN_MANIFEST_VERSION: + case AvailabilityResult::kInvalidMinManifestVersion: DCHECK(min_manifest_version_); return base::StringPrintf( "'%s' requires manifest version of at least %d.", name().c_str(), *min_manifest_version_); - case INVALID_MAX_MANIFEST_VERSION: + case AvailabilityResult::kInvalidMaxManifestVersion: DCHECK(max_manifest_version_); return base::StringPrintf( "'%s' requires manifest version of %d or lower.", name().c_str(), *max_manifest_version_); - case INVALID_SESSION_TYPE: + case AvailabilityResult::kInvalidSessionType: return base::StringPrintf( "'%s' is only allowed to run in %s sessions, but this is %s session.", name().c_str(), @@ -366,33 +367,33 @@ session_types_.begin(), session_types_.end())) .c_str(), GetDisplayName(session_type).c_str()); - case NOT_PRESENT: + case AvailabilityResult::kNotPresent: return base::StringPrintf( "'%s' requires a different Feature that is not present.", name().c_str()); - case UNSUPPORTED_CHANNEL: + case AvailabilityResult::kUnsupportedChannel: return base::StringPrintf( "'%s' requires %s channel or newer, but this is the %s channel.", name().c_str(), version_info::GetChannelString(channel).data(), version_info::GetChannelString(GetCurrentChannel()).data()); - case MISSING_COMMAND_LINE_SWITCH: + case AvailabilityResult::kMissingCommandLineSwitch: DCHECK(command_line_switch_); return base::StringPrintf( "'%s' requires the '%s' command line switch to be enabled.", name().c_str(), command_line_switch_->c_str()); - case FEATURE_FLAG_DISABLED: + case AvailabilityResult::kFeatureFlagDisabled: DCHECK(feature_flag_); return base::StringPrintf( "'%s' requires the '%s' feature flag to be enabled.", name().c_str(), feature_flag_->c_str()); - case REQUIRES_DEVELOPER_MODE: + case AvailabilityResult::kRequiresDeveloperMode: return base::StringPrintf( "'%s' requires the user to have developer mode enabled.", name().c_str()); - case MISSING_DELEGATED_AVAILABILITY_CHECK: + case AvailabilityResult::kMissingDelegatedAvailabilityCheck: return base::StringPrintf( "'%s' is missing its delegated availability check", name().c_str()); - case FAILED_DELEGATED_AVAILABILITY_CHECK: + case AvailabilityResult::kFailedDelegatedAvailabilityCheck: return base::StringPrintf("'%s' failed its delegated availability check.", name().c_str()); } @@ -531,12 +532,12 @@ const Feature* dependency = ExtensionAPI::GetSharedInstance()->GetFeatureDependency(dep_name); if (!dependency) - return CreateAvailability(NOT_PRESENT); + return CreateAvailability(AvailabilityResult::kNotPresent); Availability dependency_availability = checker.Run(dependency); if (!dependency_availability.is_available()) return dependency_availability; } - return CreateAvailability(IS_AVAILABLE); + return CreateAvailability(AvailabilityResult::kIsAvailable); } // static @@ -614,7 +615,7 @@ bool check_developer_mode) const { base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); if (!platforms_.empty() && !base::Contains(platforms_, platform)) - return CreateAvailability(INVALID_PLATFORM); + return CreateAvailability(AvailabilityResult::kInvalidPlatform); if (channel_ && *channel_ < GetCurrentChannel()) { // If the user has the kEnableExperimentalExtensionApis commandline flag @@ -624,19 +625,21 @@ command_line->HasSwitch(switches::kEnableExperimentalExtensionApis); } if (!(*ignore_channel_)) - return CreateAvailability(UNSUPPORTED_CHANNEL, *channel_); + return CreateAvailability(AvailabilityResult::kUnsupportedChannel, + *channel_); } if (command_line_switch_ && !IsCommandLineSwitchEnabled(command_line, *command_line_switch_)) { - return CreateAvailability(MISSING_COMMAND_LINE_SWITCH); + return CreateAvailability(AvailabilityResult::kMissingCommandLineSwitch); } if (feature_flag_ && !IsFeatureFlagEnabled(*feature_flag_)) - return CreateAvailability(FEATURE_FLAG_DISABLED); + return CreateAvailability(AvailabilityResult::kFeatureFlagDisabled); if (!MatchesSessionTypes(session_type)) - return CreateAvailability(INVALID_SESSION_TYPE, session_type); + return CreateAvailability(AvailabilityResult::kInvalidSessionType, + session_type); bool debugger_api_restricted = base::FeatureList::IsEnabled( extensions_features::kDebuggerAPIRestrictedToDevMode); @@ -654,7 +657,7 @@ // enabled. But if the feature is disabled, then we treat it like any other // API. if (name() == "debugger" && !debugger_api_restricted) { - return CreateAvailability(IS_AVAILABLE); + return CreateAvailability(AvailabilityResult::kIsAvailable); } if (name().starts_with("userScripts") && @@ -662,13 +665,13 @@ // userScripts API when feature is enabled. base::FeatureList::IsEnabled( extensions_features::kUserScriptUserExtensionToggle)) { - return CreateAvailability(IS_AVAILABLE); + return CreateAvailability(AvailabilityResult::kIsAvailable); } - return CreateAvailability(REQUIRES_DEVELOPER_MODE); + return CreateAvailability(AvailabilityResult::kRequiresDeveloperMode); } - return CreateAvailability(IS_AVAILABLE); + return CreateAvailability(AvailabilityResult::kIsAvailable); } Feature::Availability SimpleFeature::GetManifestAvailability( @@ -684,11 +687,11 @@ (type == Manifest::Type::kUserScript) ? Manifest::Type::kExtension : type; if (!extension_types_.empty() && !base::Contains(extension_types_, type_to_check)) { - return CreateAvailability(INVALID_TYPE, type); + return CreateAvailability(AvailabilityResult::kInvalidType, type); } if (!blocklist_.empty() && IsIdInBlocklist(hashed_id)) - return CreateAvailability(FOUND_IN_BLOCKLIST); + return CreateAvailability(AvailabilityResult::kFoundInBlocklist); // TODO(benwells): don't grant all component extensions. // See http://crbug.com/370375 for more details. @@ -696,25 +699,25 @@ // NOTE: Deliberately does not match EXTERNAL_COMPONENT. if (component_extensions_auto_granted_ && location == ManifestLocation::kComponent) - return CreateAvailability(IS_AVAILABLE); + return CreateAvailability(AvailabilityResult::kIsAvailable); if (!allowlist_.empty() && !IsIdInAllowlist(hashed_id) && !IsAllowlistedForTest(hashed_id)) { - return CreateAvailability(NOT_FOUND_IN_ALLOWLIST); + return CreateAvailability(AvailabilityResult::kNotFoundInAllowlist); } if (location_ && !MatchesManifestLocation(location) && !IsAllowlistedForTest(hashed_id)) { - return CreateAvailability(INVALID_LOCATION); + return CreateAvailability(AvailabilityResult::kInvalidLocation); } if (min_manifest_version_ && manifest_version < *min_manifest_version_) - return CreateAvailability(INVALID_MIN_MANIFEST_VERSION); + return CreateAvailability(AvailabilityResult::kInvalidMinManifestVersion); if (max_manifest_version_ && manifest_version > *max_manifest_version_) - return CreateAvailability(INVALID_MAX_MANIFEST_VERSION); + return CreateAvailability(AvailabilityResult::kInvalidMaxManifestVersion); - return CreateAvailability(IS_AVAILABLE); + return CreateAvailability(AvailabilityResult::kIsAvailable); } Feature::Availability SimpleFeature::GetContextAvailability( @@ -726,7 +729,7 @@ // "active" in current renderer process when the API permission check is // done. if (contexts_ && !base::Contains(*contexts_, context)) - return CreateAvailability(INVALID_CONTEXT, context); + return CreateAvailability(AvailabilityResult::kInvalidContext, context); // TODO(kalman): Consider checking |matches_| regardless of context type. // Fewer surprises, and if the feature configuration wants to isolate @@ -737,13 +740,13 @@ context == mojom::ContextType::kWebUi || context == mojom::ContextType::kUntrustedWebUi; if (supports_url_matching && !matches_.MatchesURL(url)) { - return CreateAvailability(INVALID_URL, url); + return CreateAvailability(AvailabilityResult::kInvalidUrl, url); } if (is_for_service_worker && disallow_for_service_workers_) - return CreateAvailability(INVALID_CONTEXT); + return CreateAvailability(AvailabilityResult::kInvalidContext); - return CreateAvailability(IS_AVAILABLE); + return CreateAvailability(AvailabilityResult::kIsAvailable); } Feature::Availability SimpleFeature::RunDelegatedAvailabilityCheck( @@ -759,9 +762,10 @@ if (!delegated_availability_check_handler_.Run( name_, extension, context, url, platform, context_id, check_developer_mode, context_data)) { - return CreateAvailability(FAILED_DELEGATED_AVAILABILITY_CHECK); + return CreateAvailability( + AvailabilityResult::kFailedDelegatedAvailabilityCheck); } - return CreateAvailability(IS_AVAILABLE); + return CreateAvailability(AvailabilityResult::kIsAvailable); } } // namespace extensions
diff --git a/extensions/common/features/simple_feature_unittest.cc b/extensions/common/features/simple_feature_unittest.cc index e703a63..48c9f9a 100644 --- a/extensions/common/features/simple_feature_unittest.cc +++ b/extensions/common/features/simple_feature_unittest.cc
@@ -96,7 +96,7 @@ -1, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result(); - return availability_result == Feature::IS_AVAILABLE; + return availability_result == Feature::AvailabilityResult::kIsAvailable; } private: @@ -107,25 +107,25 @@ const auto tests = std::to_array<IsAvailableTestData>({ {"", Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, Feature::UNSPECIFIED_PLATFORM, -1, kUnspecifiedContextId, - Feature::IS_AVAILABLE}, + Feature::AvailabilityResult::kIsAvailable}, {"random-extension", Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, Feature::UNSPECIFIED_PLATFORM, -1, - kUnspecifiedContextId, Feature::IS_AVAILABLE}, + kUnspecifiedContextId, Feature::AvailabilityResult::kIsAvailable}, {"", Manifest::Type::kLegacyPackagedApp, ManifestLocation::kInvalidLocation, Feature::UNSPECIFIED_PLATFORM, -1, - kUnspecifiedContextId, Feature::IS_AVAILABLE}, + kUnspecifiedContextId, Feature::AvailabilityResult::kIsAvailable}, {"", Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, Feature::UNSPECIFIED_PLATFORM, -1, kUnspecifiedContextId, - Feature::IS_AVAILABLE}, + Feature::AvailabilityResult::kIsAvailable}, {"", Manifest::Type::kUnknown, ManifestLocation::kComponent, Feature::UNSPECIFIED_PLATFORM, -1, kUnspecifiedContextId, - Feature::IS_AVAILABLE}, + Feature::AvailabilityResult::kIsAvailable}, {"", Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, Feature::CHROMEOS_PLATFORM, -1, kUnspecifiedContextId, - Feature::IS_AVAILABLE}, + Feature::AvailabilityResult::kIsAvailable}, {"", Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, Feature::UNSPECIFIED_PLATFORM, 25, kUnspecifiedContextId, - Feature::IS_AVAILABLE}, + Feature::AvailabilityResult::kIsAvailable}, }); SimpleFeature feature; @@ -147,14 +147,14 @@ SimpleFeature feature; feature.set_allowlist({kIdFoo.value().c_str(), kIdBar.value().c_str()}); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest(kIdFoo, Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, -1, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest(kIdBar, Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, -1, @@ -162,14 +162,14 @@ kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::NOT_FOUND_IN_ALLOWLIST, + EXPECT_EQ(Feature::AvailabilityResult::kNotFoundInAllowlist, feature .IsAvailableToManifest(kIdBaz, Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, -1, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::NOT_FOUND_IN_ALLOWLIST, + EXPECT_EQ(Feature::AvailabilityResult::kNotFoundInAllowlist, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, @@ -178,7 +178,7 @@ .result()); feature.set_extension_types({Manifest::Type::kLegacyPackagedApp}); - EXPECT_EQ(Feature::NOT_FOUND_IN_ALLOWLIST, + EXPECT_EQ(Feature::AvailabilityResult::kNotFoundInAllowlist, feature .IsAvailableToManifest( kIdBaz, Manifest::Type::kLegacyPackagedApp, @@ -196,14 +196,14 @@ feature.set_allowlist({kIdFooHashed.c_str()}); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId(kIdFoo), Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, -1, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_NE(Feature::IS_AVAILABLE, + EXPECT_NE(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId(kIdFooHashed), Manifest::Type::kUnknown, @@ -211,7 +211,7 @@ Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); EXPECT_EQ( - Feature::NOT_FOUND_IN_ALLOWLIST, + Feature::AvailabilityResult::kNotFoundInAllowlist, feature .IsAvailableToManifest( HashedExtensionId("slightlytoooolongforanextensionid"), @@ -219,7 +219,7 @@ Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); EXPECT_EQ( - Feature::NOT_FOUND_IN_ALLOWLIST, + Feature::AvailabilityResult::kNotFoundInAllowlist, feature .IsAvailableToManifest( HashedExtensionId("tooshortforanextensionid"), @@ -235,14 +235,14 @@ SimpleFeature feature; feature.set_blocklist({kIdFoo.value().c_str(), kIdBar.value().c_str()}); - EXPECT_EQ(Feature::FOUND_IN_BLOCKLIST, + EXPECT_EQ(Feature::AvailabilityResult::kFoundInBlocklist, feature .IsAvailableToManifest(kIdFoo, Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, -1, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::FOUND_IN_BLOCKLIST, + EXPECT_EQ(Feature::AvailabilityResult::kFoundInBlocklist, feature .IsAvailableToManifest(kIdBar, Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, -1, @@ -250,14 +250,14 @@ kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest(kIdBaz, Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, -1, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, @@ -275,14 +275,14 @@ feature.set_blocklist({kIdFooHashed.c_str()}); - EXPECT_EQ(Feature::FOUND_IN_BLOCKLIST, + EXPECT_EQ(Feature::AvailabilityResult::kFoundInBlocklist, feature .IsAvailableToManifest( HashedExtensionId(kIdFoo), Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, -1, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_NE(Feature::FOUND_IN_BLOCKLIST, + EXPECT_NE(Feature::AvailabilityResult::kFoundInBlocklist, feature .IsAvailableToManifest( HashedExtensionId(kIdFooHashed), Manifest::Type::kUnknown, @@ -290,7 +290,7 @@ Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); EXPECT_EQ( - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId("slightlytoooolongforanextensionid"), @@ -298,7 +298,7 @@ Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); EXPECT_EQ( - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId("tooshortforanextensionid"), @@ -312,14 +312,14 @@ feature.set_extension_types( {Manifest::Type::kExtension, Manifest::Type::kLegacyPackagedApp}); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kExtension, ManifestLocation::kInvalidLocation, -1, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kLegacyPackagedApp, @@ -327,14 +327,14 @@ Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::INVALID_TYPE, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidType, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, -1, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::INVALID_TYPE, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidType, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kTheme, @@ -366,7 +366,7 @@ ASSERT_TRUE(extension.get()); feature.set_allowlist({"monkey"}); - EXPECT_EQ(Feature::NOT_FOUND_IN_ALLOWLIST, + EXPECT_EQ(Feature::AvailabilityResult::kNotFoundInAllowlist, feature .IsAvailableToContext(extension.get(), mojom::ContextType::kPrivilegedExtension, @@ -380,7 +380,7 @@ Feature::Availability availability = feature.IsAvailableToContext( extension.get(), mojom::ContextType::kPrivilegedExtension, Feature::CHROMEOS_PLATFORM, kUnspecifiedContextId, TestContextData()); - EXPECT_EQ(Feature::INVALID_TYPE, availability.result()); + EXPECT_EQ(Feature::AvailabilityResult::kInvalidType, availability.result()); EXPECT_EQ("'somefeature' is only allowed for themes, " "but this is a legacy packaged app.", availability.message()); @@ -393,7 +393,8 @@ Feature::Availability availability = feature.IsAvailableToContext( extension.get(), mojom::ContextType::kPrivilegedExtension, Feature::CHROMEOS_PLATFORM, kUnspecifiedContextId, TestContextData()); - EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); + EXPECT_EQ(Feature::AvailabilityResult::kInvalidContext, + availability.result()); EXPECT_EQ("'somefeature' is only allowed to run in extension iframes and " "content scripts, but this is a privileged page", availability.message()); @@ -406,7 +407,8 @@ Feature::Availability availability = feature.IsAvailableToContext( extension.get(), mojom::ContextType::kPrivilegedExtension, Feature::CHROMEOS_PLATFORM, kUnspecifiedContextId, TestContextData()); - EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); + EXPECT_EQ(Feature::AvailabilityResult::kInvalidContext, + availability.result()); EXPECT_EQ("'somefeature' is only allowed to run in extension iframes, " "content scripts, and web pages, but this is a privileged page", availability.message()); @@ -415,7 +417,7 @@ { SimpleFeature other_feature; other_feature.set_location(SimpleFeature::COMPONENT_LOCATION); - EXPECT_EQ(Feature::INVALID_LOCATION, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidLocation, other_feature .IsAvailableToContext( extension.get(), mojom::ContextType::kPrivilegedExtension, @@ -425,7 +427,7 @@ } feature.set_contexts({mojom::ContextType::kPrivilegedExtension}); - EXPECT_EQ(Feature::INVALID_PLATFORM, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidPlatform, feature .IsAvailableToContext(extension.get(), mojom::ContextType::kPrivilegedExtension, @@ -434,7 +436,7 @@ .result()); feature.set_min_manifest_version(22); - EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidMinManifestVersion, feature .IsAvailableToContext(extension.get(), mojom::ContextType::kPrivilegedExtension, @@ -444,7 +446,7 @@ feature.set_min_manifest_version(21); feature.set_max_manifest_version(18); - EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidMaxManifestVersion, feature .IsAvailableToContext(extension.get(), mojom::ContextType::kPrivilegedExtension, @@ -470,78 +472,78 @@ const auto kTestData = std::to_array<FeatureSessionTypeTestData>({ {"kiosk_feature in kiosk session", - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, mojom::FeatureSessionType::kKiosk, {mojom::FeatureSessionType::kKiosk}}, {"kiosk feature in regular session", - Feature::INVALID_SESSION_TYPE, + Feature::AvailabilityResult::kInvalidSessionType, mojom::FeatureSessionType::kRegular, {mojom::FeatureSessionType::kKiosk}}, {"kiosk feature in unknown session", - Feature::INVALID_SESSION_TYPE, + Feature::AvailabilityResult::kInvalidSessionType, mojom::FeatureSessionType::kUnknown, {mojom::FeatureSessionType::kKiosk}}, {"kiosk feature in initial session", - Feature::INVALID_SESSION_TYPE, + Feature::AvailabilityResult::kInvalidSessionType, mojom::FeatureSessionType::kInitial, {mojom::FeatureSessionType::kKiosk}}, {"non kiosk feature in kiosk session", - Feature::INVALID_SESSION_TYPE, + Feature::AvailabilityResult::kInvalidSessionType, mojom::FeatureSessionType::kKiosk, {mojom::FeatureSessionType::kRegular}}, {"non kiosk feature in regular session", - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, mojom::FeatureSessionType::kRegular, {mojom::FeatureSessionType::kRegular}}, {"non kiosk feature in unknown session", - Feature::INVALID_SESSION_TYPE, + Feature::AvailabilityResult::kInvalidSessionType, mojom::FeatureSessionType::kUnknown, {mojom::FeatureSessionType::kRegular}}, {"non kiosk feature in initial session", - Feature::INVALID_SESSION_TYPE, + Feature::AvailabilityResult::kInvalidSessionType, mojom::FeatureSessionType::kInitial, {mojom::FeatureSessionType::kRegular}}, {"session agnostic feature in kiosk session", - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, mojom::FeatureSessionType::kKiosk, {}}, {"session agnostic feature in auto-launched kiosk session", - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, mojom::FeatureSessionType::kAutolaunchedKiosk, {}}, {"session agnostic feature in regular session", - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, mojom::FeatureSessionType::kRegular, {}}, {"session agnostic feature in unknown session", - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, mojom::FeatureSessionType::kUnknown, {}}, {"feature with multiple session types", - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, mojom::FeatureSessionType::kRegular, {mojom::FeatureSessionType::kRegular, mojom::FeatureSessionType::kKiosk}}, {"feature with multiple session types in unknown session", - Feature::INVALID_SESSION_TYPE, + Feature::AvailabilityResult::kInvalidSessionType, mojom::FeatureSessionType::kUnknown, {mojom::FeatureSessionType::kRegular, mojom::FeatureSessionType::kKiosk}}, {"feature with multiple session types in initial session", - Feature::INVALID_SESSION_TYPE, + Feature::AvailabilityResult::kInvalidSessionType, mojom::FeatureSessionType::kInitial, {mojom::FeatureSessionType::kRegular, mojom::FeatureSessionType::kKiosk}}, {"feature with auto-launched kiosk session type in regular session", - Feature::INVALID_SESSION_TYPE, + Feature::AvailabilityResult::kInvalidSessionType, mojom::FeatureSessionType::kAutolaunchedKiosk, {mojom::FeatureSessionType::kRegular}}, {"feature with auto-launched kiosk session type in auto-launched kiosk", - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, mojom::FeatureSessionType::kAutolaunchedKiosk, {mojom::FeatureSessionType::kAutolaunchedKiosk}}, {"feature with kiosk session type in auto-launched kiosk session", - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, mojom::FeatureSessionType::kAutolaunchedKiosk, {mojom::FeatureSessionType::kKiosk}}, }); @@ -632,14 +634,14 @@ TEST_F(SimpleFeatureTest, Platform) { SimpleFeature feature; feature.set_platforms({Feature::CHROMEOS_PLATFORM}); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, -1, Feature::CHROMEOS_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::INVALID_PLATFORM, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidPlatform, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, @@ -652,14 +654,14 @@ SimpleFeature feature; feature.set_min_manifest_version(5); - EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidMinManifestVersion, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, 0, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidMinManifestVersion, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, @@ -667,14 +669,14 @@ Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, 5, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, @@ -684,21 +686,21 @@ feature.set_max_manifest_version(8); - EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidMaxManifestVersion, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, 10, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation, 8, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToManifest( HashedExtensionId(), Manifest::Type::kUnknown, @@ -711,39 +713,39 @@ SimpleFeature feature; feature.set_command_line_switch("laser-beams"); { - EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH, + EXPECT_EQ(Feature::AvailabilityResult::kMissingCommandLineSwitch, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); } { base::test::ScopedCommandLine scoped_command_line; scoped_command_line.GetProcessCommandLine()->AppendSwitch("laser-beams"); - EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH, + EXPECT_EQ(Feature::AvailabilityResult::kMissingCommandLineSwitch, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); } { base::test::ScopedCommandLine scoped_command_line; scoped_command_line.GetProcessCommandLine()->AppendSwitch( "enable-laser-beams"); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); } { base::test::ScopedCommandLine scoped_command_line; scoped_command_line.GetProcessCommandLine()->AppendSwitch( "disable-laser-beams"); - EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH, + EXPECT_EQ(Feature::AvailabilityResult::kMissingCommandLineSwitch, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); } { base::test::ScopedCommandLine scoped_command_line; scoped_command_line.GetProcessCommandLine()->AppendSwitch("laser-beams=1"); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); } { base::test::ScopedCommandLine scoped_command_line; scoped_command_line.GetProcessCommandLine()->AppendSwitch("laser-beams=0"); - EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH, + EXPECT_EQ(Feature::AvailabilityResult::kMissingCommandLineSwitch, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); } } @@ -759,13 +761,13 @@ SimpleFeature simple_feature_1; simple_feature_1.set_feature_flag(kStubFeature1.name); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, simple_feature_1.IsAvailableToEnvironment(kUnspecifiedContextId) .result()); SimpleFeature simple_feature_2; simple_feature_2.set_feature_flag(kStubFeature2.name); - EXPECT_EQ(Feature::FEATURE_FLAG_DISABLED, + EXPECT_EQ(Feature::AvailabilityResult::kFeatureFlagDisabled, simple_feature_2.IsAvailableToEnvironment(kUnspecifiedContextId) .result()); @@ -773,10 +775,10 @@ base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeatures({kStubFeature2} /* enabled_features */, {kStubFeature1} /* disabled_features */); - EXPECT_EQ(Feature::FEATURE_FLAG_DISABLED, + EXPECT_EQ(Feature::AvailabilityResult::kFeatureFlagDisabled, simple_feature_1.IsAvailableToEnvironment(kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, simple_feature_2.IsAvailableToEnvironment(kUnspecifiedContextId) .result()); } @@ -785,76 +787,76 @@ // compute feature availability. TEST_F(SimpleFeatureTest, SupportedChannel) { // stable supported. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::STABLE, Channel::UNKNOWN)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::STABLE, Channel::CANARY)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::STABLE, Channel::DEV)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::STABLE, Channel::BETA)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::STABLE, Channel::STABLE)); // beta supported. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::BETA, Channel::UNKNOWN)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::BETA, Channel::CANARY)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::BETA, Channel::DEV)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::BETA, Channel::BETA)); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, IsAvailableInChannel(Channel::BETA, Channel::STABLE)); // dev supported. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::DEV, Channel::UNKNOWN)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::DEV, Channel::CANARY)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::DEV, Channel::DEV)); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, IsAvailableInChannel(Channel::DEV, Channel::BETA)); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, IsAvailableInChannel(Channel::DEV, Channel::STABLE)); // canary supported. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::CANARY, Channel::UNKNOWN)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::CANARY, Channel::CANARY)); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, IsAvailableInChannel(Channel::CANARY, Channel::DEV)); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, IsAvailableInChannel(Channel::CANARY, Channel::BETA)); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, IsAvailableInChannel(Channel::CANARY, Channel::STABLE)); // trunk supported. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(Channel::UNKNOWN, Channel::UNKNOWN)); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, IsAvailableInChannel(Channel::UNKNOWN, Channel::CANARY)); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, IsAvailableInChannel(Channel::UNKNOWN, Channel::DEV)); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, IsAvailableInChannel(Channel::UNKNOWN, Channel::BETA)); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, IsAvailableInChannel(Channel::UNKNOWN, Channel::STABLE)); // Verify that a feature without a channel specified is available in all // channels. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(std::nullopt, Channel::UNKNOWN)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(std::nullopt, Channel::CANARY)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(std::nullopt, Channel::DEV)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(std::nullopt, Channel::BETA)); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, IsAvailableInChannel(std::nullopt, Channel::STABLE)); } @@ -881,14 +883,14 @@ const HashedExtensionId kId2(std::string(32, 'b')); { ScopedCurrentChannel current_channel(Channel::BETA); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest(kId1, Manifest::Type::kExtension, ManifestLocation::kInvalidLocation, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest( kId2, Manifest::Type::kLegacyPackagedApp, @@ -898,14 +900,14 @@ } { ScopedCurrentChannel current_channel(Channel::STABLE); - EXPECT_NE(Feature::IS_AVAILABLE, + EXPECT_NE(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest(kId1, Manifest::Type::kExtension, ManifestLocation::kInvalidLocation, Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId) .result()); - EXPECT_NE(Feature::IS_AVAILABLE, + EXPECT_NE(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest( kId2, Manifest::Type::kLegacyPackagedApp, @@ -938,7 +940,7 @@ Feature* feature = static_cast<Feature*>(complex_feature.get()); { ScopedCurrentChannel current_channel(Channel::UNKNOWN); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest(kId1, Manifest::Type::kExtension, ManifestLocation::kInvalidLocation, @@ -948,7 +950,7 @@ } { ScopedCurrentChannel current_channel(Channel::BETA); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest( kId2, Manifest::Type::kLegacyPackagedApp, @@ -958,7 +960,7 @@ } { ScopedCurrentChannel current_channel(Channel::BETA); - EXPECT_NE(Feature::IS_AVAILABLE, + EXPECT_NE(Feature::AvailabilityResult::kIsAvailable, feature ->IsAvailableToManifest(kId1, Manifest::Type::kExtension, ManifestLocation::kInvalidLocation, @@ -992,7 +994,7 @@ { // Test a feature that requires a delegated availability check but is // missing the check handler. - EXPECT_EQ(Feature::MISSING_DELEGATED_AVAILABILITY_CHECK, + EXPECT_EQ(Feature::AvailabilityResult::kMissingDelegatedAvailabilityCheck, feature .IsAvailableToContext( /*extension=*/nullptr, mojom::ContextType::kWebPage, @@ -1005,7 +1007,7 @@ { // Test a feature that requires a delegated availability check and the check // is not successful. - EXPECT_EQ(Feature::FAILED_DELEGATED_AVAILABILITY_CHECK, + EXPECT_EQ(Feature::AvailabilityResult::kFailedDelegatedAvailabilityCheck, feature .IsAvailableToContext( /*extension=*/nullptr, mojom::ContextType::kWebPage, @@ -1019,7 +1021,7 @@ { // Test a feature that requires a delegated availability check and the check // is successful. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToContext( /*extension=*/nullptr, mojom::ContextType::kWebPage, @@ -1034,7 +1036,7 @@ // would be successful, but actually isn't called since the environment // check fails. ScopedCurrentChannel current_channel(Channel::STABLE); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, feature .IsAvailableToContext( /*extension=*/nullptr, mojom::ContextType::kWebPage, @@ -1048,7 +1050,7 @@ // would be successful, then confirm the check is called because the // environment check passes. ScopedCurrentChannel current_channel(Channel::STABLE); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToContext( /*extension=*/nullptr, mojom::ContextType::kWebPage, @@ -1061,7 +1063,7 @@ { // Test a feature that requires a delegated availability check and the check // would be successful, but the URL is not contained in the matchlist. - EXPECT_EQ(Feature::INVALID_URL, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidUrl, feature .IsAvailableToContext( /*extension=*/nullptr, mojom::ContextType::kWebPage, @@ -1085,7 +1087,7 @@ { // It should be available on trunk. ScopedCurrentChannel current_channel(Channel::UNKNOWN); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToContext(nullptr, mojom::ContextType::kWebUi, kAllowlistedUrl, kUnspecifiedContextId, @@ -1095,7 +1097,7 @@ { // It should be unavailable on beta. ScopedCurrentChannel current_channel(Channel::BETA); - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, feature .IsAvailableToContext(nullptr, mojom::ContextType::kWebUi, kAllowlistedUrl, kUnspecifiedContextId, @@ -1112,7 +1114,7 @@ feature.set_min_manifest_version(2); feature.set_extension_types({Manifest::Type::kExtension}); feature.set_contexts({mojom::ContextType::kPrivilegedExtension}); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); } @@ -1123,13 +1125,13 @@ { ScopedCurrentChannel current_channel(Channel::BETA); EXPECT_EQ( - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); } { ScopedCurrentChannel current_channel(Channel::STABLE); EXPECT_EQ( - Feature::UNSUPPORTED_CHANNEL, + Feature::AvailabilityResult::kUnsupportedChannel, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); } } @@ -1140,14 +1142,14 @@ SimpleFeature feature; feature.set_command_line_switch(kFakeSwitch); - EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH, + EXPECT_EQ(Feature::AvailabilityResult::kMissingCommandLineSwitch, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); { base::test::ScopedCommandLine command_line; command_line.GetProcessCommandLine()->AppendSwitch( base::StringPrintf("enable-%s", kFakeSwitch)); EXPECT_EQ( - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, feature.IsAvailableToEnvironment(kUnspecifiedContextId).result()); } } @@ -1167,14 +1169,14 @@ { base::test::ScopedCommandLine scoped_command_line; - EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, test_feature()); + EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, test_feature()); } { base::test::ScopedCommandLine scoped_command_line; scoped_command_line.GetProcessCommandLine()->AppendSwitch( switches::kEnableExperimentalExtensionApis); - EXPECT_EQ(Feature::IS_AVAILABLE, test_feature()); + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, test_feature()); } } @@ -1189,30 +1191,30 @@ // should be available if and only if the user is in dev mode. SetCurrentDeveloperMode(kContextId1, true); EXPECT_EQ( - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, dev_mode_only_feature.IsAvailableToEnvironment(kContextId1).result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, other_feature.IsAvailableToEnvironment(kContextId1).result()); SetCurrentDeveloperMode(kContextId1, false); EXPECT_EQ( - Feature::REQUIRES_DEVELOPER_MODE, + Feature::AvailabilityResult::kRequiresDeveloperMode, dev_mode_only_feature.IsAvailableToEnvironment(kContextId1).result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, other_feature.IsAvailableToEnvironment(kContextId1).result()); SetCurrentDeveloperMode(kContextId2, true); EXPECT_EQ( - Feature::IS_AVAILABLE, + Feature::AvailabilityResult::kIsAvailable, dev_mode_only_feature.IsAvailableToEnvironment(kContextId2).result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, other_feature.IsAvailableToEnvironment(kContextId2).result()); SetCurrentDeveloperMode(kContextId2, false); EXPECT_EQ( - Feature::REQUIRES_DEVELOPER_MODE, + Feature::AvailabilityResult::kRequiresDeveloperMode, dev_mode_only_feature.IsAvailableToEnvironment(kContextId2).result()); - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, other_feature.IsAvailableToEnvironment(kContextId2).result()); } @@ -1230,7 +1232,7 @@ EXPECT_TRUE(BackgroundInfo::IsServiceWorkerBased(extension.get())); // Expect the feature is allowed, since the default is to allow. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToContext( extension.get(), mojom::ContextType::kPrivilegedExtension, @@ -1242,7 +1244,7 @@ // Check with a different script file, which should return available, // since it's not a service worker context. - EXPECT_EQ(Feature::IS_AVAILABLE, + EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, feature .IsAvailableToContext(extension.get(), mojom::ContextType::kPrivilegedExtension, @@ -1253,7 +1255,7 @@ // Disable the feature for service workers. The feature should be disallowed. feature.set_disallow_for_service_workers(true); - EXPECT_EQ(Feature::INVALID_CONTEXT, + EXPECT_EQ(Feature::AvailabilityResult::kInvalidContext, feature .IsAvailableToContext( extension.get(), mojom::ContextType::kPrivilegedExtension,
diff --git a/extensions/common/manifest_handlers/extension_manifests_icon_variants_unittest.cc b/extensions/common/manifest_handlers/extension_manifests_icon_variants_unittest.cc index f30bbe8d6..221815c 100644 --- a/extensions/common/manifest_handlers/extension_manifests_icon_variants_unittest.cc +++ b/extensions/common/manifest_handlers/extension_manifests_icon_variants_unittest.cc
@@ -30,7 +30,7 @@ using NoIconVariantsManifestTest = ManifestTest; TEST_F(NoIconVariantsManifestTest, Warnings) { - // Test simple feature's AvailabilityResult::UNSUPPORTED_CHANNEL. + // Test simple feature's AvailabilityResult::kUnsupportedChannel. LoadAndExpectWarning("icon_variants.json", "'icon_variants' requires canary channel or newer, " "but this is the stable channel.");
diff --git a/extensions/common/mojom/message_port_mojom_traits.cc b/extensions/common/mojom/message_port_mojom_traits.cc index ade0642c..46a3686 100644 --- a/extensions/common/mojom/message_port_mojom_traits.cc +++ b/extensions/common/mojom/message_port_mojom_traits.cc
@@ -10,10 +10,13 @@ bool StructTraits<extensions::mojom::MessageDataView, extensions::Message>:: Read(extensions::mojom::MessageDataView data, extensions::Message* out) { - out->format = data.format(); - out->user_gesture = data.user_gesture(); - out->from_privileged_context = data.from_privileged_context(); - return data.ReadData(&out->data); + std::string message_data; + if (!data.ReadData(&message_data)) { + return false; + } + *out = extensions::Message(message_data, data.format(), data.user_gesture(), + data.from_privileged_context()); + return true; } bool StructTraits<extensions::mojom::PortIdDataView, extensions::PortId>::Read(
diff --git a/extensions/common/mojom/message_port_mojom_traits.h b/extensions/common/mojom/message_port_mojom_traits.h index 238d241..f6bb4b0 100644 --- a/extensions/common/mojom/message_port_mojom_traits.h +++ b/extensions/common/mojom/message_port_mojom_traits.h
@@ -18,20 +18,20 @@ template <> struct StructTraits<extensions::mojom::MessageDataView, extensions::Message> { static const std::string& data(const extensions::Message& message) { - return message.data; + return message.data(); } static extensions::mojom::SerializationFormat format( const extensions::Message& message) { - return message.format; + return message.format(); } static bool user_gesture(const extensions::Message& message) { - return message.user_gesture; + return message.user_gesture(); } static bool from_privileged_context(const extensions::Message& message) { - return message.from_privileged_context; + return message.from_privileged_context(); } static bool Read(extensions::mojom::MessageDataView data,
diff --git a/extensions/common/mojom/message_port_mojom_traits_unittest.cc b/extensions/common/mojom/message_port_mojom_traits_unittest.cc index bee33f384..fe8c5a7e2 100644 --- a/extensions/common/mojom/message_port_mojom_traits_unittest.cc +++ b/extensions/common/mojom/message_port_mojom_traits_unittest.cc
@@ -57,35 +57,33 @@ EXPECT_TRUE(mojo::test::SerializeAndDeserialize<extensions::mojom::Message>( input, output)); - EXPECT_EQ(input.data, output.data); - EXPECT_EQ(input.format, output.format); - EXPECT_EQ(input.user_gesture, output.user_gesture); - EXPECT_EQ(input.from_privileged_context, output.from_privileged_context); + EXPECT_EQ(input.data(), output.data()); + EXPECT_EQ(input.format(), output.format()); + EXPECT_EQ(input.user_gesture(), output.user_gesture()); + EXPECT_EQ(input.from_privileged_context(), output.from_privileged_context()); } TEST(MessagePortMojomTraitsTest, MessageValues) { - Message input; - input.data = "some text"; - input.format = mojom::SerializationFormat::kStructuredCloned; - input.user_gesture = true; - input.from_privileged_context = true; + Message input("some text", mojom::SerializationFormat::kStructuredCloned, + /*user_gesture=*/true, /*from_privileged_context=*/true); Message output; EXPECT_TRUE(mojo::test::SerializeAndDeserialize<extensions::mojom::Message>( input, output)); - EXPECT_EQ(input.data, output.data); - EXPECT_EQ(input.format, output.format); - EXPECT_EQ(input.user_gesture, output.user_gesture); - EXPECT_EQ(input.from_privileged_context, output.from_privileged_context); + EXPECT_EQ(input.data(), output.data()); + EXPECT_EQ(input.format(), output.format()); + EXPECT_EQ(input.user_gesture(), output.user_gesture()); + EXPECT_EQ(input.from_privileged_context(), output.from_privileged_context()); - input.user_gesture = false; + input = Message("some text", mojom::SerializationFormat::kStructuredCloned, + /*user_gesture=*/false, /*from_privileged_context=*/true); EXPECT_TRUE(mojo::test::SerializeAndDeserialize<extensions::mojom::Message>( input, output)); - EXPECT_EQ(input.data, output.data); - EXPECT_EQ(input.format, output.format); - EXPECT_EQ(input.user_gesture, output.user_gesture); - EXPECT_EQ(input.from_privileged_context, output.from_privileged_context); + EXPECT_EQ(input.data(), output.data()); + EXPECT_EQ(input.format(), output.format()); + EXPECT_EQ(input.user_gesture(), output.user_gesture()); + EXPECT_EQ(input.from_privileged_context(), output.from_privileged_context()); } } // namespace extensions
diff --git a/extensions/renderer/api/messaging/gin_port.h b/extensions/renderer/api/messaging/gin_port.h index 661563eb..a4f58b96 100644 --- a/extensions/renderer/api/messaging/gin_port.h +++ b/extensions/renderer/api/messaging/gin_port.h
@@ -25,7 +25,7 @@ namespace extensions { class APIEventHandler; -struct Message; +class Message; // A gin::Wrappable implementation of `runtime.Port` exposed to extensions. This // provides a means for extensions to communicate with themselves and each
diff --git a/extensions/renderer/api/messaging/gin_port_unittest.cc b/extensions/renderer/api/messaging/gin_port_unittest.cc index 3523584..5677b2b 100644 --- a/extensions/renderer/api/messaging/gin_port_unittest.cc +++ b/extensions/renderer/api/messaging/gin_port_unittest.cc
@@ -191,15 +191,15 @@ ASSERT_TRUE(delegate()->last_port_id()); EXPECT_EQ(*expected_port_id, delegate()->last_port_id()); ASSERT_TRUE(delegate()->last_message()); - EXPECT_EQ(expected_message->data, delegate()->last_message()->data); - EXPECT_EQ(expected_message->user_gesture, - delegate()->last_message()->user_gesture); + EXPECT_EQ(expected_message->data(), delegate()->last_message()->data()); + EXPECT_EQ(expected_message->user_gesture(), + delegate()->last_message()->user_gesture()); } else { RunFunctionAndExpectError(v8_function, context, std::size(args), args, "Uncaught Error: Could not serialize message."); EXPECT_FALSE(delegate()->last_port_id()); EXPECT_FALSE(delegate()->last_message()) - << delegate()->last_message()->data; + << delegate()->last_message()->data(); } delegate()->ResetLastMessage(); };
diff --git a/extensions/renderer/api/messaging/messaging_util.cc b/extensions/renderer/api/messaging/messaging_util.cc index 3380ebb..6a143d6 100644 --- a/extensions/renderer/api/messaging/messaging_util.cc +++ b/extensions/renderer/api/messaging/messaging_util.cc
@@ -205,7 +205,7 @@ std::string* error) { v8::Isolate* isolate = v8::Isolate::GetCurrent(); v8::Local<v8::String> v8_message_string = - gin::StringToV8(isolate, message.data); + gin::StringToV8(isolate, message.data()); v8::Local<v8::Value> parsed_message; if (!v8::JSON::Parse(context, v8_message_string).ToLocal(&parsed_message)) { CHECK(is_parsing_fail_safe); @@ -221,7 +221,7 @@ const Message& message, bool is_parsing_fail_safe, std::string* error) { - switch (message.format) { + switch (message.format()) { case mojom::SerializationFormat::kStructuredCloned: return MessageToV8UsingStructuredCloning(context, message, error); case mojom::SerializationFormat::kJson:
diff --git a/extensions/renderer/api/messaging/messaging_util.h b/extensions/renderer/api/messaging/messaging_util.h index 6e9194f..6d23351 100644 --- a/extensions/renderer/api/messaging/messaging_util.h +++ b/extensions/renderer/api/messaging/messaging_util.h
@@ -23,7 +23,7 @@ } // namespace mojom class ScriptContext; -struct Message; +class Message; struct MessagingEndpoint; namespace messaging_util {
diff --git a/extensions/renderer/api/messaging/native_renderer_messaging_service.cc b/extensions/renderer/api/messaging/native_renderer_messaging_service.cc index e3e95b0d..52146fe 100644 --- a/extensions/renderer/api/messaging/native_renderer_messaging_service.cc +++ b/extensions/renderer/api/messaging/native_renderer_messaging_service.cc
@@ -373,7 +373,7 @@ // port's `mojom::SerializationFormat` is always the same as that passed by // messaging clients and is independent of any fallback behavior. PortId port_id(script_context->context_id(), data->next_port_id++, is_opener, - message.format); + message.format()); mojo::PendingAssociatedRemote<mojom::MessagePort> message_port; mojo::PendingAssociatedReceiver<mojom::MessagePortHost> message_port_host_receiver; @@ -515,7 +515,7 @@ v8::Isolate* isolate = script_context->isolate(); v8::HandleScope handle_scope(isolate); std::unique_ptr<InteractionProvider::Scope> scoped_extension_interaction; - if (message.user_gesture) { + if (message.user_gesture()) { // TODO(crbug.com/41467311): Add logging for privilege level for // sender and receiver and decide if want to allow unprivileged to // privileged support. @@ -533,8 +533,8 @@ ScriptContext* script_context) { std::unique_ptr<blink::WebScopedWindowFocusAllowedIndicator> allow_window_focus; - if (message.user_gesture && script_context->web_frame()) { - bool sender_is_privileged = message.from_privileged_context; + if (message.user_gesture() && script_context->web_frame()) { + bool sender_is_privileged = message.from_privileged_context(); bool receiver_is_privileged = script_context->context_type() == extensions::mojom::ContextType::kPrivilegedExtension;
diff --git a/extensions/renderer/api/messaging/native_renderer_messaging_service.h b/extensions/renderer/api/messaging/native_renderer_messaging_service.h index d23338a3..9a8209f1 100644 --- a/extensions/renderer/api/messaging/native_renderer_messaging_service.h +++ b/extensions/renderer/api/messaging/native_renderer_messaging_service.h
@@ -31,7 +31,7 @@ class NativeExtensionBindingsSystem; class ScriptContextSetIterable; -struct Message; +class Message; struct MessageTarget; struct PortId;
diff --git a/extensions/renderer/api/messaging/one_time_message_handler.h b/extensions/renderer/api/messaging/one_time_message_handler.h index 3dc3863..d07b0e4 100644 --- a/extensions/renderer/api/messaging/one_time_message_handler.h +++ b/extensions/renderer/api/messaging/one_time_message_handler.h
@@ -32,7 +32,7 @@ class NativeExtensionBindingsSystem; class NativeRendererMessagingService; class ScriptContext; -struct Message; +class Message; struct MessageTarget; struct PortId;
diff --git a/extensions/renderer/script_context.cc b/extensions/renderer/script_context.cc index 992ebaa9..363ca7b 100644 --- a/extensions/renderer/script_context.cc +++ b/extensions/renderer/script_context.cc
@@ -284,7 +284,8 @@ switches::kExtensionTestApiOnWebPages) && context_type_ == mojom::ContextType::kWebPage); Feature::AvailabilityResult result = - allowed ? Feature::IS_AVAILABLE : Feature::MISSING_COMMAND_LINE_SWITCH; + allowed ? Feature::AvailabilityResult::kIsAvailable + : Feature::AvailabilityResult::kMissingCommandLineSwitch; return Feature::Availability(result, allowed ? "" : "Only allowed in tests"); } @@ -309,7 +310,7 @@ .IsMessagingEnabledInUserScriptWorld(*blink_isolated_world_id_); if (!is_available) { return Feature::Availability( - Feature::INVALID_CONTEXT, + Feature::AvailabilityResult::kInvalidContext, "Messaging APIs are not enabled for this user script world."); } }
diff --git a/extensions/renderer/v8_context_native_handler.cc b/extensions/renderer/v8_context_native_handler.cc index add91c66..edad15a 100644 --- a/extensions/renderer/v8_context_native_handler.cc +++ b/extensions/renderer/v8_context_native_handler.cc
@@ -58,7 +58,7 @@ v8::String::NewFromUtf8(isolate, "result", v8::NewStringType::kInternalized) .ToLocalChecked(), - v8::Integer::New(isolate, availability.result())) + v8::Integer::New(isolate, availability.result_as_int32())) .ToChecked(); args.GetReturnValue().Set(ret); }
diff --git a/extensions/shell/app/shell_main_delegate.cc b/extensions/shell/app/shell_main_delegate.cc index 25f4636..75ce9e90 100644 --- a/extensions/shell/app/shell_main_delegate.cc +++ b/extensions/shell/app/shell_main_delegate.cc
@@ -7,6 +7,7 @@ #include "base/command_line.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/no_destructor.h" #include "base/notimplemented.h" #include "base/path_service.h"
diff --git a/fuchsia_web/common/init_logging.cc b/fuchsia_web/common/init_logging.cc index 37578172..e5107bab 100644 --- a/fuchsia_web/common/init_logging.cc +++ b/fuchsia_web/common/init_logging.cc
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/numerics/safe_conversions.h" #include "base/strings/strcat.h" #include "base/strings/stringprintf.h"
diff --git a/google_apis/gcm/tools/mcs_probe.cc b/google_apis/gcm/tools/mcs_probe.cc index 8ab2296f..b51e7ad 100644 --- a/google_apis/gcm/tools/mcs_probe.cc +++ b/google_apis/gcm/tools/mcs_probe.cc
@@ -22,6 +22,7 @@ #include "base/functional/bind.h" #include "base/functional/callback.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" #include "base/message_loop/message_pump_type.h"
diff --git a/headless/lib/headless_content_main_delegate.cc b/headless/lib/headless_content_main_delegate.cc index a2b1e82..166c564b4 100644 --- a/headless/lib/headless_content_main_delegate.cc +++ b/headless/lib/headless_content_main_delegate.cc
@@ -17,6 +17,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/lazy_instance.h" +#include "base/logging/logging_settings.h" #include "base/notimplemented.h" #include "base/path_service.h" #include "base/process/current_process.h"
diff --git a/infra/config/PACKAGE.lock b/infra/config/PACKAGE.lock index 3a1f775..ba54abeb 100644 --- a/infra/config/PACKAGE.lock +++ b/infra/config/PACKAGE.lock
@@ -32,10 +32,10 @@ "name": "@chromium-luci", "source": { "repo": "https://chromium.googlesource.com/infra/chromium/+/refs/heads/main", - "revision": "133d552b8613e9a56025efdf91348ea2e2f8dcac", + "revision": "2bb983a2ea4435c7a7c11a5e96664dc3090fad77", "path": "starlark-libs/chromium-luci" }, - "lucicfg": "1.45.0" + "lucicfg": "1.46.1" }, { "name": "@chromium-targets",
diff --git a/infra/config/PACKAGE.star b/infra/config/PACKAGE.star index 5ea7d22..3d51d2eb 100644 --- a/infra/config/PACKAGE.star +++ b/infra/config/PACKAGE.star
@@ -29,7 +29,7 @@ repo = "infra/chromium", ref = "refs/heads/main", path = "starlark-libs/chromium-luci", - revision = "133d552b8613e9a56025efdf91348ea2e2f8dcac", + revision = "2bb983a2ea4435c7a7c11a5e96664dc3090fad77", ), )
diff --git a/infra/config/autoshard_exceptions.json b/infra/config/autoshard_exceptions.json index a647073..352fa09 100644 --- a/infra/config/autoshard_exceptions.json +++ b/infra/config/autoshard_exceptions.json
@@ -134,7 +134,7 @@ "try_builder": "linux-rel" }, "blink_wpt_tests": { - "shards": 2, + "shards": 3, "try_builder": "linux-rel" }, "browser_tests": { @@ -167,6 +167,14 @@ } } }, + "chromium.mac": { + "mac15-arm64-rel-tests": { + "interactive_ui_tests": { + "shards": 8, + "try_builder": "mac15-arm64-rel" + } + } + }, "chromium.memory": { "Linux ASan LSan Tests (1)": { "components_unittests": { @@ -178,7 +186,7 @@ "try_builder": "linux_chromium_asan_rel_ng" }, "interactive_ui_tests": { - "shards": 92, + "shards": 101, "try_builder": "linux_chromium_asan_rel_ng" }, "sync_integration_tests": { @@ -186,13 +194,13 @@ "try_builder": "linux_chromium_asan_rel_ng" }, "unit_tests": { - "shards": 9, + "shards": 10, "try_builder": "linux_chromium_asan_rel_ng" } }, "Linux TSan Tests": { "blink_unittests": { - "shards": 7, + "shards": 8, "try_builder": "linux_chromium_tsan_rel_ng" }, "components_unittests": { @@ -216,7 +224,7 @@ "try_builder": "linux_chromium_tsan_rel_ng" }, "unit_tests": { - "shards": 8, + "shards": 10, "try_builder": "linux_chromium_tsan_rel_ng" } } @@ -236,7 +244,7 @@ "try_builder": "win-rel" }, "interactive_ui_tests": { - "shards": 18, + "shards": 20, "try_builder": "win-rel" }, "pixel_browser_tests": { @@ -253,4 +261,4 @@ } } } -} +} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/Linux ASan LSan Builder/targets/chromium.memory.json b/infra/config/generated/builders/ci/Linux ASan LSan Builder/targets/chromium.memory.json index d1cc8ba..1826e9ea6 100644 --- a/infra/config/generated/builders/ci/Linux ASan LSan Builder/targets/chromium.memory.json +++ b/infra/config/generated/builders/ci/Linux ASan LSan Builder/targets/chromium.memory.json
@@ -913,7 +913,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 92 + "shards": 101 }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" @@ -1508,7 +1508,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 9 + "shards": 10 }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git "a/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/targets/chromium.memory.json" "b/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/targets/chromium.memory.json" index d1cc8ba..1826e9ea6 100644 --- "a/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/targets/chromium.memory.json" +++ "b/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/targets/chromium.memory.json"
@@ -913,7 +913,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 92 + "shards": 101 }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" @@ -1508,7 +1508,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 9 + "shards": 10 }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git a/infra/config/generated/builders/ci/Linux Builder/targets/chromium.linux.json b/infra/config/generated/builders/ci/Linux Builder/targets/chromium.linux.json index 1c5be331..2c48fcbd 100644 --- a/infra/config/generated/builders/ci/Linux Builder/targets/chromium.linux.json +++ b/infra/config/generated/builders/ci/Linux Builder/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 + "shards": 3 }, "test": "blink_wpt_tests", "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/ci/Linux TSan Builder/targets/chromium.memory.json b/infra/config/generated/builders/ci/Linux TSan Builder/targets/chromium.memory.json index 63b95ee..fee76ffb4 100644 --- a/infra/config/generated/builders/ci/Linux TSan Builder/targets/chromium.memory.json +++ b/infra/config/generated/builders/ci/Linux TSan Builder/targets/chromium.memory.json
@@ -213,7 +213,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 7 + "shards": 8 }, "test": "blink_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/controller:blink_unittests/" @@ -1490,7 +1490,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 8 + "shards": 10 }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git a/infra/config/generated/builders/ci/Linux TSan Tests/targets/chromium.memory.json b/infra/config/generated/builders/ci/Linux TSan Tests/targets/chromium.memory.json index 63b95ee..fee76ffb4 100644 --- a/infra/config/generated/builders/ci/Linux TSan Tests/targets/chromium.memory.json +++ b/infra/config/generated/builders/ci/Linux TSan Tests/targets/chromium.memory.json
@@ -213,7 +213,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 7 + "shards": 8 }, "test": "blink_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/controller:blink_unittests/" @@ -1490,7 +1490,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 8 + "shards": 10 }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git a/infra/config/generated/builders/ci/Linux Tests/targets/chromium.linux.json b/infra/config/generated/builders/ci/Linux Tests/targets/chromium.linux.json index 8005c51..be6f61e 100644 --- a/infra/config/generated/builders/ci/Linux Tests/targets/chromium.linux.json +++ b/infra/config/generated/builders/ci/Linux Tests/targets/chromium.linux.json
@@ -1677,7 +1677,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 + "shards": 3 }, "test": "blink_wpt_tests", "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/ci/Win x64 Builder/targets/chromium.win.json b/infra/config/generated/builders/ci/Win x64 Builder/targets/chromium.win.json index 84eb9e2..a761b00 100644 --- a/infra/config/generated/builders/ci/Win x64 Builder/targets/chromium.win.json +++ b/infra/config/generated/builders/ci/Win x64 Builder/targets/chromium.win.json
@@ -1078,7 +1078,7 @@ "os": "Windows-10-19045" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 18 + "shards": 20 }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/builders/ci/Win10 Tests x64/targets/chromium.win.json b/infra/config/generated/builders/ci/Win10 Tests x64/targets/chromium.win.json index c0f9129..fa55840 100644 --- a/infra/config/generated/builders/ci/Win10 Tests x64/targets/chromium.win.json +++ b/infra/config/generated/builders/ci/Win10 Tests x64/targets/chromium.win.json
@@ -1049,7 +1049,7 @@ "os": "Windows-10-19045" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 18 + "shards": 20 }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json b/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json index fbc9bc45..7fadf69 100644 --- a/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json +++ b/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json
@@ -70,5 +70,5 @@ }, "builder_group": "chromium.fyi", "recipe": "chromium", - "xcode_build_version": "17b54" + "xcode_build_version": "17c5013i" } \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json index 4ea22f1..15b3f4d 100644 --- a/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json +++ b/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json
@@ -9,7 +9,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -21,7 +21,7 @@ }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", "module_scheme": "gtest", - "name": "absl_hardening_tests iPhone 15 26.1", + "name": "absl_hardening_tests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -40,8 +40,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -52,14 +52,14 @@ }, "test": "absl_hardening_tests", "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -71,7 +71,7 @@ }, "module_name": "//third_party/angle/src/tests:angle_unittests", "module_scheme": "gtest", - "name": "angle_unittests iPhone 15 26.1", + "name": "angle_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -90,8 +90,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -103,7 +103,7 @@ "test": "angle_unittests", "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/", "use_isolated_scripts_api": true, - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -112,7 +112,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -124,7 +124,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPhone 15 26.1", + "name": "base_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -143,8 +143,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -155,14 +155,14 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -174,7 +174,7 @@ }, "module_name": "//third_party/blink/common:blink_common_unittests", "module_scheme": "gtest", - "name": "blink_common_unittests iPhone 15 26.1", + "name": "blink_common_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -193,8 +193,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -205,14 +205,14 @@ }, "test": "blink_common_unittests", "test_id_prefix": "ninja://third_party/blink/common:blink_common_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -224,7 +224,7 @@ }, "module_name": "//third_party/blink/renderer/platform:blink_fuzzer_unittests", "module_scheme": "gtest", - "name": "blink_fuzzer_unittests iPhone 15 26.1", + "name": "blink_fuzzer_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -243,8 +243,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -255,14 +255,14 @@ }, "test": "blink_fuzzer_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_fuzzer_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -274,7 +274,7 @@ }, "module_name": "//third_party/blink/renderer/platform/heap:blink_heap_unittests", "module_scheme": "gtest", - "name": "blink_heap_unittests iPhone 15 26.1", + "name": "blink_heap_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -293,8 +293,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -305,7 +305,7 @@ }, "test": "blink_heap_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/platform/heap:blink_heap_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -315,7 +315,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -327,7 +327,7 @@ }, "module_name": "//third_party/blink/renderer/platform:blink_platform_unittests", "module_scheme": "gtest", - "name": "blink_platform_unittests iPhone 15 26.1", + "name": "blink_platform_unittests iPhone 15 26.2", "precommit_args": [ "--gerrit-issue=${patch_issue}", "--gerrit-patchset=${patch_set}", @@ -351,8 +351,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -363,14 +363,14 @@ }, "test": "blink_platform_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_platform_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -382,7 +382,7 @@ }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", "module_scheme": "gtest", - "name": "boringssl_crypto_tests iPhone 15 26.1", + "name": "boringssl_crypto_tests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -401,8 +401,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -413,14 +413,14 @@ }, "test": "boringssl_crypto_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -432,7 +432,7 @@ }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", "module_scheme": "gtest", - "name": "boringssl_ssl_tests iPhone 15 26.1", + "name": "boringssl_ssl_tests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -451,8 +451,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -463,14 +463,14 @@ }, "test": "boringssl_ssl_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -482,7 +482,7 @@ }, "module_name": "//media/capture:capture_unittests", "module_scheme": "gtest", - "name": "capture_unittests iPhone 15 26.1", + "name": "capture_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -501,8 +501,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -513,14 +513,14 @@ }, "test": "capture_unittests", "test_id_prefix": "ninja://media/capture:capture_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -532,7 +532,7 @@ }, "module_name": "//media/cast:cast_unittests", "module_scheme": "gtest", - "name": "cast_unittests iPhone 15 26.1", + "name": "cast_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -551,8 +551,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -563,7 +563,7 @@ }, "test": "cast_unittests", "test_id_prefix": "ninja://media/cast:cast_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -573,7 +573,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -585,7 +585,7 @@ }, "module_name": "//cc:cc_unittests", "module_scheme": "gtest", - "name": "cc_unittests iPhone 15 26.1", + "name": "cc_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -604,8 +604,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -616,7 +616,7 @@ }, "test": "cc_unittests", "test_id_prefix": "ninja://cc:cc_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -625,7 +625,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -637,7 +637,7 @@ }, "module_name": "//components:components_browsertests", "module_scheme": "gtest", - "name": "components_browsertests iPhone 15 26.1", + "name": "components_browsertests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -656,8 +656,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -668,7 +668,7 @@ }, "test": "components_browsertests", "test_id_prefix": "ninja://components:components_browsertests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -677,7 +677,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -689,7 +689,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPhone 15 26.1", + "name": "components_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -708,8 +708,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -720,7 +720,7 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -729,7 +729,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -741,7 +741,7 @@ }, "module_name": "//ui/compositor:compositor_unittests", "module_scheme": "gtest", - "name": "compositor_unittests iPhone 15 26.1", + "name": "compositor_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -760,8 +760,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -772,7 +772,7 @@ }, "test": "compositor_unittests", "test_id_prefix": "ninja://ui/compositor:compositor_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -781,7 +781,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -793,7 +793,7 @@ }, "module_name": "//content/test:content_browsertests", "module_scheme": "gtest", - "name": "content_browsertests iPhone 15 26.1", + "name": "content_browsertests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -812,8 +812,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -825,7 +825,7 @@ }, "test": "content_browsertests", "test_id_prefix": "ninja://content/test:content_browsertests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -834,7 +834,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -846,7 +846,7 @@ }, "module_name": "//content/test:content_unittests", "module_scheme": "gtest", - "name": "content_unittests iPhone 15 26.1", + "name": "content_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -865,8 +865,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -877,14 +877,14 @@ }, "test": "content_unittests", "test_id_prefix": "ninja://content/test:content_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -896,7 +896,7 @@ }, "module_name": "//third_party/crashpad/crashpad:crashpad_tests", "module_scheme": "gtest", - "name": "crashpad_tests iPhone 15 26.1", + "name": "crashpad_tests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -915,8 +915,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -927,14 +927,14 @@ }, "test": "crashpad_tests", "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -946,7 +946,7 @@ }, "module_name": "//crypto:crypto_unittests", "module_scheme": "gtest", - "name": "crypto_unittests iPhone 15 26.1", + "name": "crypto_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -965,8 +965,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -977,14 +977,14 @@ }, "test": "crypto_unittests", "test_id_prefix": "ninja://crypto:crypto_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -996,7 +996,7 @@ }, "module_name": "//device:device_unittests", "module_scheme": "gtest", - "name": "device_unittests iPhone 15 26.1", + "name": "device_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1015,8 +1015,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1027,14 +1027,14 @@ }, "test": "device_unittests", "test_id_prefix": "ninja://device:device_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1046,7 +1046,7 @@ }, "module_name": "//ui/display:display_unittests", "module_scheme": "gtest", - "name": "display_unittests iPhone 15 26.1", + "name": "display_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1065,8 +1065,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1077,14 +1077,14 @@ }, "test": "display_unittests", "test_id_prefix": "ninja://ui/display:display_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1096,7 +1096,7 @@ }, "module_name": "//third_party/leveldatabase:env_chromium_unittests", "module_scheme": "gtest", - "name": "env_chromium_unittests iPhone 15 26.1", + "name": "env_chromium_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1115,8 +1115,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1127,14 +1127,14 @@ }, "test": "env_chromium_unittests", "test_id_prefix": "ninja://third_party/leveldatabase:env_chromium_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1146,7 +1146,7 @@ }, "module_name": "//ui/events:events_unittests", "module_scheme": "gtest", - "name": "events_unittests iPhone 15 26.1", + "name": "events_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1165,8 +1165,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1177,14 +1177,14 @@ }, "test": "events_unittests", "test_id_prefix": "ninja://ui/events:events_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1196,7 +1196,7 @@ }, "module_name": "//google_apis/gcm:gcm_unit_tests", "module_scheme": "gtest", - "name": "gcm_unit_tests iPhone 15 26.1", + "name": "gcm_unit_tests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1215,8 +1215,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1227,7 +1227,7 @@ }, "test": "gcm_unit_tests", "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1236,7 +1236,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1248,7 +1248,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPhone 15 26.1", + "name": "gfx_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1267,8 +1267,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1279,14 +1279,14 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1298,7 +1298,7 @@ }, "module_name": "//gin:gin_unittests", "module_scheme": "gtest", - "name": "gin_unittests iPhone 15 26.1", + "name": "gin_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1317,8 +1317,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1329,14 +1329,14 @@ }, "test": "gin_unittests", "test_id_prefix": "ninja://gin:gin_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1348,7 +1348,7 @@ }, "module_name": "//ui/gl:gl_unittests", "module_scheme": "gtest", - "name": "gl_unittests iPhone 15 26.1", + "name": "gl_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1367,8 +1367,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1379,14 +1379,14 @@ }, "test": "gl_unittests", "test_id_prefix": "ninja://ui/gl:gl_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1398,7 +1398,7 @@ }, "module_name": "//google_apis:google_apis_unittests", "module_scheme": "gtest", - "name": "google_apis_unittests iPhone 15 26.1", + "name": "google_apis_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1417,8 +1417,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1429,7 +1429,7 @@ }, "test": "google_apis_unittests", "test_id_prefix": "ninja://google_apis:google_apis_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1438,7 +1438,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1450,7 +1450,7 @@ }, "module_name": "//gpu:gpu_unittests", "module_scheme": "gtest", - "name": "gpu_unittests iPhone 15 26.1", + "name": "gpu_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1469,8 +1469,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1481,14 +1481,14 @@ }, "test": "gpu_unittests", "test_id_prefix": "ninja://gpu:gpu_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1500,7 +1500,7 @@ }, "module_name": "//components/gwp_asan:gwp_asan_unittests", "module_scheme": "gtest", - "name": "gwp_asan_unittests iPhone 15 26.1", + "name": "gwp_asan_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1519,8 +1519,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1531,14 +1531,14 @@ }, "test": "gwp_asan_unittests", "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1550,7 +1550,7 @@ }, "module_name": "//ui/latency:latency_unittests", "module_scheme": "gtest", - "name": "latency_unittests iPhone 15 26.1", + "name": "latency_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1569,8 +1569,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1581,14 +1581,14 @@ }, "test": "latency_unittests", "test_id_prefix": "ninja://ui/latency:latency_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1600,7 +1600,7 @@ }, "module_name": "//third_party/leveldatabase:leveldb_unittests", "module_scheme": "gtest", - "name": "leveldb_unittests iPhone 15 26.1", + "name": "leveldb_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1619,8 +1619,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1631,14 +1631,14 @@ }, "test": "leveldb_unittests", "test_id_prefix": "ninja://third_party/leveldatabase:leveldb_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1650,7 +1650,7 @@ }, "module_name": "//third_party/libjingle_xmpp:libjingle_xmpp_unittests", "module_scheme": "gtest", - "name": "libjingle_xmpp_unittests iPhone 15 26.1", + "name": "libjingle_xmpp_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1669,8 +1669,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1681,14 +1681,14 @@ }, "test": "libjingle_xmpp_unittests", "test_id_prefix": "ninja://third_party/libjingle_xmpp:libjingle_xmpp_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1700,7 +1700,7 @@ }, "module_name": "//third_party/liburlpattern:liburlpattern_unittests", "module_scheme": "gtest", - "name": "liburlpattern_unittests iPhone 15 26.1", + "name": "liburlpattern_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1719,8 +1719,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1731,7 +1731,7 @@ }, "test": "liburlpattern_unittests", "test_id_prefix": "ninja://third_party/liburlpattern:liburlpattern_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1740,7 +1740,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1752,7 +1752,7 @@ }, "module_name": "//media:media_unittests", "module_scheme": "gtest", - "name": "media_unittests iPhone 15 26.1", + "name": "media_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1771,8 +1771,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1783,7 +1783,7 @@ }, "test": "media_unittests", "test_id_prefix": "ninja://media:media_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1796,7 +1796,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1808,7 +1808,7 @@ }, "module_name": "//media:media_unittests", "module_scheme": "gtest", - "name": "media_unittests_skia_graphite_dawn iPhone 15 26.1", + "name": "media_unittests_skia_graphite_dawn iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1827,8 +1827,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1839,7 +1839,7 @@ }, "test": "media_unittests", "test_id_prefix": "ninja://media:media_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1852,7 +1852,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1864,7 +1864,7 @@ }, "module_name": "//media:media_unittests", "module_scheme": "gtest", - "name": "media_unittests_skia_graphite_metal iPhone 15 26.1", + "name": "media_unittests_skia_graphite_metal iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1883,8 +1883,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1895,14 +1895,14 @@ }, "test": "media_unittests", "test_id_prefix": "ninja://media:media_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1914,7 +1914,7 @@ }, "module_name": "//media/midi:midi_unittests", "module_scheme": "gtest", - "name": "midi_unittests iPhone 15 26.1", + "name": "midi_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1933,8 +1933,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1945,7 +1945,7 @@ }, "test": "midi_unittests", "test_id_prefix": "ninja://media/midi:midi_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1954,7 +1954,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1966,7 +1966,7 @@ }, "module_name": "//mojo:mojo_unittests", "module_scheme": "gtest", - "name": "mojo_unittests iPhone 15 26.1", + "name": "mojo_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1985,8 +1985,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1997,14 +1997,14 @@ }, "test": "mojo_unittests", "test_id_prefix": "ninja://mojo:mojo_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2016,7 +2016,7 @@ }, "module_name": "//ui/native_theme:native_theme_unittests", "module_scheme": "gtest", - "name": "native_theme_unittests iPhone 15 26.1", + "name": "native_theme_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2035,8 +2035,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2047,14 +2047,14 @@ }, "test": "native_theme_unittests", "test_id_prefix": "ninja://ui/native_theme:native_theme_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2066,7 +2066,7 @@ }, "module_name": "//net:net_unittests", "module_scheme": "gtest", - "name": "net_unittests iPhone 15 26.1", + "name": "net_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2085,8 +2085,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2097,14 +2097,14 @@ }, "test": "net_unittests", "test_id_prefix": "ninja://net:net_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2116,7 +2116,7 @@ }, "module_name": "//third_party/perfetto:perfetto_unittests", "module_scheme": "gtest", - "name": "perfetto_unittests iPhone 15 26.1", + "name": "perfetto_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2135,8 +2135,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2147,14 +2147,14 @@ }, "test": "perfetto_unittests", "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2166,7 +2166,7 @@ }, "module_name": "//printing:printing_unittests", "module_scheme": "gtest", - "name": "printing_unittests iPhone 15 26.1", + "name": "printing_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2185,8 +2185,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2197,14 +2197,14 @@ }, "test": "printing_unittests", "test_id_prefix": "ninja://printing:printing_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2216,7 +2216,7 @@ }, "module_name": "//sandbox:sandbox_unittests", "module_scheme": "gtest", - "name": "sandbox_unittests iPhone 15 26.1", + "name": "sandbox_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2235,8 +2235,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2247,7 +2247,7 @@ }, "test": "sandbox_unittests", "test_id_prefix": "ninja://sandbox:sandbox_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -2255,7 +2255,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2267,7 +2267,7 @@ }, "module_name": "//services:services_unittests", "module_scheme": "gtest", - "name": "services_unittests iPhone 15 26.1", + "name": "services_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2286,8 +2286,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2298,14 +2298,14 @@ }, "test": "services_unittests", "test_id_prefix": "ninja://services:services_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2317,7 +2317,7 @@ }, "module_name": "//ui/shell_dialogs:shell_dialogs_unittests", "module_scheme": "gtest", - "name": "shell_dialogs_unittests iPhone 15 26.1", + "name": "shell_dialogs_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2336,8 +2336,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2348,14 +2348,14 @@ }, "test": "shell_dialogs_unittests", "test_id_prefix": "ninja://ui/shell_dialogs:shell_dialogs_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2367,7 +2367,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPhone 15 26.1", + "name": "skia_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2386,8 +2386,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2398,14 +2398,14 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2417,7 +2417,7 @@ }, "module_name": "//sql:sql_unittests", "module_scheme": "gtest", - "name": "sql_unittests iPhone 15 26.1", + "name": "sql_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2436,8 +2436,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2448,14 +2448,14 @@ }, "test": "sql_unittests", "test_id_prefix": "ninja://sql:sql_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2467,7 +2467,7 @@ }, "module_name": "//storage:storage_unittests", "module_scheme": "gtest", - "name": "storage_unittests iPhone 15 26.1", + "name": "storage_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2486,8 +2486,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2498,7 +2498,7 @@ }, "test": "storage_unittests", "test_id_prefix": "ninja://storage:storage_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -2506,7 +2506,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2518,7 +2518,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPhone 15 26.1", + "name": "ui_base_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2537,8 +2537,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2549,14 +2549,14 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2568,7 +2568,7 @@ }, "module_name": "//ui/touch_selection:ui_touch_selection_unittests", "module_scheme": "gtest", - "name": "ui_touch_selection_unittests iPhone 15 26.1", + "name": "ui_touch_selection_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2587,8 +2587,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2599,14 +2599,14 @@ }, "test": "ui_touch_selection_unittests", "test_id_prefix": "ninja://ui/touch_selection:ui_touch_selection_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2618,7 +2618,7 @@ }, "module_name": "//ui/tests:ui_unittests", "module_scheme": "gtest", - "name": "ui_unittests iPhone 15 26.1", + "name": "ui_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2637,8 +2637,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2649,14 +2649,14 @@ }, "test": "ui_unittests", "test_id_prefix": "ninja://ui/tests:ui_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2668,7 +2668,7 @@ }, "module_name": "//url:url_unittests", "module_scheme": "gtest", - "name": "url_unittests iPhone 15 26.1", + "name": "url_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2687,8 +2687,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2699,7 +2699,7 @@ }, "test": "url_unittests", "test_id_prefix": "ninja://url:url_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -2709,7 +2709,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2721,7 +2721,7 @@ }, "module_name": "//components/viz:viz_unittests", "module_scheme": "gtest", - "name": "viz_unittests iPhone 15 26.1", + "name": "viz_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2740,8 +2740,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2752,14 +2752,14 @@ }, "test": "viz_unittests", "test_id_prefix": "ninja://components/viz:viz_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2771,7 +2771,7 @@ }, "module_name": "//third_party/blink/renderer/platform/wtf:wtf_unittests", "module_scheme": "gtest", - "name": "wtf_unittests iPhone 15 26.1", + "name": "wtf_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2790,8 +2790,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2802,14 +2802,14 @@ }, "test": "wtf_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/platform/wtf:wtf_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2821,7 +2821,7 @@ }, "module_name": "//third_party/zlib:zlib_unittests", "module_scheme": "gtest", - "name": "zlib_unittests iPhone 15 26.1", + "name": "zlib_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2840,8 +2840,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2852,7 +2852,7 @@ }, "test": "zlib_unittests", "test_id_prefix": "ninja://third_party/zlib:zlib_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" } ] }
diff --git a/infra/config/generated/builders/ci/ios18-beta-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios18-beta-simulator/targets/chromium.fyi.json index 99c3d80..d5b33d02 100644 --- a/infra/config/generated/builders/ci/ios18-beta-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/ci/ios18-beta-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -45,7 +45,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -64,7 +64,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -96,7 +96,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -115,7 +115,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -147,7 +147,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -166,7 +166,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -198,7 +198,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -217,7 +217,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -249,7 +249,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -268,7 +268,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -300,7 +300,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -319,7 +319,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -351,7 +351,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -370,7 +370,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -402,7 +402,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -421,7 +421,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -453,7 +453,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -472,7 +472,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -504,7 +504,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -523,7 +523,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -555,7 +555,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -574,7 +574,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -606,7 +606,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -625,7 +625,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -657,7 +657,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -676,7 +676,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -708,7 +708,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -727,7 +727,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -759,7 +759,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -781,7 +781,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -813,7 +813,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -836,7 +836,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -868,7 +868,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -891,7 +891,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -923,7 +923,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -948,7 +948,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -980,7 +980,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1005,7 +1005,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1037,7 +1037,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1062,7 +1062,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1094,7 +1094,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1119,7 +1119,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1151,7 +1151,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1176,7 +1176,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1208,7 +1208,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1233,7 +1233,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1265,7 +1265,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1288,7 +1288,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1320,7 +1320,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1343,7 +1343,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1375,7 +1375,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1398,7 +1398,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1430,7 +1430,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1453,7 +1453,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1485,7 +1485,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1507,7 +1507,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1539,7 +1539,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1561,7 +1561,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1593,7 +1593,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1617,7 +1617,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1649,7 +1649,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1674,7 +1674,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1706,7 +1706,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1731,7 +1731,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1763,7 +1763,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1783,7 +1783,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1815,7 +1815,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1834,7 +1834,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1866,7 +1866,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1885,7 +1885,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1917,7 +1917,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1939,7 +1939,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1971,7 +1971,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1994,7 +1994,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2026,7 +2026,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2049,7 +2049,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2081,7 +2081,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2101,7 +2101,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2133,7 +2133,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2153,7 +2153,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2185,7 +2185,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2204,7 +2204,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2236,7 +2236,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2255,7 +2255,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2287,7 +2287,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2306,7 +2306,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2338,7 +2338,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2357,7 +2357,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2389,7 +2389,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2409,7 +2409,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2441,7 +2441,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2460,7 +2460,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2492,7 +2492,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2511,7 +2511,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2543,7 +2543,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2562,7 +2562,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2594,7 +2594,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2616,7 +2616,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2648,7 +2648,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2670,7 +2670,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2702,7 +2702,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2724,7 +2724,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2756,7 +2756,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2775,7 +2775,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2807,7 +2807,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2826,7 +2826,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2858,7 +2858,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2877,7 +2877,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2909,7 +2909,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2928,7 +2928,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2960,7 +2960,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2979,7 +2979,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3011,7 +3011,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3030,7 +3030,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3062,7 +3062,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3081,7 +3081,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3113,7 +3113,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3132,7 +3132,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3164,7 +3164,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3183,7 +3183,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3215,7 +3215,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3234,7 +3234,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3266,7 +3266,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3285,7 +3285,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3317,7 +3317,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3336,7 +3336,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3368,7 +3368,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3387,7 +3387,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3419,7 +3419,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3438,7 +3438,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3470,7 +3470,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3489,7 +3489,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3521,7 +3521,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3540,7 +3540,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3572,7 +3572,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3591,7 +3591,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3623,7 +3623,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3642,7 +3642,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3674,7 +3674,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3693,7 +3693,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3725,7 +3725,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json b/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json index 2e2ed74..dd20a282 100644 --- a/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json +++ b/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json
@@ -69,5 +69,5 @@ }, "builder_group": "chromium.fyi", "recipe": "chromium", - "xcode_build_version": "17b54" + "xcode_build_version": "17c5013i" } \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json index 46cd8fdc..6df5ec5 100644 --- a/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -45,7 +45,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -64,7 +64,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -96,7 +96,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -115,7 +115,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -147,7 +147,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -166,7 +166,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -198,7 +198,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -217,7 +217,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -249,7 +249,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -268,7 +268,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -300,7 +300,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -319,7 +319,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -351,7 +351,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -370,7 +370,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -402,7 +402,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -421,7 +421,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -453,7 +453,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -472,7 +472,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -504,7 +504,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -523,7 +523,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -555,7 +555,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -574,7 +574,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -606,7 +606,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -625,7 +625,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -657,7 +657,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -676,7 +676,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -708,7 +708,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -727,7 +727,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -759,7 +759,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -778,7 +778,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -810,7 +810,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -829,7 +829,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -861,7 +861,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -880,7 +880,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -912,7 +912,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -931,7 +931,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -963,7 +963,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -982,7 +982,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1014,7 +1014,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1033,7 +1033,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1065,7 +1065,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1087,7 +1087,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1119,7 +1119,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1142,7 +1142,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1174,7 +1174,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1197,7 +1197,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1229,7 +1229,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1254,7 +1254,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1286,7 +1286,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1311,7 +1311,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1343,7 +1343,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1368,7 +1368,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1400,7 +1400,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1425,7 +1425,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1457,7 +1457,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1482,7 +1482,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1514,7 +1514,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1539,7 +1539,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1571,7 +1571,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1594,7 +1594,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1626,7 +1626,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1649,7 +1649,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1681,7 +1681,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1704,7 +1704,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1736,7 +1736,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1759,7 +1759,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1791,7 +1791,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1813,7 +1813,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1845,7 +1845,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1867,7 +1867,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1899,7 +1899,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1923,7 +1923,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1955,7 +1955,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1980,7 +1980,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2012,7 +2012,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2037,7 +2037,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2069,7 +2069,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2089,7 +2089,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2121,7 +2121,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2140,7 +2140,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2172,7 +2172,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2191,7 +2191,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2223,7 +2223,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2245,7 +2245,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2277,7 +2277,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2300,7 +2300,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2332,7 +2332,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2355,7 +2355,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2387,7 +2387,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2407,7 +2407,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2439,7 +2439,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2458,7 +2458,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2490,7 +2490,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2510,7 +2510,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2542,7 +2542,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2562,7 +2562,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2594,7 +2594,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2613,7 +2613,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2645,7 +2645,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2664,7 +2664,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2696,7 +2696,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2715,7 +2715,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2747,7 +2747,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2766,7 +2766,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2798,7 +2798,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2818,7 +2818,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2850,7 +2850,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2870,7 +2870,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2902,7 +2902,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2921,7 +2921,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2953,7 +2953,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2972,7 +2972,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3004,7 +3004,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3023,7 +3023,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3055,7 +3055,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3074,7 +3074,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3106,7 +3106,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3128,7 +3128,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3160,7 +3160,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3182,7 +3182,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3214,7 +3214,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3236,7 +3236,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3268,7 +3268,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3287,7 +3287,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3319,7 +3319,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3338,7 +3338,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3370,7 +3370,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3389,7 +3389,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3421,7 +3421,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3440,7 +3440,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3472,7 +3472,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3491,7 +3491,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3523,7 +3523,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3542,7 +3542,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3574,7 +3574,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3593,7 +3593,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3625,7 +3625,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3644,7 +3644,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3676,7 +3676,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3695,7 +3695,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3727,7 +3727,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3746,7 +3746,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3778,7 +3778,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3797,7 +3797,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3829,7 +3829,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3848,7 +3848,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3880,7 +3880,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3899,7 +3899,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3931,7 +3931,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3950,7 +3950,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3982,7 +3982,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4001,7 +4001,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4033,7 +4033,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4052,7 +4052,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4084,7 +4084,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4103,7 +4103,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4135,7 +4135,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4154,7 +4154,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4186,7 +4186,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4205,7 +4205,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4237,7 +4237,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4256,7 +4256,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4288,7 +4288,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4307,7 +4307,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4339,7 +4339,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4358,7 +4358,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4390,7 +4390,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4409,7 +4409,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4441,7 +4441,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json index cd0b4c7..ad21b7e 100644 --- a/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json
@@ -9,11 +9,11 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -21,7 +21,7 @@ }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", "module_scheme": "gtest", - "name": "absl_hardening_tests iPad Air (6th generation) 26.1", + "name": "absl_hardening_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -41,11 +41,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -53,18 +53,18 @@ }, "test": "absl_hardening_tests", "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -72,7 +72,7 @@ }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", "module_scheme": "gtest", - "name": "absl_hardening_tests iPhone 16 26.1", + "name": "absl_hardening_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -92,11 +92,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -104,18 +104,18 @@ }, "test": "absl_hardening_tests", "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -123,7 +123,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPad Air (6th generation) 26.1", + "name": "base_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -143,11 +143,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -155,18 +155,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -174,7 +174,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPhone 16 26.1", + "name": "base_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -194,11 +194,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -206,18 +206,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -225,7 +225,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPhone SE (3rd generation) 26.1", + "name": "base_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -245,11 +245,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -257,18 +257,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -276,7 +276,7 @@ }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", "module_scheme": "gtest", - "name": "boringssl_crypto_tests iPad Air (6th generation) 26.1", + "name": "boringssl_crypto_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -296,11 +296,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -308,18 +308,18 @@ }, "test": "boringssl_crypto_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -327,7 +327,7 @@ }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", "module_scheme": "gtest", - "name": "boringssl_crypto_tests iPhone 16 26.1", + "name": "boringssl_crypto_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -347,11 +347,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -359,18 +359,18 @@ }, "test": "boringssl_crypto_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -378,7 +378,7 @@ }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", "module_scheme": "gtest", - "name": "boringssl_ssl_tests iPad Air (6th generation) 26.1", + "name": "boringssl_ssl_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -398,11 +398,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -410,18 +410,18 @@ }, "test": "boringssl_ssl_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -429,7 +429,7 @@ }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", "module_scheme": "gtest", - "name": "boringssl_ssl_tests iPhone 16 26.1", + "name": "boringssl_ssl_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -449,11 +449,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -461,18 +461,18 @@ }, "test": "boringssl_ssl_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -480,7 +480,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPad Air (6th generation) 26.1", + "name": "components_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -500,11 +500,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -512,18 +512,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -531,7 +531,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPhone 16 26.1", + "name": "components_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -551,11 +551,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -563,18 +563,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -582,7 +582,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPhone SE (3rd generation) 26.1", + "name": "components_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -602,11 +602,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -614,18 +614,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -633,7 +633,7 @@ }, "module_name": "//crypto:crypto_unittests", "module_scheme": "gtest", - "name": "crypto_unittests iPad Air (6th generation) 26.1", + "name": "crypto_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -653,11 +653,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -665,18 +665,18 @@ }, "test": "crypto_unittests", "test_id_prefix": "ninja://crypto:crypto_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -684,7 +684,7 @@ }, "module_name": "//crypto:crypto_unittests", "module_scheme": "gtest", - "name": "crypto_unittests iPhone 16 26.1", + "name": "crypto_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -704,11 +704,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -716,18 +716,18 @@ }, "test": "crypto_unittests", "test_id_prefix": "ninja://crypto:crypto_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -735,7 +735,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPad Air (6th generation) 26.1", + "name": "gfx_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -755,11 +755,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -767,18 +767,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -786,7 +786,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPhone 16 26.1", + "name": "gfx_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -806,11 +806,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -818,18 +818,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -837,7 +837,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPhone SE (3rd generation) 26.1", + "name": "gfx_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -857,11 +857,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -869,18 +869,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -888,7 +888,7 @@ }, "module_name": "//google_apis:google_apis_unittests", "module_scheme": "gtest", - "name": "google_apis_unittests iPad Air (6th generation) 26.1", + "name": "google_apis_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -908,11 +908,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -920,18 +920,18 @@ }, "test": "google_apis_unittests", "test_id_prefix": "ninja://google_apis:google_apis_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -939,7 +939,7 @@ }, "module_name": "//google_apis:google_apis_unittests", "module_scheme": "gtest", - "name": "google_apis_unittests iPhone 16 26.1", + "name": "google_apis_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -959,11 +959,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -971,18 +971,18 @@ }, "test": "google_apis_unittests", "test_id_prefix": "ninja://google_apis:google_apis_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -990,7 +990,7 @@ }, "module_name": "//components/gwp_asan:gwp_asan_unittests", "module_scheme": "gtest", - "name": "gwp_asan_unittests iPad Air (6th generation) 26.1", + "name": "gwp_asan_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1010,11 +1010,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1022,18 +1022,18 @@ }, "test": "gwp_asan_unittests", "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1041,7 +1041,7 @@ }, "module_name": "//components/gwp_asan:gwp_asan_unittests", "module_scheme": "gtest", - "name": "gwp_asan_unittests iPhone 16 26.1", + "name": "gwp_asan_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1061,11 +1061,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1073,21 +1073,21 @@ }, "test": "gwp_asan_unittests", "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1095,7 +1095,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1115,11 +1115,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1128,21 +1128,21 @@ }, "test": "ios_chrome_bookmarks_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1150,7 +1150,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1170,11 +1170,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1183,7 +1183,7 @@ }, "test": "ios_chrome_bookmarks_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1192,14 +1192,14 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1207,7 +1207,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1227,11 +1227,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1240,7 +1240,7 @@ }, "test": "ios_chrome_integration_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1249,14 +1249,14 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1264,7 +1264,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1284,11 +1284,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1297,7 +1297,7 @@ }, "test": "ios_chrome_integration_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1306,14 +1306,14 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1321,7 +1321,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1341,11 +1341,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1354,7 +1354,7 @@ }, "test": "ios_chrome_settings_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1363,14 +1363,14 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1378,7 +1378,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1398,11 +1398,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1411,21 +1411,21 @@ }, "test": "ios_chrome_settings_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1433,7 +1433,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1453,11 +1453,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1466,21 +1466,21 @@ }, "test": "ios_chrome_signin_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1488,7 +1488,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1508,11 +1508,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1521,21 +1521,21 @@ }, "test": "ios_chrome_signin_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1543,7 +1543,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1563,11 +1563,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1575,21 +1575,21 @@ }, "test": "ios_chrome_smoke_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1597,7 +1597,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1617,11 +1617,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1629,7 +1629,7 @@ }, "test": "ios_chrome_smoke_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1638,14 +1638,14 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1653,7 +1653,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1673,11 +1673,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1686,7 +1686,7 @@ }, "test": "ios_chrome_ui_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1695,14 +1695,14 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1710,7 +1710,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1730,11 +1730,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1743,18 +1743,18 @@ }, "test": "ios_chrome_ui_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1762,7 +1762,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPad Air (6th generation) 26.1", + "name": "ios_chrome_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1782,11 +1782,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1794,18 +1794,18 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1813,7 +1813,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPhone 16 26.1", + "name": "ios_chrome_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1833,11 +1833,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1845,18 +1845,18 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1864,7 +1864,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1884,11 +1884,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1896,21 +1896,21 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1918,7 +1918,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1938,11 +1938,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1951,21 +1951,21 @@ }, "test": "ios_chrome_web_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1973,7 +1973,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_web_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1993,11 +1993,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2006,18 +2006,18 @@ }, "test": "ios_chrome_web_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2025,7 +2025,7 @@ }, "module_name": "//ios/components:ios_components_unittests", "module_scheme": "gtest", - "name": "ios_components_unittests iPad Air (6th generation) 26.1", + "name": "ios_components_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2045,11 +2045,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2057,18 +2057,18 @@ }, "test": "ios_components_unittests", "test_id_prefix": "ninja://ios/components:ios_components_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2076,7 +2076,7 @@ }, "module_name": "//ios/components:ios_components_unittests", "module_scheme": "gtest", - "name": "ios_components_unittests iPhone 16 26.1", + "name": "ios_components_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2096,11 +2096,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2108,19 +2108,19 @@ }, "test": "ios_components_unittests", "test_id_prefix": "ninja://ios/components:ios_components_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2128,7 +2128,7 @@ }, "module_name": "//third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module", "module_scheme": "xctest", - "name": "ios_crash_xcuitests_module iPad Air (6th generation) 26.1", + "name": "ios_crash_xcuitests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2148,11 +2148,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2160,19 +2160,19 @@ }, "test": "ios_crash_xcuitests_module", "test_id_prefix": "ninja://third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2180,7 +2180,7 @@ }, "module_name": "//third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module", "module_scheme": "xctest", - "name": "ios_crash_xcuitests_module iPhone 16 26.1", + "name": "ios_crash_xcuitests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2200,11 +2200,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2212,18 +2212,18 @@ }, "test": "ios_crash_xcuitests_module", "test_id_prefix": "ninja://third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2231,7 +2231,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.1", + "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2251,11 +2251,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2263,18 +2263,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2282,7 +2282,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPhone 16 26.1", + "name": "ios_credential_provider_extension_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2302,11 +2302,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2314,18 +2314,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2333,7 +2333,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2353,11 +2353,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2365,18 +2365,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2384,7 +2384,7 @@ }, "module_name": "//ios/net:ios_net_unittests", "module_scheme": "gtest", - "name": "ios_net_unittests iPad Air (6th generation) 26.1", + "name": "ios_net_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2404,11 +2404,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2417,18 +2417,18 @@ }, "test": "ios_net_unittests", "test_id_prefix": "ninja://ios/net:ios_net_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2436,7 +2436,7 @@ }, "module_name": "//ios/net:ios_net_unittests", "module_scheme": "gtest", - "name": "ios_net_unittests iPhone 16 26.1", + "name": "ios_net_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2456,11 +2456,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2469,18 +2469,18 @@ }, "test": "ios_net_unittests", "test_id_prefix": "ninja://ios/net:ios_net_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2488,7 +2488,7 @@ }, "module_name": "//ios/testing:ios_testing_unittests", "module_scheme": "gtest", - "name": "ios_testing_unittests iPad Air (6th generation) 26.1", + "name": "ios_testing_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2508,11 +2508,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2520,18 +2520,18 @@ }, "test": "ios_testing_unittests", "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2539,7 +2539,7 @@ }, "module_name": "//ios/testing:ios_testing_unittests", "module_scheme": "gtest", - "name": "ios_testing_unittests iPhone 16 26.1", + "name": "ios_testing_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2559,11 +2559,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2571,18 +2571,18 @@ }, "test": "ios_testing_unittests", "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2590,7 +2590,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPad Air (6th generation) 26.1", + "name": "ios_web_inttests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2610,11 +2610,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2622,18 +2622,18 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2641,7 +2641,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPhone 16 26.1", + "name": "ios_web_inttests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2661,11 +2661,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2673,18 +2673,18 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2692,7 +2692,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPhone SE (3rd generation) 26.1", + "name": "ios_web_inttests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2712,11 +2712,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2724,21 +2724,21 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2746,7 +2746,7 @@ }, "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module", "module_scheme": "xctest", - "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2766,11 +2766,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2778,21 +2778,21 @@ }, "test": "ios_web_shell_eg2tests_module", "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2800,7 +2800,7 @@ }, "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module", "module_scheme": "xctest", - "name": "ios_web_shell_eg2tests_module iPhone 16 26.1", + "name": "ios_web_shell_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2820,11 +2820,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2832,18 +2832,18 @@ }, "test": "ios_web_shell_eg2tests_module", "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2851,7 +2851,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPad Air (6th generation) 26.1", + "name": "ios_web_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2871,11 +2871,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2883,18 +2883,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2902,7 +2902,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPhone 16 26.1", + "name": "ios_web_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2922,11 +2922,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2934,18 +2934,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2953,7 +2953,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_web_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2973,11 +2973,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2985,18 +2985,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3004,7 +3004,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPad Air (6th generation) 26.1", + "name": "ios_web_view_inttests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3024,11 +3024,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3036,18 +3036,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3055,7 +3055,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPhone 16 26.1", + "name": "ios_web_view_inttests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3075,11 +3075,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3087,18 +3087,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3106,7 +3106,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.1", + "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3126,11 +3126,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3138,18 +3138,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3157,7 +3157,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPad Air (6th generation) 26.1", + "name": "ios_web_view_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3177,11 +3177,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3189,18 +3189,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3208,7 +3208,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPhone 16 26.1", + "name": "ios_web_view_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3228,11 +3228,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3240,18 +3240,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3259,7 +3259,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3279,11 +3279,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3291,18 +3291,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3310,7 +3310,7 @@ }, "module_name": "//net:net_unittests", "module_scheme": "gtest", - "name": "net_unittests iPad Air (6th generation) 26.1", + "name": "net_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3330,11 +3330,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3342,18 +3342,18 @@ }, "test": "net_unittests", "test_id_prefix": "ninja://net:net_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3361,7 +3361,7 @@ }, "module_name": "//net:net_unittests", "module_scheme": "gtest", - "name": "net_unittests iPhone 16 26.1", + "name": "net_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3381,11 +3381,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3393,18 +3393,18 @@ }, "test": "net_unittests", "test_id_prefix": "ninja://net:net_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3412,7 +3412,7 @@ }, "module_name": "//services:services_unittests", "module_scheme": "gtest", - "name": "services_unittests iPad Air (6th generation) 26.1", + "name": "services_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3432,11 +3432,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3444,18 +3444,18 @@ }, "test": "services_unittests", "test_id_prefix": "ninja://services:services_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3463,7 +3463,7 @@ }, "module_name": "//services:services_unittests", "module_scheme": "gtest", - "name": "services_unittests iPhone 16 26.1", + "name": "services_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3483,11 +3483,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3495,18 +3495,18 @@ }, "test": "services_unittests", "test_id_prefix": "ninja://services:services_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3514,7 +3514,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPad Air (6th generation) 26.1", + "name": "skia_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3534,11 +3534,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3546,18 +3546,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3565,7 +3565,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPhone 16 26.1", + "name": "skia_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3585,11 +3585,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3597,18 +3597,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3616,7 +3616,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPhone SE (3rd generation) 26.1", + "name": "skia_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3636,11 +3636,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3648,18 +3648,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3667,7 +3667,7 @@ }, "module_name": "//sql:sql_unittests", "module_scheme": "gtest", - "name": "sql_unittests iPad Air (6th generation) 26.1", + "name": "sql_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3687,11 +3687,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3699,18 +3699,18 @@ }, "test": "sql_unittests", "test_id_prefix": "ninja://sql:sql_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3718,7 +3718,7 @@ }, "module_name": "//sql:sql_unittests", "module_scheme": "gtest", - "name": "sql_unittests iPhone 16 26.1", + "name": "sql_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3738,11 +3738,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3750,18 +3750,18 @@ }, "test": "sql_unittests", "test_id_prefix": "ninja://sql:sql_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3769,7 +3769,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPad Air (6th generation) 26.1", + "name": "ui_base_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3789,11 +3789,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3801,18 +3801,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3820,7 +3820,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPhone 16 26.1", + "name": "ui_base_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3840,11 +3840,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3852,18 +3852,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3871,7 +3871,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPhone SE (3rd generation) 26.1", + "name": "ui_base_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3891,11 +3891,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3903,18 +3903,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3922,7 +3922,7 @@ }, "module_name": "//url:url_unittests", "module_scheme": "gtest", - "name": "url_unittests iPad Air (6th generation) 26.1", + "name": "url_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3942,11 +3942,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3954,18 +3954,18 @@ }, "test": "url_unittests", "test_id_prefix": "ninja://url:url_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3973,7 +3973,7 @@ }, "module_name": "//url:url_unittests", "module_scheme": "gtest", - "name": "url_unittests iPhone 16 26.1", + "name": "url_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3993,11 +3993,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4005,7 +4005,7 @@ }, "test": "url_unittests", "test_id_prefix": "ninja://url:url_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" } ] }
diff --git a/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json b/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json index 930c95f..d3262d1 100644 --- a/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json +++ b/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json
@@ -69,5 +69,5 @@ }, "builder_group": "chromium.fyi", "recipe": "chromium", - "xcode_build_version": "17b54" + "xcode_build_version": "17c5013i" } \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json index d71fdf09..28580ac6 100644 --- a/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json
@@ -9,11 +9,11 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -21,7 +21,7 @@ }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", "module_scheme": "gtest", - "name": "absl_hardening_tests iPad Air (6th generation) 26.1", + "name": "absl_hardening_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -41,11 +41,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -53,18 +53,18 @@ }, "test": "absl_hardening_tests", "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -72,7 +72,7 @@ }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", "module_scheme": "gtest", - "name": "absl_hardening_tests iPhone 16 26.1", + "name": "absl_hardening_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -92,11 +92,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -104,18 +104,18 @@ }, "test": "absl_hardening_tests", "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -123,7 +123,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPad Air (6th generation) 26.1", + "name": "base_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -143,11 +143,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -155,18 +155,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -174,7 +174,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPhone 16 26.1", + "name": "base_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -194,11 +194,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -206,18 +206,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -225,7 +225,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPhone SE (3rd generation) 26.1", + "name": "base_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -245,11 +245,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -257,18 +257,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -276,7 +276,7 @@ }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", "module_scheme": "gtest", - "name": "boringssl_crypto_tests iPad Air (6th generation) 26.1", + "name": "boringssl_crypto_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -296,11 +296,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -308,18 +308,18 @@ }, "test": "boringssl_crypto_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -327,7 +327,7 @@ }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", "module_scheme": "gtest", - "name": "boringssl_crypto_tests iPhone 16 26.1", + "name": "boringssl_crypto_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -347,11 +347,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -359,18 +359,18 @@ }, "test": "boringssl_crypto_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -378,7 +378,7 @@ }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", "module_scheme": "gtest", - "name": "boringssl_ssl_tests iPad Air (6th generation) 26.1", + "name": "boringssl_ssl_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -398,11 +398,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -410,18 +410,18 @@ }, "test": "boringssl_ssl_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -429,7 +429,7 @@ }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", "module_scheme": "gtest", - "name": "boringssl_ssl_tests iPhone 16 26.1", + "name": "boringssl_ssl_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -449,11 +449,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -461,18 +461,18 @@ }, "test": "boringssl_ssl_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -480,7 +480,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPad Air (6th generation) 26.1", + "name": "components_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -500,11 +500,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -512,18 +512,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -531,7 +531,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPhone 16 26.1", + "name": "components_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -551,11 +551,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -563,18 +563,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -582,7 +582,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPhone SE (3rd generation) 26.1", + "name": "components_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -602,11 +602,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -614,18 +614,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -633,7 +633,7 @@ }, "module_name": "//crypto:crypto_unittests", "module_scheme": "gtest", - "name": "crypto_unittests iPad Air (6th generation) 26.1", + "name": "crypto_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -653,11 +653,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -665,18 +665,18 @@ }, "test": "crypto_unittests", "test_id_prefix": "ninja://crypto:crypto_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -684,7 +684,7 @@ }, "module_name": "//crypto:crypto_unittests", "module_scheme": "gtest", - "name": "crypto_unittests iPhone 16 26.1", + "name": "crypto_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -704,11 +704,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -716,18 +716,18 @@ }, "test": "crypto_unittests", "test_id_prefix": "ninja://crypto:crypto_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -735,7 +735,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPad Air (6th generation) 26.1", + "name": "gfx_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -755,11 +755,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -767,18 +767,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -786,7 +786,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPhone 16 26.1", + "name": "gfx_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -806,11 +806,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -818,18 +818,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -837,7 +837,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPhone SE (3rd generation) 26.1", + "name": "gfx_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -857,11 +857,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -869,18 +869,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -888,7 +888,7 @@ }, "module_name": "//google_apis:google_apis_unittests", "module_scheme": "gtest", - "name": "google_apis_unittests iPad Air (6th generation) 26.1", + "name": "google_apis_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -908,11 +908,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -920,18 +920,18 @@ }, "test": "google_apis_unittests", "test_id_prefix": "ninja://google_apis:google_apis_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -939,7 +939,7 @@ }, "module_name": "//google_apis:google_apis_unittests", "module_scheme": "gtest", - "name": "google_apis_unittests iPhone 16 26.1", + "name": "google_apis_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -959,11 +959,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -971,18 +971,18 @@ }, "test": "google_apis_unittests", "test_id_prefix": "ninja://google_apis:google_apis_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -990,7 +990,7 @@ }, "module_name": "//components/gwp_asan:gwp_asan_unittests", "module_scheme": "gtest", - "name": "gwp_asan_unittests iPad Air (6th generation) 26.1", + "name": "gwp_asan_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1010,11 +1010,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1022,18 +1022,18 @@ }, "test": "gwp_asan_unittests", "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1041,7 +1041,7 @@ }, "module_name": "//components/gwp_asan:gwp_asan_unittests", "module_scheme": "gtest", - "name": "gwp_asan_unittests iPhone 16 26.1", + "name": "gwp_asan_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1061,11 +1061,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1073,19 +1073,19 @@ }, "test": "gwp_asan_unittests", "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1093,7 +1093,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1113,11 +1113,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1126,19 +1126,19 @@ }, "test": "ios_chrome_bookmarks_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1146,7 +1146,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1166,11 +1166,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1179,7 +1179,7 @@ }, "test": "ios_chrome_bookmarks_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1188,12 +1188,12 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1201,7 +1201,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1221,11 +1221,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1234,7 +1234,7 @@ }, "test": "ios_chrome_integration_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1243,12 +1243,12 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1256,7 +1256,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1276,11 +1276,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1289,7 +1289,7 @@ }, "test": "ios_chrome_integration_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1298,12 +1298,12 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1311,7 +1311,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1331,11 +1331,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1344,7 +1344,7 @@ }, "test": "ios_chrome_settings_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1353,12 +1353,12 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1366,7 +1366,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1386,11 +1386,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1399,19 +1399,19 @@ }, "test": "ios_chrome_settings_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1419,7 +1419,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1439,11 +1439,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1452,19 +1452,19 @@ }, "test": "ios_chrome_signin_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1472,7 +1472,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1492,11 +1492,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1505,19 +1505,19 @@ }, "test": "ios_chrome_signin_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1525,7 +1525,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1545,11 +1545,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1557,19 +1557,19 @@ }, "test": "ios_chrome_smoke_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1577,7 +1577,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1597,11 +1597,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1609,7 +1609,7 @@ }, "test": "ios_chrome_smoke_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1618,12 +1618,12 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1631,7 +1631,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1651,11 +1651,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1664,7 +1664,7 @@ }, "test": "ios_chrome_ui_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1673,12 +1673,12 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1686,7 +1686,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1706,11 +1706,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1719,18 +1719,18 @@ }, "test": "ios_chrome_ui_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1738,7 +1738,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPad Air (6th generation) 26.1", + "name": "ios_chrome_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1758,11 +1758,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1770,18 +1770,18 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1789,7 +1789,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPhone 16 26.1", + "name": "ios_chrome_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1809,11 +1809,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1821,18 +1821,18 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1840,7 +1840,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1860,11 +1860,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1872,19 +1872,19 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1892,7 +1892,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1912,11 +1912,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1925,19 +1925,19 @@ }, "test": "ios_chrome_web_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1945,7 +1945,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_web_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1965,11 +1965,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1978,18 +1978,18 @@ }, "test": "ios_chrome_web_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1997,7 +1997,7 @@ }, "module_name": "//ios/components:ios_components_unittests", "module_scheme": "gtest", - "name": "ios_components_unittests iPad Air (6th generation) 26.1", + "name": "ios_components_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2017,11 +2017,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2029,18 +2029,18 @@ }, "test": "ios_components_unittests", "test_id_prefix": "ninja://ios/components:ios_components_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2048,7 +2048,7 @@ }, "module_name": "//ios/components:ios_components_unittests", "module_scheme": "gtest", - "name": "ios_components_unittests iPhone 16 26.1", + "name": "ios_components_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2068,11 +2068,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2080,18 +2080,18 @@ }, "test": "ios_components_unittests", "test_id_prefix": "ninja://ios/components:ios_components_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2099,7 +2099,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.1", + "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2119,11 +2119,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2131,18 +2131,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2150,7 +2150,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPhone 16 26.1", + "name": "ios_credential_provider_extension_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2170,11 +2170,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2182,18 +2182,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2201,7 +2201,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2221,11 +2221,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2233,18 +2233,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2252,7 +2252,7 @@ }, "module_name": "//ios/net:ios_net_unittests", "module_scheme": "gtest", - "name": "ios_net_unittests iPad Air (6th generation) 26.1", + "name": "ios_net_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2272,11 +2272,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2285,18 +2285,18 @@ }, "test": "ios_net_unittests", "test_id_prefix": "ninja://ios/net:ios_net_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2304,7 +2304,7 @@ }, "module_name": "//ios/net:ios_net_unittests", "module_scheme": "gtest", - "name": "ios_net_unittests iPhone 16 26.1", + "name": "ios_net_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2324,11 +2324,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2337,18 +2337,18 @@ }, "test": "ios_net_unittests", "test_id_prefix": "ninja://ios/net:ios_net_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2356,7 +2356,7 @@ }, "module_name": "//ios/testing:ios_testing_unittests", "module_scheme": "gtest", - "name": "ios_testing_unittests iPad Air (6th generation) 26.1", + "name": "ios_testing_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2376,11 +2376,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2388,18 +2388,18 @@ }, "test": "ios_testing_unittests", "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2407,7 +2407,7 @@ }, "module_name": "//ios/testing:ios_testing_unittests", "module_scheme": "gtest", - "name": "ios_testing_unittests iPhone 16 26.1", + "name": "ios_testing_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2427,11 +2427,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2439,18 +2439,18 @@ }, "test": "ios_testing_unittests", "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2458,7 +2458,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPad Air (6th generation) 26.1", + "name": "ios_web_inttests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2478,11 +2478,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2490,18 +2490,18 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2509,7 +2509,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPhone 16 26.1", + "name": "ios_web_inttests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2529,11 +2529,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2541,18 +2541,18 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2560,7 +2560,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPhone SE (3rd generation) 26.1", + "name": "ios_web_inttests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2580,11 +2580,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2592,19 +2592,19 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2612,7 +2612,7 @@ }, "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module", "module_scheme": "xctest", - "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2632,11 +2632,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2644,19 +2644,19 @@ }, "test": "ios_web_shell_eg2tests_module", "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2664,7 +2664,7 @@ }, "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module", "module_scheme": "xctest", - "name": "ios_web_shell_eg2tests_module iPhone 16 26.1", + "name": "ios_web_shell_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2684,11 +2684,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2696,18 +2696,18 @@ }, "test": "ios_web_shell_eg2tests_module", "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2715,7 +2715,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPad Air (6th generation) 26.1", + "name": "ios_web_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2735,11 +2735,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2747,18 +2747,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2766,7 +2766,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPhone 16 26.1", + "name": "ios_web_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2786,11 +2786,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2798,18 +2798,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2817,7 +2817,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_web_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2837,11 +2837,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2849,18 +2849,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2868,7 +2868,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPad Air (6th generation) 26.1", + "name": "ios_web_view_inttests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2888,11 +2888,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2900,18 +2900,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2919,7 +2919,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPhone 16 26.1", + "name": "ios_web_view_inttests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2939,11 +2939,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2951,18 +2951,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2970,7 +2970,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.1", + "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2990,11 +2990,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3002,18 +3002,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3021,7 +3021,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPad Air (6th generation) 26.1", + "name": "ios_web_view_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3041,11 +3041,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3053,18 +3053,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3072,7 +3072,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPhone 16 26.1", + "name": "ios_web_view_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3092,11 +3092,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3104,18 +3104,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3123,7 +3123,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3143,11 +3143,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3155,18 +3155,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3174,7 +3174,7 @@ }, "module_name": "//net:net_unittests", "module_scheme": "gtest", - "name": "net_unittests iPad Air (6th generation) 26.1", + "name": "net_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3194,11 +3194,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3206,18 +3206,18 @@ }, "test": "net_unittests", "test_id_prefix": "ninja://net:net_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3225,7 +3225,7 @@ }, "module_name": "//net:net_unittests", "module_scheme": "gtest", - "name": "net_unittests iPhone 16 26.1", + "name": "net_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3245,11 +3245,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3257,18 +3257,18 @@ }, "test": "net_unittests", "test_id_prefix": "ninja://net:net_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3276,7 +3276,7 @@ }, "module_name": "//services:services_unittests", "module_scheme": "gtest", - "name": "services_unittests iPad Air (6th generation) 26.1", + "name": "services_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3296,11 +3296,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3308,18 +3308,18 @@ }, "test": "services_unittests", "test_id_prefix": "ninja://services:services_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3327,7 +3327,7 @@ }, "module_name": "//services:services_unittests", "module_scheme": "gtest", - "name": "services_unittests iPhone 16 26.1", + "name": "services_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3347,11 +3347,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3359,18 +3359,18 @@ }, "test": "services_unittests", "test_id_prefix": "ninja://services:services_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3378,7 +3378,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPad Air (6th generation) 26.1", + "name": "skia_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3398,11 +3398,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3410,18 +3410,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3429,7 +3429,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPhone 16 26.1", + "name": "skia_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3449,11 +3449,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3461,18 +3461,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3480,7 +3480,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPhone SE (3rd generation) 26.1", + "name": "skia_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3500,11 +3500,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3512,18 +3512,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3531,7 +3531,7 @@ }, "module_name": "//sql:sql_unittests", "module_scheme": "gtest", - "name": "sql_unittests iPad Air (6th generation) 26.1", + "name": "sql_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3551,11 +3551,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3563,18 +3563,18 @@ }, "test": "sql_unittests", "test_id_prefix": "ninja://sql:sql_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3582,7 +3582,7 @@ }, "module_name": "//sql:sql_unittests", "module_scheme": "gtest", - "name": "sql_unittests iPhone 16 26.1", + "name": "sql_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3602,11 +3602,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3614,18 +3614,18 @@ }, "test": "sql_unittests", "test_id_prefix": "ninja://sql:sql_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3633,7 +3633,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPad Air (6th generation) 26.1", + "name": "ui_base_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3653,11 +3653,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3665,18 +3665,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3684,7 +3684,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPhone 16 26.1", + "name": "ui_base_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3704,11 +3704,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3716,18 +3716,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3735,7 +3735,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPhone SE (3rd generation) 26.1", + "name": "ui_base_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3755,11 +3755,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3767,18 +3767,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3786,7 +3786,7 @@ }, "module_name": "//url:url_unittests", "module_scheme": "gtest", - "name": "url_unittests iPad Air (6th generation) 26.1", + "name": "url_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3806,11 +3806,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3818,18 +3818,18 @@ }, "test": "url_unittests", "test_id_prefix": "ninja://url:url_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3837,7 +3837,7 @@ }, "module_name": "//url:url_unittests", "module_scheme": "gtest", - "name": "url_unittests iPhone 16 26.1", + "name": "url_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3857,11 +3857,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3869,7 +3869,7 @@ }, "test": "url_unittests", "test_id_prefix": "ninja://url:url_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" } ] }
diff --git a/infra/config/generated/builders/ci/mac-arm64-rel/targets/chromium.mac.json b/infra/config/generated/builders/ci/mac-arm64-rel/targets/chromium.mac.json index f2fb6f9..9b10bcf 100644 --- a/infra/config/generated/builders/ci/mac-arm64-rel/targets/chromium.mac.json +++ b/infra/config/generated/builders/ci/mac-arm64-rel/targets/chromium.mac.json
@@ -6459,7 +6459,7 @@ } }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 7 + "shards": 8 }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/builders/ci/mac15-arm64-rel-tests/targets/chromium.mac.json b/infra/config/generated/builders/ci/mac15-arm64-rel-tests/targets/chromium.mac.json index 8ed8365..1bdaf37 100644 --- a/infra/config/generated/builders/ci/mac15-arm64-rel-tests/targets/chromium.mac.json +++ b/infra/config/generated/builders/ci/mac15-arm64-rel-tests/targets/chromium.mac.json
@@ -931,7 +931,7 @@ } }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 7 + "shards": 8 }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json b/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json index 830c4b7..8210195 100644 --- a/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json +++ b/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json
@@ -63,5 +63,5 @@ }, "builder_group": "tryserver.chromium.mac", "recipe": "chromium_trybot", - "xcode_build_version": "17b54" + "xcode_build_version": "17c5013i" } \ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json index 4ea22f1..15b3f4d 100644 --- a/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json +++ b/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json
@@ -9,7 +9,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -21,7 +21,7 @@ }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", "module_scheme": "gtest", - "name": "absl_hardening_tests iPhone 15 26.1", + "name": "absl_hardening_tests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -40,8 +40,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -52,14 +52,14 @@ }, "test": "absl_hardening_tests", "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -71,7 +71,7 @@ }, "module_name": "//third_party/angle/src/tests:angle_unittests", "module_scheme": "gtest", - "name": "angle_unittests iPhone 15 26.1", + "name": "angle_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -90,8 +90,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -103,7 +103,7 @@ "test": "angle_unittests", "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/", "use_isolated_scripts_api": true, - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -112,7 +112,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -124,7 +124,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPhone 15 26.1", + "name": "base_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -143,8 +143,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -155,14 +155,14 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -174,7 +174,7 @@ }, "module_name": "//third_party/blink/common:blink_common_unittests", "module_scheme": "gtest", - "name": "blink_common_unittests iPhone 15 26.1", + "name": "blink_common_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -193,8 +193,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -205,14 +205,14 @@ }, "test": "blink_common_unittests", "test_id_prefix": "ninja://third_party/blink/common:blink_common_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -224,7 +224,7 @@ }, "module_name": "//third_party/blink/renderer/platform:blink_fuzzer_unittests", "module_scheme": "gtest", - "name": "blink_fuzzer_unittests iPhone 15 26.1", + "name": "blink_fuzzer_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -243,8 +243,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -255,14 +255,14 @@ }, "test": "blink_fuzzer_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_fuzzer_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -274,7 +274,7 @@ }, "module_name": "//third_party/blink/renderer/platform/heap:blink_heap_unittests", "module_scheme": "gtest", - "name": "blink_heap_unittests iPhone 15 26.1", + "name": "blink_heap_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -293,8 +293,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -305,7 +305,7 @@ }, "test": "blink_heap_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/platform/heap:blink_heap_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -315,7 +315,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -327,7 +327,7 @@ }, "module_name": "//third_party/blink/renderer/platform:blink_platform_unittests", "module_scheme": "gtest", - "name": "blink_platform_unittests iPhone 15 26.1", + "name": "blink_platform_unittests iPhone 15 26.2", "precommit_args": [ "--gerrit-issue=${patch_issue}", "--gerrit-patchset=${patch_set}", @@ -351,8 +351,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -363,14 +363,14 @@ }, "test": "blink_platform_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_platform_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -382,7 +382,7 @@ }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", "module_scheme": "gtest", - "name": "boringssl_crypto_tests iPhone 15 26.1", + "name": "boringssl_crypto_tests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -401,8 +401,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -413,14 +413,14 @@ }, "test": "boringssl_crypto_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -432,7 +432,7 @@ }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", "module_scheme": "gtest", - "name": "boringssl_ssl_tests iPhone 15 26.1", + "name": "boringssl_ssl_tests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -451,8 +451,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -463,14 +463,14 @@ }, "test": "boringssl_ssl_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -482,7 +482,7 @@ }, "module_name": "//media/capture:capture_unittests", "module_scheme": "gtest", - "name": "capture_unittests iPhone 15 26.1", + "name": "capture_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -501,8 +501,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -513,14 +513,14 @@ }, "test": "capture_unittests", "test_id_prefix": "ninja://media/capture:capture_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -532,7 +532,7 @@ }, "module_name": "//media/cast:cast_unittests", "module_scheme": "gtest", - "name": "cast_unittests iPhone 15 26.1", + "name": "cast_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -551,8 +551,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -563,7 +563,7 @@ }, "test": "cast_unittests", "test_id_prefix": "ninja://media/cast:cast_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -573,7 +573,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -585,7 +585,7 @@ }, "module_name": "//cc:cc_unittests", "module_scheme": "gtest", - "name": "cc_unittests iPhone 15 26.1", + "name": "cc_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -604,8 +604,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -616,7 +616,7 @@ }, "test": "cc_unittests", "test_id_prefix": "ninja://cc:cc_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -625,7 +625,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -637,7 +637,7 @@ }, "module_name": "//components:components_browsertests", "module_scheme": "gtest", - "name": "components_browsertests iPhone 15 26.1", + "name": "components_browsertests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -656,8 +656,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -668,7 +668,7 @@ }, "test": "components_browsertests", "test_id_prefix": "ninja://components:components_browsertests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -677,7 +677,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -689,7 +689,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPhone 15 26.1", + "name": "components_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -708,8 +708,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -720,7 +720,7 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -729,7 +729,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -741,7 +741,7 @@ }, "module_name": "//ui/compositor:compositor_unittests", "module_scheme": "gtest", - "name": "compositor_unittests iPhone 15 26.1", + "name": "compositor_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -760,8 +760,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -772,7 +772,7 @@ }, "test": "compositor_unittests", "test_id_prefix": "ninja://ui/compositor:compositor_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -781,7 +781,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -793,7 +793,7 @@ }, "module_name": "//content/test:content_browsertests", "module_scheme": "gtest", - "name": "content_browsertests iPhone 15 26.1", + "name": "content_browsertests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -812,8 +812,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -825,7 +825,7 @@ }, "test": "content_browsertests", "test_id_prefix": "ninja://content/test:content_browsertests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -834,7 +834,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -846,7 +846,7 @@ }, "module_name": "//content/test:content_unittests", "module_scheme": "gtest", - "name": "content_unittests iPhone 15 26.1", + "name": "content_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -865,8 +865,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -877,14 +877,14 @@ }, "test": "content_unittests", "test_id_prefix": "ninja://content/test:content_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -896,7 +896,7 @@ }, "module_name": "//third_party/crashpad/crashpad:crashpad_tests", "module_scheme": "gtest", - "name": "crashpad_tests iPhone 15 26.1", + "name": "crashpad_tests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -915,8 +915,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -927,14 +927,14 @@ }, "test": "crashpad_tests", "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -946,7 +946,7 @@ }, "module_name": "//crypto:crypto_unittests", "module_scheme": "gtest", - "name": "crypto_unittests iPhone 15 26.1", + "name": "crypto_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -965,8 +965,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -977,14 +977,14 @@ }, "test": "crypto_unittests", "test_id_prefix": "ninja://crypto:crypto_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -996,7 +996,7 @@ }, "module_name": "//device:device_unittests", "module_scheme": "gtest", - "name": "device_unittests iPhone 15 26.1", + "name": "device_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1015,8 +1015,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1027,14 +1027,14 @@ }, "test": "device_unittests", "test_id_prefix": "ninja://device:device_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1046,7 +1046,7 @@ }, "module_name": "//ui/display:display_unittests", "module_scheme": "gtest", - "name": "display_unittests iPhone 15 26.1", + "name": "display_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1065,8 +1065,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1077,14 +1077,14 @@ }, "test": "display_unittests", "test_id_prefix": "ninja://ui/display:display_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1096,7 +1096,7 @@ }, "module_name": "//third_party/leveldatabase:env_chromium_unittests", "module_scheme": "gtest", - "name": "env_chromium_unittests iPhone 15 26.1", + "name": "env_chromium_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1115,8 +1115,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1127,14 +1127,14 @@ }, "test": "env_chromium_unittests", "test_id_prefix": "ninja://third_party/leveldatabase:env_chromium_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1146,7 +1146,7 @@ }, "module_name": "//ui/events:events_unittests", "module_scheme": "gtest", - "name": "events_unittests iPhone 15 26.1", + "name": "events_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1165,8 +1165,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1177,14 +1177,14 @@ }, "test": "events_unittests", "test_id_prefix": "ninja://ui/events:events_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1196,7 +1196,7 @@ }, "module_name": "//google_apis/gcm:gcm_unit_tests", "module_scheme": "gtest", - "name": "gcm_unit_tests iPhone 15 26.1", + "name": "gcm_unit_tests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1215,8 +1215,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1227,7 +1227,7 @@ }, "test": "gcm_unit_tests", "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1236,7 +1236,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1248,7 +1248,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPhone 15 26.1", + "name": "gfx_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1267,8 +1267,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1279,14 +1279,14 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1298,7 +1298,7 @@ }, "module_name": "//gin:gin_unittests", "module_scheme": "gtest", - "name": "gin_unittests iPhone 15 26.1", + "name": "gin_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1317,8 +1317,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1329,14 +1329,14 @@ }, "test": "gin_unittests", "test_id_prefix": "ninja://gin:gin_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1348,7 +1348,7 @@ }, "module_name": "//ui/gl:gl_unittests", "module_scheme": "gtest", - "name": "gl_unittests iPhone 15 26.1", + "name": "gl_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1367,8 +1367,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1379,14 +1379,14 @@ }, "test": "gl_unittests", "test_id_prefix": "ninja://ui/gl:gl_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1398,7 +1398,7 @@ }, "module_name": "//google_apis:google_apis_unittests", "module_scheme": "gtest", - "name": "google_apis_unittests iPhone 15 26.1", + "name": "google_apis_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1417,8 +1417,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1429,7 +1429,7 @@ }, "test": "google_apis_unittests", "test_id_prefix": "ninja://google_apis:google_apis_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1438,7 +1438,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1450,7 +1450,7 @@ }, "module_name": "//gpu:gpu_unittests", "module_scheme": "gtest", - "name": "gpu_unittests iPhone 15 26.1", + "name": "gpu_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1469,8 +1469,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1481,14 +1481,14 @@ }, "test": "gpu_unittests", "test_id_prefix": "ninja://gpu:gpu_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1500,7 +1500,7 @@ }, "module_name": "//components/gwp_asan:gwp_asan_unittests", "module_scheme": "gtest", - "name": "gwp_asan_unittests iPhone 15 26.1", + "name": "gwp_asan_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1519,8 +1519,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1531,14 +1531,14 @@ }, "test": "gwp_asan_unittests", "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1550,7 +1550,7 @@ }, "module_name": "//ui/latency:latency_unittests", "module_scheme": "gtest", - "name": "latency_unittests iPhone 15 26.1", + "name": "latency_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1569,8 +1569,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1581,14 +1581,14 @@ }, "test": "latency_unittests", "test_id_prefix": "ninja://ui/latency:latency_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1600,7 +1600,7 @@ }, "module_name": "//third_party/leveldatabase:leveldb_unittests", "module_scheme": "gtest", - "name": "leveldb_unittests iPhone 15 26.1", + "name": "leveldb_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1619,8 +1619,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1631,14 +1631,14 @@ }, "test": "leveldb_unittests", "test_id_prefix": "ninja://third_party/leveldatabase:leveldb_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1650,7 +1650,7 @@ }, "module_name": "//third_party/libjingle_xmpp:libjingle_xmpp_unittests", "module_scheme": "gtest", - "name": "libjingle_xmpp_unittests iPhone 15 26.1", + "name": "libjingle_xmpp_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1669,8 +1669,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1681,14 +1681,14 @@ }, "test": "libjingle_xmpp_unittests", "test_id_prefix": "ninja://third_party/libjingle_xmpp:libjingle_xmpp_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1700,7 +1700,7 @@ }, "module_name": "//third_party/liburlpattern:liburlpattern_unittests", "module_scheme": "gtest", - "name": "liburlpattern_unittests iPhone 15 26.1", + "name": "liburlpattern_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1719,8 +1719,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1731,7 +1731,7 @@ }, "test": "liburlpattern_unittests", "test_id_prefix": "ninja://third_party/liburlpattern:liburlpattern_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1740,7 +1740,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1752,7 +1752,7 @@ }, "module_name": "//media:media_unittests", "module_scheme": "gtest", - "name": "media_unittests iPhone 15 26.1", + "name": "media_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1771,8 +1771,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1783,7 +1783,7 @@ }, "test": "media_unittests", "test_id_prefix": "ninja://media:media_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1796,7 +1796,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1808,7 +1808,7 @@ }, "module_name": "//media:media_unittests", "module_scheme": "gtest", - "name": "media_unittests_skia_graphite_dawn iPhone 15 26.1", + "name": "media_unittests_skia_graphite_dawn iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1827,8 +1827,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1839,7 +1839,7 @@ }, "test": "media_unittests", "test_id_prefix": "ninja://media:media_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1852,7 +1852,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1864,7 +1864,7 @@ }, "module_name": "//media:media_unittests", "module_scheme": "gtest", - "name": "media_unittests_skia_graphite_metal iPhone 15 26.1", + "name": "media_unittests_skia_graphite_metal iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1883,8 +1883,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1895,14 +1895,14 @@ }, "test": "media_unittests", "test_id_prefix": "ninja://media:media_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1914,7 +1914,7 @@ }, "module_name": "//media/midi:midi_unittests", "module_scheme": "gtest", - "name": "midi_unittests iPhone 15 26.1", + "name": "midi_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1933,8 +1933,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1945,7 +1945,7 @@ }, "test": "midi_unittests", "test_id_prefix": "ninja://media/midi:midi_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -1954,7 +1954,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -1966,7 +1966,7 @@ }, "module_name": "//mojo:mojo_unittests", "module_scheme": "gtest", - "name": "mojo_unittests iPhone 15 26.1", + "name": "mojo_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1985,8 +1985,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -1997,14 +1997,14 @@ }, "test": "mojo_unittests", "test_id_prefix": "ninja://mojo:mojo_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2016,7 +2016,7 @@ }, "module_name": "//ui/native_theme:native_theme_unittests", "module_scheme": "gtest", - "name": "native_theme_unittests iPhone 15 26.1", + "name": "native_theme_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2035,8 +2035,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2047,14 +2047,14 @@ }, "test": "native_theme_unittests", "test_id_prefix": "ninja://ui/native_theme:native_theme_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2066,7 +2066,7 @@ }, "module_name": "//net:net_unittests", "module_scheme": "gtest", - "name": "net_unittests iPhone 15 26.1", + "name": "net_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2085,8 +2085,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2097,14 +2097,14 @@ }, "test": "net_unittests", "test_id_prefix": "ninja://net:net_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2116,7 +2116,7 @@ }, "module_name": "//third_party/perfetto:perfetto_unittests", "module_scheme": "gtest", - "name": "perfetto_unittests iPhone 15 26.1", + "name": "perfetto_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2135,8 +2135,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2147,14 +2147,14 @@ }, "test": "perfetto_unittests", "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2166,7 +2166,7 @@ }, "module_name": "//printing:printing_unittests", "module_scheme": "gtest", - "name": "printing_unittests iPhone 15 26.1", + "name": "printing_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2185,8 +2185,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2197,14 +2197,14 @@ }, "test": "printing_unittests", "test_id_prefix": "ninja://printing:printing_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2216,7 +2216,7 @@ }, "module_name": "//sandbox:sandbox_unittests", "module_scheme": "gtest", - "name": "sandbox_unittests iPhone 15 26.1", + "name": "sandbox_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2235,8 +2235,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2247,7 +2247,7 @@ }, "test": "sandbox_unittests", "test_id_prefix": "ninja://sandbox:sandbox_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -2255,7 +2255,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2267,7 +2267,7 @@ }, "module_name": "//services:services_unittests", "module_scheme": "gtest", - "name": "services_unittests iPhone 15 26.1", + "name": "services_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2286,8 +2286,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2298,14 +2298,14 @@ }, "test": "services_unittests", "test_id_prefix": "ninja://services:services_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2317,7 +2317,7 @@ }, "module_name": "//ui/shell_dialogs:shell_dialogs_unittests", "module_scheme": "gtest", - "name": "shell_dialogs_unittests iPhone 15 26.1", + "name": "shell_dialogs_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2336,8 +2336,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2348,14 +2348,14 @@ }, "test": "shell_dialogs_unittests", "test_id_prefix": "ninja://ui/shell_dialogs:shell_dialogs_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2367,7 +2367,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPhone 15 26.1", + "name": "skia_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2386,8 +2386,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2398,14 +2398,14 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2417,7 +2417,7 @@ }, "module_name": "//sql:sql_unittests", "module_scheme": "gtest", - "name": "sql_unittests iPhone 15 26.1", + "name": "sql_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2436,8 +2436,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2448,14 +2448,14 @@ }, "test": "sql_unittests", "test_id_prefix": "ninja://sql:sql_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2467,7 +2467,7 @@ }, "module_name": "//storage:storage_unittests", "module_scheme": "gtest", - "name": "storage_unittests iPhone 15 26.1", + "name": "storage_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2486,8 +2486,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2498,7 +2498,7 @@ }, "test": "storage_unittests", "test_id_prefix": "ninja://storage:storage_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -2506,7 +2506,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2518,7 +2518,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPhone 15 26.1", + "name": "ui_base_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2537,8 +2537,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2549,14 +2549,14 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2568,7 +2568,7 @@ }, "module_name": "//ui/touch_selection:ui_touch_selection_unittests", "module_scheme": "gtest", - "name": "ui_touch_selection_unittests iPhone 15 26.1", + "name": "ui_touch_selection_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2587,8 +2587,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2599,14 +2599,14 @@ }, "test": "ui_touch_selection_unittests", "test_id_prefix": "ninja://ui/touch_selection:ui_touch_selection_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2618,7 +2618,7 @@ }, "module_name": "//ui/tests:ui_unittests", "module_scheme": "gtest", - "name": "ui_unittests iPhone 15 26.1", + "name": "ui_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2637,8 +2637,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2649,14 +2649,14 @@ }, "test": "ui_unittests", "test_id_prefix": "ninja://ui/tests:ui_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2668,7 +2668,7 @@ }, "module_name": "//url:url_unittests", "module_scheme": "gtest", - "name": "url_unittests iPhone 15 26.1", + "name": "url_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2687,8 +2687,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2699,7 +2699,7 @@ }, "test": "url_unittests", "test_id_prefix": "ninja://url:url_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ @@ -2709,7 +2709,7 @@ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2721,7 +2721,7 @@ }, "module_name": "//components/viz:viz_unittests", "module_scheme": "gtest", - "name": "viz_unittests iPhone 15 26.1", + "name": "viz_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2740,8 +2740,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2752,14 +2752,14 @@ }, "test": "viz_unittests", "test_id_prefix": "ninja://components/viz:viz_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2771,7 +2771,7 @@ }, "module_name": "//third_party/blink/renderer/platform/wtf:wtf_unittests", "module_scheme": "gtest", - "name": "wtf_unittests iPhone 15 26.1", + "name": "wtf_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2790,8 +2790,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2802,14 +2802,14 @@ }, "test": "wtf_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/platform/wtf:wtf_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" }, { "args": [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", @@ -2821,7 +2821,7 @@ }, "module_name": "//third_party/zlib:zlib_unittests", "module_scheme": "gtest", - "name": "zlib_unittests iPhone 15 26.1", + "name": "zlib_unittests iPhone 15 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2840,8 +2840,8 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { "name": "xcode_ios_17a400", @@ -2852,7 +2852,7 @@ }, "test": "zlib_unittests", "test_id_prefix": "ninja://third_party/zlib:zlib_unittests/", - "variant_id": "iPhone 15 26.1" + "variant_id": "iPhone 15 26.2" } ] }
diff --git a/infra/config/generated/builders/try/ios18-beta-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios18-beta-simulator/targets/chromium.fyi.json index 99c3d80..d5b33d02 100644 --- a/infra/config/generated/builders/try/ios18-beta-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/try/ios18-beta-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -45,7 +45,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -64,7 +64,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -96,7 +96,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -115,7 +115,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -147,7 +147,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -166,7 +166,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -198,7 +198,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -217,7 +217,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -249,7 +249,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -268,7 +268,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -300,7 +300,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -319,7 +319,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -351,7 +351,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -370,7 +370,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -402,7 +402,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -421,7 +421,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -453,7 +453,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -472,7 +472,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -504,7 +504,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -523,7 +523,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -555,7 +555,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -574,7 +574,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -606,7 +606,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -625,7 +625,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -657,7 +657,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -676,7 +676,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -708,7 +708,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -727,7 +727,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -759,7 +759,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -781,7 +781,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -813,7 +813,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -836,7 +836,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -868,7 +868,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -891,7 +891,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -923,7 +923,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -948,7 +948,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -980,7 +980,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1005,7 +1005,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1037,7 +1037,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1062,7 +1062,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1094,7 +1094,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1119,7 +1119,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1151,7 +1151,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1176,7 +1176,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1208,7 +1208,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1233,7 +1233,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1265,7 +1265,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1288,7 +1288,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1320,7 +1320,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1343,7 +1343,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1375,7 +1375,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1398,7 +1398,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1430,7 +1430,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1453,7 +1453,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1485,7 +1485,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1507,7 +1507,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1539,7 +1539,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1561,7 +1561,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1593,7 +1593,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1617,7 +1617,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1649,7 +1649,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1674,7 +1674,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1706,7 +1706,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1731,7 +1731,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1763,7 +1763,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1783,7 +1783,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1815,7 +1815,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1834,7 +1834,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1866,7 +1866,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1885,7 +1885,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1917,7 +1917,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1939,7 +1939,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1971,7 +1971,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1994,7 +1994,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2026,7 +2026,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2049,7 +2049,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2081,7 +2081,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2101,7 +2101,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2133,7 +2133,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2153,7 +2153,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2185,7 +2185,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2204,7 +2204,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2236,7 +2236,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2255,7 +2255,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2287,7 +2287,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2306,7 +2306,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2338,7 +2338,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2357,7 +2357,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2389,7 +2389,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2409,7 +2409,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2441,7 +2441,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2460,7 +2460,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2492,7 +2492,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2511,7 +2511,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2543,7 +2543,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2562,7 +2562,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2594,7 +2594,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2616,7 +2616,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2648,7 +2648,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2670,7 +2670,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2702,7 +2702,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2724,7 +2724,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2756,7 +2756,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2775,7 +2775,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2807,7 +2807,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2826,7 +2826,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2858,7 +2858,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2877,7 +2877,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2909,7 +2909,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2928,7 +2928,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2960,7 +2960,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2979,7 +2979,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3011,7 +3011,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3030,7 +3030,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3062,7 +3062,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3081,7 +3081,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3113,7 +3113,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3132,7 +3132,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3164,7 +3164,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3183,7 +3183,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3215,7 +3215,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3234,7 +3234,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3266,7 +3266,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3285,7 +3285,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3317,7 +3317,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3336,7 +3336,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3368,7 +3368,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3387,7 +3387,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3419,7 +3419,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3438,7 +3438,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3470,7 +3470,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3489,7 +3489,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3521,7 +3521,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3540,7 +3540,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3572,7 +3572,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3591,7 +3591,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3623,7 +3623,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3642,7 +3642,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3674,7 +3674,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3693,7 +3693,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3725,7 +3725,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json b/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json index 5a9daa4..fef9b880 100644 --- a/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json +++ b/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json
@@ -62,5 +62,5 @@ }, "builder_group": "tryserver.chromium.mac", "recipe": "chromium_trybot", - "xcode_build_version": "17b54" + "xcode_build_version": "17c5013i" } \ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json index 46cd8fdc..6df5ec5 100644 --- a/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -45,7 +45,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -64,7 +64,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -96,7 +96,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -115,7 +115,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -147,7 +147,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -166,7 +166,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -198,7 +198,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -217,7 +217,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -249,7 +249,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -268,7 +268,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -300,7 +300,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -319,7 +319,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -351,7 +351,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -370,7 +370,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -402,7 +402,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -421,7 +421,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -453,7 +453,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -472,7 +472,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -504,7 +504,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -523,7 +523,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -555,7 +555,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -574,7 +574,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -606,7 +606,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -625,7 +625,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -657,7 +657,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -676,7 +676,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -708,7 +708,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -727,7 +727,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -759,7 +759,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -778,7 +778,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -810,7 +810,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -829,7 +829,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -861,7 +861,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -880,7 +880,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -912,7 +912,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -931,7 +931,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -963,7 +963,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -982,7 +982,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1014,7 +1014,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1033,7 +1033,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1065,7 +1065,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1087,7 +1087,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1119,7 +1119,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1142,7 +1142,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1174,7 +1174,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1197,7 +1197,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1229,7 +1229,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1254,7 +1254,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1286,7 +1286,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1311,7 +1311,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1343,7 +1343,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1368,7 +1368,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1400,7 +1400,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1425,7 +1425,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1457,7 +1457,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1482,7 +1482,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1514,7 +1514,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1539,7 +1539,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1571,7 +1571,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1594,7 +1594,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1626,7 +1626,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1649,7 +1649,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1681,7 +1681,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1704,7 +1704,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1736,7 +1736,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1759,7 +1759,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1791,7 +1791,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1813,7 +1813,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1845,7 +1845,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1867,7 +1867,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1899,7 +1899,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1923,7 +1923,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1955,7 +1955,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1980,7 +1980,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2012,7 +2012,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2037,7 +2037,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2069,7 +2069,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2089,7 +2089,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2121,7 +2121,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2140,7 +2140,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2172,7 +2172,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2191,7 +2191,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2223,7 +2223,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2245,7 +2245,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2277,7 +2277,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2300,7 +2300,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2332,7 +2332,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2355,7 +2355,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2387,7 +2387,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2407,7 +2407,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2439,7 +2439,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2458,7 +2458,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2490,7 +2490,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2510,7 +2510,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2542,7 +2542,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2562,7 +2562,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2594,7 +2594,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2613,7 +2613,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2645,7 +2645,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2664,7 +2664,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2696,7 +2696,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2715,7 +2715,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2747,7 +2747,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2766,7 +2766,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2798,7 +2798,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2818,7 +2818,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2850,7 +2850,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2870,7 +2870,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2902,7 +2902,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2921,7 +2921,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2953,7 +2953,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2972,7 +2972,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3004,7 +3004,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3023,7 +3023,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3055,7 +3055,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3074,7 +3074,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3106,7 +3106,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3128,7 +3128,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3160,7 +3160,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3182,7 +3182,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3214,7 +3214,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3236,7 +3236,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3268,7 +3268,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3287,7 +3287,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3319,7 +3319,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3338,7 +3338,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3370,7 +3370,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3389,7 +3389,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3421,7 +3421,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3440,7 +3440,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3472,7 +3472,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3491,7 +3491,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3523,7 +3523,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3542,7 +3542,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3574,7 +3574,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3593,7 +3593,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3625,7 +3625,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3644,7 +3644,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3676,7 +3676,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3695,7 +3695,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3727,7 +3727,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3746,7 +3746,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3778,7 +3778,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3797,7 +3797,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3829,7 +3829,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3848,7 +3848,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3880,7 +3880,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3899,7 +3899,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3931,7 +3931,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3950,7 +3950,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3982,7 +3982,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4001,7 +4001,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4033,7 +4033,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4052,7 +4052,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4084,7 +4084,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4103,7 +4103,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4135,7 +4135,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4154,7 +4154,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4186,7 +4186,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4205,7 +4205,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4237,7 +4237,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4256,7 +4256,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4288,7 +4288,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4307,7 +4307,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4339,7 +4339,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4358,7 +4358,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4390,7 +4390,7 @@ "path": "Runtime-ios-17.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4409,7 +4409,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -4441,7 +4441,7 @@ "path": "Runtime-ios-18.5" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json index cd0b4c7..ad21b7e 100644 --- a/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json
@@ -9,11 +9,11 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -21,7 +21,7 @@ }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", "module_scheme": "gtest", - "name": "absl_hardening_tests iPad Air (6th generation) 26.1", + "name": "absl_hardening_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -41,11 +41,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -53,18 +53,18 @@ }, "test": "absl_hardening_tests", "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -72,7 +72,7 @@ }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", "module_scheme": "gtest", - "name": "absl_hardening_tests iPhone 16 26.1", + "name": "absl_hardening_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -92,11 +92,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -104,18 +104,18 @@ }, "test": "absl_hardening_tests", "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -123,7 +123,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPad Air (6th generation) 26.1", + "name": "base_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -143,11 +143,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -155,18 +155,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -174,7 +174,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPhone 16 26.1", + "name": "base_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -194,11 +194,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -206,18 +206,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -225,7 +225,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPhone SE (3rd generation) 26.1", + "name": "base_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -245,11 +245,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -257,18 +257,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -276,7 +276,7 @@ }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", "module_scheme": "gtest", - "name": "boringssl_crypto_tests iPad Air (6th generation) 26.1", + "name": "boringssl_crypto_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -296,11 +296,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -308,18 +308,18 @@ }, "test": "boringssl_crypto_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -327,7 +327,7 @@ }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", "module_scheme": "gtest", - "name": "boringssl_crypto_tests iPhone 16 26.1", + "name": "boringssl_crypto_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -347,11 +347,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -359,18 +359,18 @@ }, "test": "boringssl_crypto_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -378,7 +378,7 @@ }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", "module_scheme": "gtest", - "name": "boringssl_ssl_tests iPad Air (6th generation) 26.1", + "name": "boringssl_ssl_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -398,11 +398,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -410,18 +410,18 @@ }, "test": "boringssl_ssl_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -429,7 +429,7 @@ }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", "module_scheme": "gtest", - "name": "boringssl_ssl_tests iPhone 16 26.1", + "name": "boringssl_ssl_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -449,11 +449,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -461,18 +461,18 @@ }, "test": "boringssl_ssl_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -480,7 +480,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPad Air (6th generation) 26.1", + "name": "components_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -500,11 +500,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -512,18 +512,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -531,7 +531,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPhone 16 26.1", + "name": "components_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -551,11 +551,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -563,18 +563,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -582,7 +582,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPhone SE (3rd generation) 26.1", + "name": "components_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -602,11 +602,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -614,18 +614,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -633,7 +633,7 @@ }, "module_name": "//crypto:crypto_unittests", "module_scheme": "gtest", - "name": "crypto_unittests iPad Air (6th generation) 26.1", + "name": "crypto_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -653,11 +653,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -665,18 +665,18 @@ }, "test": "crypto_unittests", "test_id_prefix": "ninja://crypto:crypto_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -684,7 +684,7 @@ }, "module_name": "//crypto:crypto_unittests", "module_scheme": "gtest", - "name": "crypto_unittests iPhone 16 26.1", + "name": "crypto_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -704,11 +704,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -716,18 +716,18 @@ }, "test": "crypto_unittests", "test_id_prefix": "ninja://crypto:crypto_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -735,7 +735,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPad Air (6th generation) 26.1", + "name": "gfx_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -755,11 +755,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -767,18 +767,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -786,7 +786,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPhone 16 26.1", + "name": "gfx_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -806,11 +806,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -818,18 +818,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -837,7 +837,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPhone SE (3rd generation) 26.1", + "name": "gfx_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -857,11 +857,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -869,18 +869,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -888,7 +888,7 @@ }, "module_name": "//google_apis:google_apis_unittests", "module_scheme": "gtest", - "name": "google_apis_unittests iPad Air (6th generation) 26.1", + "name": "google_apis_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -908,11 +908,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -920,18 +920,18 @@ }, "test": "google_apis_unittests", "test_id_prefix": "ninja://google_apis:google_apis_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -939,7 +939,7 @@ }, "module_name": "//google_apis:google_apis_unittests", "module_scheme": "gtest", - "name": "google_apis_unittests iPhone 16 26.1", + "name": "google_apis_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -959,11 +959,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -971,18 +971,18 @@ }, "test": "google_apis_unittests", "test_id_prefix": "ninja://google_apis:google_apis_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -990,7 +990,7 @@ }, "module_name": "//components/gwp_asan:gwp_asan_unittests", "module_scheme": "gtest", - "name": "gwp_asan_unittests iPad Air (6th generation) 26.1", + "name": "gwp_asan_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1010,11 +1010,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1022,18 +1022,18 @@ }, "test": "gwp_asan_unittests", "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1041,7 +1041,7 @@ }, "module_name": "//components/gwp_asan:gwp_asan_unittests", "module_scheme": "gtest", - "name": "gwp_asan_unittests iPhone 16 26.1", + "name": "gwp_asan_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1061,11 +1061,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1073,21 +1073,21 @@ }, "test": "gwp_asan_unittests", "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1095,7 +1095,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1115,11 +1115,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1128,21 +1128,21 @@ }, "test": "ios_chrome_bookmarks_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1150,7 +1150,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1170,11 +1170,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1183,7 +1183,7 @@ }, "test": "ios_chrome_bookmarks_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1192,14 +1192,14 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1207,7 +1207,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1227,11 +1227,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1240,7 +1240,7 @@ }, "test": "ios_chrome_integration_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1249,14 +1249,14 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1264,7 +1264,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1284,11 +1284,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1297,7 +1297,7 @@ }, "test": "ios_chrome_integration_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1306,14 +1306,14 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1321,7 +1321,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1341,11 +1341,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1354,7 +1354,7 @@ }, "test": "ios_chrome_settings_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1363,14 +1363,14 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1378,7 +1378,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1398,11 +1398,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1411,21 +1411,21 @@ }, "test": "ios_chrome_settings_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1433,7 +1433,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1453,11 +1453,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1466,21 +1466,21 @@ }, "test": "ios_chrome_signin_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1488,7 +1488,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1508,11 +1508,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1521,21 +1521,21 @@ }, "test": "ios_chrome_signin_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1543,7 +1543,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1563,11 +1563,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1575,21 +1575,21 @@ }, "test": "ios_chrome_smoke_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1597,7 +1597,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1617,11 +1617,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1629,7 +1629,7 @@ }, "test": "ios_chrome_smoke_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1638,14 +1638,14 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1653,7 +1653,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1673,11 +1673,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1686,7 +1686,7 @@ }, "test": "ios_chrome_ui_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1695,14 +1695,14 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1710,7 +1710,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1730,11 +1730,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1743,18 +1743,18 @@ }, "test": "ios_chrome_ui_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1762,7 +1762,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPad Air (6th generation) 26.1", + "name": "ios_chrome_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1782,11 +1782,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1794,18 +1794,18 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1813,7 +1813,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPhone 16 26.1", + "name": "ios_chrome_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1833,11 +1833,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1845,18 +1845,18 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1864,7 +1864,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1884,11 +1884,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1896,21 +1896,21 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1918,7 +1918,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1938,11 +1938,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1951,21 +1951,21 @@ }, "test": "ios_chrome_web_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1973,7 +1973,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_web_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1993,11 +1993,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2006,18 +2006,18 @@ }, "test": "ios_chrome_web_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2025,7 +2025,7 @@ }, "module_name": "//ios/components:ios_components_unittests", "module_scheme": "gtest", - "name": "ios_components_unittests iPad Air (6th generation) 26.1", + "name": "ios_components_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2045,11 +2045,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2057,18 +2057,18 @@ }, "test": "ios_components_unittests", "test_id_prefix": "ninja://ios/components:ios_components_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2076,7 +2076,7 @@ }, "module_name": "//ios/components:ios_components_unittests", "module_scheme": "gtest", - "name": "ios_components_unittests iPhone 16 26.1", + "name": "ios_components_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2096,11 +2096,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2108,19 +2108,19 @@ }, "test": "ios_components_unittests", "test_id_prefix": "ninja://ios/components:ios_components_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2128,7 +2128,7 @@ }, "module_name": "//third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module", "module_scheme": "xctest", - "name": "ios_crash_xcuitests_module iPad Air (6th generation) 26.1", + "name": "ios_crash_xcuitests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2148,11 +2148,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2160,19 +2160,19 @@ }, "test": "ios_crash_xcuitests_module", "test_id_prefix": "ninja://third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2180,7 +2180,7 @@ }, "module_name": "//third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module", "module_scheme": "xctest", - "name": "ios_crash_xcuitests_module iPhone 16 26.1", + "name": "ios_crash_xcuitests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2200,11 +2200,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2212,18 +2212,18 @@ }, "test": "ios_crash_xcuitests_module", "test_id_prefix": "ninja://third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2231,7 +2231,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.1", + "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2251,11 +2251,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2263,18 +2263,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2282,7 +2282,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPhone 16 26.1", + "name": "ios_credential_provider_extension_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2302,11 +2302,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2314,18 +2314,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2333,7 +2333,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2353,11 +2353,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2365,18 +2365,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2384,7 +2384,7 @@ }, "module_name": "//ios/net:ios_net_unittests", "module_scheme": "gtest", - "name": "ios_net_unittests iPad Air (6th generation) 26.1", + "name": "ios_net_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2404,11 +2404,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2417,18 +2417,18 @@ }, "test": "ios_net_unittests", "test_id_prefix": "ninja://ios/net:ios_net_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2436,7 +2436,7 @@ }, "module_name": "//ios/net:ios_net_unittests", "module_scheme": "gtest", - "name": "ios_net_unittests iPhone 16 26.1", + "name": "ios_net_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2456,11 +2456,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2469,18 +2469,18 @@ }, "test": "ios_net_unittests", "test_id_prefix": "ninja://ios/net:ios_net_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2488,7 +2488,7 @@ }, "module_name": "//ios/testing:ios_testing_unittests", "module_scheme": "gtest", - "name": "ios_testing_unittests iPad Air (6th generation) 26.1", + "name": "ios_testing_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2508,11 +2508,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2520,18 +2520,18 @@ }, "test": "ios_testing_unittests", "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2539,7 +2539,7 @@ }, "module_name": "//ios/testing:ios_testing_unittests", "module_scheme": "gtest", - "name": "ios_testing_unittests iPhone 16 26.1", + "name": "ios_testing_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2559,11 +2559,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2571,18 +2571,18 @@ }, "test": "ios_testing_unittests", "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2590,7 +2590,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPad Air (6th generation) 26.1", + "name": "ios_web_inttests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2610,11 +2610,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2622,18 +2622,18 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2641,7 +2641,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPhone 16 26.1", + "name": "ios_web_inttests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2661,11 +2661,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2673,18 +2673,18 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2692,7 +2692,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPhone SE (3rd generation) 26.1", + "name": "ios_web_inttests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2712,11 +2712,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2724,21 +2724,21 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2746,7 +2746,7 @@ }, "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module", "module_scheme": "xctest", - "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2766,11 +2766,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2778,21 +2778,21 @@ }, "test": "ios_web_shell_eg2tests_module", "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--record-video", "failed_only", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2800,7 +2800,7 @@ }, "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module", "module_scheme": "xctest", - "name": "ios_web_shell_eg2tests_module iPhone 16 26.1", + "name": "ios_web_shell_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2820,11 +2820,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2832,18 +2832,18 @@ }, "test": "ios_web_shell_eg2tests_module", "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2851,7 +2851,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPad Air (6th generation) 26.1", + "name": "ios_web_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2871,11 +2871,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2883,18 +2883,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2902,7 +2902,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPhone 16 26.1", + "name": "ios_web_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2922,11 +2922,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2934,18 +2934,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2953,7 +2953,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_web_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2973,11 +2973,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2985,18 +2985,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3004,7 +3004,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPad Air (6th generation) 26.1", + "name": "ios_web_view_inttests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3024,11 +3024,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3036,18 +3036,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3055,7 +3055,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPhone 16 26.1", + "name": "ios_web_view_inttests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3075,11 +3075,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3087,18 +3087,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3106,7 +3106,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.1", + "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3126,11 +3126,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3138,18 +3138,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3157,7 +3157,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPad Air (6th generation) 26.1", + "name": "ios_web_view_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3177,11 +3177,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3189,18 +3189,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3208,7 +3208,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPhone 16 26.1", + "name": "ios_web_view_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3228,11 +3228,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3240,18 +3240,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3259,7 +3259,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3279,11 +3279,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3291,18 +3291,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3310,7 +3310,7 @@ }, "module_name": "//net:net_unittests", "module_scheme": "gtest", - "name": "net_unittests iPad Air (6th generation) 26.1", + "name": "net_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3330,11 +3330,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3342,18 +3342,18 @@ }, "test": "net_unittests", "test_id_prefix": "ninja://net:net_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3361,7 +3361,7 @@ }, "module_name": "//net:net_unittests", "module_scheme": "gtest", - "name": "net_unittests iPhone 16 26.1", + "name": "net_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3381,11 +3381,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3393,18 +3393,18 @@ }, "test": "net_unittests", "test_id_prefix": "ninja://net:net_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3412,7 +3412,7 @@ }, "module_name": "//services:services_unittests", "module_scheme": "gtest", - "name": "services_unittests iPad Air (6th generation) 26.1", + "name": "services_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3432,11 +3432,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3444,18 +3444,18 @@ }, "test": "services_unittests", "test_id_prefix": "ninja://services:services_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3463,7 +3463,7 @@ }, "module_name": "//services:services_unittests", "module_scheme": "gtest", - "name": "services_unittests iPhone 16 26.1", + "name": "services_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3483,11 +3483,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3495,18 +3495,18 @@ }, "test": "services_unittests", "test_id_prefix": "ninja://services:services_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3514,7 +3514,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPad Air (6th generation) 26.1", + "name": "skia_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3534,11 +3534,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3546,18 +3546,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3565,7 +3565,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPhone 16 26.1", + "name": "skia_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3585,11 +3585,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3597,18 +3597,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3616,7 +3616,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPhone SE (3rd generation) 26.1", + "name": "skia_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3636,11 +3636,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3648,18 +3648,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3667,7 +3667,7 @@ }, "module_name": "//sql:sql_unittests", "module_scheme": "gtest", - "name": "sql_unittests iPad Air (6th generation) 26.1", + "name": "sql_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3687,11 +3687,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3699,18 +3699,18 @@ }, "test": "sql_unittests", "test_id_prefix": "ninja://sql:sql_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3718,7 +3718,7 @@ }, "module_name": "//sql:sql_unittests", "module_scheme": "gtest", - "name": "sql_unittests iPhone 16 26.1", + "name": "sql_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3738,11 +3738,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3750,18 +3750,18 @@ }, "test": "sql_unittests", "test_id_prefix": "ninja://sql:sql_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3769,7 +3769,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPad Air (6th generation) 26.1", + "name": "ui_base_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3789,11 +3789,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3801,18 +3801,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3820,7 +3820,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPhone 16 26.1", + "name": "ui_base_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3840,11 +3840,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3852,18 +3852,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3871,7 +3871,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPhone SE (3rd generation) 26.1", + "name": "ui_base_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3891,11 +3891,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3903,18 +3903,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3922,7 +3922,7 @@ }, "module_name": "//url:url_unittests", "module_scheme": "gtest", - "name": "url_unittests iPad Air (6th generation) 26.1", + "name": "url_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3942,11 +3942,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3954,18 +3954,18 @@ }, "test": "url_unittests", "test_id_prefix": "ninja://url:url_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3973,7 +3973,7 @@ }, "module_name": "//url:url_unittests", "module_scheme": "gtest", - "name": "url_unittests iPhone 16 26.1", + "name": "url_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3993,11 +3993,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -4005,7 +4005,7 @@ }, "test": "url_unittests", "test_id_prefix": "ninja://url:url_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" } ] }
diff --git a/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json b/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json index 4910981..2da9349 100644 --- a/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json +++ b/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json
@@ -62,5 +62,5 @@ }, "builder_group": "tryserver.chromium.mac", "recipe": "chromium_trybot", - "xcode_build_version": "17b54" + "xcode_build_version": "17c5013i" } \ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json index d71fdf09..28580ac6 100644 --- a/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json
@@ -9,11 +9,11 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -21,7 +21,7 @@ }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", "module_scheme": "gtest", - "name": "absl_hardening_tests iPad Air (6th generation) 26.1", + "name": "absl_hardening_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -41,11 +41,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -53,18 +53,18 @@ }, "test": "absl_hardening_tests", "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -72,7 +72,7 @@ }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", "module_scheme": "gtest", - "name": "absl_hardening_tests iPhone 16 26.1", + "name": "absl_hardening_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -92,11 +92,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -104,18 +104,18 @@ }, "test": "absl_hardening_tests", "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -123,7 +123,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPad Air (6th generation) 26.1", + "name": "base_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -143,11 +143,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -155,18 +155,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -174,7 +174,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPhone 16 26.1", + "name": "base_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -194,11 +194,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -206,18 +206,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -225,7 +225,7 @@ }, "module_name": "//base:base_unittests", "module_scheme": "gtest", - "name": "base_unittests iPhone SE (3rd generation) 26.1", + "name": "base_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -245,11 +245,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -257,18 +257,18 @@ }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -276,7 +276,7 @@ }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", "module_scheme": "gtest", - "name": "boringssl_crypto_tests iPad Air (6th generation) 26.1", + "name": "boringssl_crypto_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -296,11 +296,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -308,18 +308,18 @@ }, "test": "boringssl_crypto_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -327,7 +327,7 @@ }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", "module_scheme": "gtest", - "name": "boringssl_crypto_tests iPhone 16 26.1", + "name": "boringssl_crypto_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -347,11 +347,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -359,18 +359,18 @@ }, "test": "boringssl_crypto_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -378,7 +378,7 @@ }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", "module_scheme": "gtest", - "name": "boringssl_ssl_tests iPad Air (6th generation) 26.1", + "name": "boringssl_ssl_tests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -398,11 +398,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -410,18 +410,18 @@ }, "test": "boringssl_ssl_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -429,7 +429,7 @@ }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", "module_scheme": "gtest", - "name": "boringssl_ssl_tests iPhone 16 26.1", + "name": "boringssl_ssl_tests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -449,11 +449,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -461,18 +461,18 @@ }, "test": "boringssl_ssl_tests", "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -480,7 +480,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPad Air (6th generation) 26.1", + "name": "components_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -500,11 +500,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -512,18 +512,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -531,7 +531,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPhone 16 26.1", + "name": "components_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -551,11 +551,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -563,18 +563,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -582,7 +582,7 @@ }, "module_name": "//components:components_unittests", "module_scheme": "gtest", - "name": "components_unittests iPhone SE (3rd generation) 26.1", + "name": "components_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -602,11 +602,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -614,18 +614,18 @@ }, "test": "components_unittests", "test_id_prefix": "ninja://components:components_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -633,7 +633,7 @@ }, "module_name": "//crypto:crypto_unittests", "module_scheme": "gtest", - "name": "crypto_unittests iPad Air (6th generation) 26.1", + "name": "crypto_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -653,11 +653,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -665,18 +665,18 @@ }, "test": "crypto_unittests", "test_id_prefix": "ninja://crypto:crypto_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -684,7 +684,7 @@ }, "module_name": "//crypto:crypto_unittests", "module_scheme": "gtest", - "name": "crypto_unittests iPhone 16 26.1", + "name": "crypto_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -704,11 +704,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -716,18 +716,18 @@ }, "test": "crypto_unittests", "test_id_prefix": "ninja://crypto:crypto_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -735,7 +735,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPad Air (6th generation) 26.1", + "name": "gfx_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -755,11 +755,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -767,18 +767,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -786,7 +786,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPhone 16 26.1", + "name": "gfx_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -806,11 +806,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -818,18 +818,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -837,7 +837,7 @@ }, "module_name": "//ui/gfx:gfx_unittests", "module_scheme": "gtest", - "name": "gfx_unittests iPhone SE (3rd generation) 26.1", + "name": "gfx_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -857,11 +857,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -869,18 +869,18 @@ }, "test": "gfx_unittests", "test_id_prefix": "ninja://ui/gfx:gfx_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -888,7 +888,7 @@ }, "module_name": "//google_apis:google_apis_unittests", "module_scheme": "gtest", - "name": "google_apis_unittests iPad Air (6th generation) 26.1", + "name": "google_apis_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -908,11 +908,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -920,18 +920,18 @@ }, "test": "google_apis_unittests", "test_id_prefix": "ninja://google_apis:google_apis_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -939,7 +939,7 @@ }, "module_name": "//google_apis:google_apis_unittests", "module_scheme": "gtest", - "name": "google_apis_unittests iPhone 16 26.1", + "name": "google_apis_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -959,11 +959,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -971,18 +971,18 @@ }, "test": "google_apis_unittests", "test_id_prefix": "ninja://google_apis:google_apis_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -990,7 +990,7 @@ }, "module_name": "//components/gwp_asan:gwp_asan_unittests", "module_scheme": "gtest", - "name": "gwp_asan_unittests iPad Air (6th generation) 26.1", + "name": "gwp_asan_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1010,11 +1010,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1022,18 +1022,18 @@ }, "test": "gwp_asan_unittests", "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1041,7 +1041,7 @@ }, "module_name": "//components/gwp_asan:gwp_asan_unittests", "module_scheme": "gtest", - "name": "gwp_asan_unittests iPhone 16 26.1", + "name": "gwp_asan_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1061,11 +1061,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1073,19 +1073,19 @@ }, "test": "gwp_asan_unittests", "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1093,7 +1093,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1113,11 +1113,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1126,19 +1126,19 @@ }, "test": "ios_chrome_bookmarks_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1146,7 +1146,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1166,11 +1166,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1179,7 +1179,7 @@ }, "test": "ios_chrome_bookmarks_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1188,12 +1188,12 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1201,7 +1201,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1221,11 +1221,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1234,7 +1234,7 @@ }, "test": "ios_chrome_integration_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1243,12 +1243,12 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1256,7 +1256,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1276,11 +1276,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1289,7 +1289,7 @@ }, "test": "ios_chrome_integration_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1298,12 +1298,12 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1311,7 +1311,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1331,11 +1331,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1344,7 +1344,7 @@ }, "test": "ios_chrome_settings_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1353,12 +1353,12 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1366,7 +1366,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1386,11 +1386,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1399,19 +1399,19 @@ }, "test": "ios_chrome_settings_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1419,7 +1419,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1439,11 +1439,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1452,19 +1452,19 @@ }, "test": "ios_chrome_signin_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1472,7 +1472,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1492,11 +1492,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1505,19 +1505,19 @@ }, "test": "ios_chrome_signin_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1525,7 +1525,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1545,11 +1545,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1557,19 +1557,19 @@ }, "test": "ios_chrome_smoke_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1577,7 +1577,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1597,11 +1597,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1609,7 +1609,7 @@ }, "test": "ios_chrome_smoke_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ @@ -1618,12 +1618,12 @@ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1631,7 +1631,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1651,11 +1651,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1664,7 +1664,7 @@ }, "test": "ios_chrome_ui_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ @@ -1673,12 +1673,12 @@ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1686,7 +1686,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1706,11 +1706,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1719,18 +1719,18 @@ }, "test": "ios_chrome_ui_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1738,7 +1738,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPad Air (6th generation) 26.1", + "name": "ios_chrome_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1758,11 +1758,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1770,18 +1770,18 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1789,7 +1789,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPhone 16 26.1", + "name": "ios_chrome_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1809,11 +1809,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1821,18 +1821,18 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1840,7 +1840,7 @@ }, "module_name": "//ios/chrome/test:ios_chrome_unittests", "module_scheme": "gtest", - "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1860,11 +1860,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1872,19 +1872,19 @@ }, "test": "ios_chrome_unittests", "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1892,7 +1892,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1912,11 +1912,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1925,19 +1925,19 @@ }, "test": "ios_chrome_web_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1945,7 +1945,7 @@ }, "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module", "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPhone 16 26.1", + "name": "ios_chrome_web_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -1965,11 +1965,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -1978,18 +1978,18 @@ }, "test": "ios_chrome_web_eg2tests_module", "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -1997,7 +1997,7 @@ }, "module_name": "//ios/components:ios_components_unittests", "module_scheme": "gtest", - "name": "ios_components_unittests iPad Air (6th generation) 26.1", + "name": "ios_components_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2017,11 +2017,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2029,18 +2029,18 @@ }, "test": "ios_components_unittests", "test_id_prefix": "ninja://ios/components:ios_components_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2048,7 +2048,7 @@ }, "module_name": "//ios/components:ios_components_unittests", "module_scheme": "gtest", - "name": "ios_components_unittests iPhone 16 26.1", + "name": "ios_components_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2068,11 +2068,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2080,18 +2080,18 @@ }, "test": "ios_components_unittests", "test_id_prefix": "ninja://ios/components:ios_components_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2099,7 +2099,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.1", + "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2119,11 +2119,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2131,18 +2131,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2150,7 +2150,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPhone 16 26.1", + "name": "ios_credential_provider_extension_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2170,11 +2170,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2182,18 +2182,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2201,7 +2201,7 @@ }, "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "module_scheme": "gtest", - "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2221,11 +2221,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2233,18 +2233,18 @@ }, "test": "ios_credential_provider_extension_unittests", "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2252,7 +2252,7 @@ }, "module_name": "//ios/net:ios_net_unittests", "module_scheme": "gtest", - "name": "ios_net_unittests iPad Air (6th generation) 26.1", + "name": "ios_net_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2272,11 +2272,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2285,18 +2285,18 @@ }, "test": "ios_net_unittests", "test_id_prefix": "ninja://ios/net:ios_net_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2304,7 +2304,7 @@ }, "module_name": "//ios/net:ios_net_unittests", "module_scheme": "gtest", - "name": "ios_net_unittests iPhone 16 26.1", + "name": "ios_net_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2324,11 +2324,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2337,18 +2337,18 @@ }, "test": "ios_net_unittests", "test_id_prefix": "ninja://ios/net:ios_net_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2356,7 +2356,7 @@ }, "module_name": "//ios/testing:ios_testing_unittests", "module_scheme": "gtest", - "name": "ios_testing_unittests iPad Air (6th generation) 26.1", + "name": "ios_testing_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2376,11 +2376,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2388,18 +2388,18 @@ }, "test": "ios_testing_unittests", "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2407,7 +2407,7 @@ }, "module_name": "//ios/testing:ios_testing_unittests", "module_scheme": "gtest", - "name": "ios_testing_unittests iPhone 16 26.1", + "name": "ios_testing_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2427,11 +2427,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2439,18 +2439,18 @@ }, "test": "ios_testing_unittests", "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2458,7 +2458,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPad Air (6th generation) 26.1", + "name": "ios_web_inttests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2478,11 +2478,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2490,18 +2490,18 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2509,7 +2509,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPhone 16 26.1", + "name": "ios_web_inttests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2529,11 +2529,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2541,18 +2541,18 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2560,7 +2560,7 @@ }, "module_name": "//ios/web:ios_web_inttests", "module_scheme": "gtest", - "name": "ios_web_inttests iPhone SE (3rd generation) 26.1", + "name": "ios_web_inttests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2580,11 +2580,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2592,19 +2592,19 @@ }, "test": "ios_web_inttests", "test_id_prefix": "ninja://ios/web:ios_web_inttests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2612,7 +2612,7 @@ }, "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module", "module_scheme": "xctest", - "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.1", + "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2632,11 +2632,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2644,19 +2644,19 @@ }, "test": "ios_web_shell_eg2tests_module", "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--xcodebuild-sim-runner", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2664,7 +2664,7 @@ }, "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module", "module_scheme": "xctest", - "name": "ios_web_shell_eg2tests_module iPhone 16 26.1", + "name": "ios_web_shell_eg2tests_module iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2684,11 +2684,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2696,18 +2696,18 @@ }, "test": "ios_web_shell_eg2tests_module", "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2715,7 +2715,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPad Air (6th generation) 26.1", + "name": "ios_web_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2735,11 +2735,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2747,18 +2747,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2766,7 +2766,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPhone 16 26.1", + "name": "ios_web_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2786,11 +2786,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2798,18 +2798,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2817,7 +2817,7 @@ }, "module_name": "//ios/web:ios_web_unittests", "module_scheme": "gtest", - "name": "ios_web_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_web_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2837,11 +2837,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2849,18 +2849,18 @@ }, "test": "ios_web_unittests", "test_id_prefix": "ninja://ios/web:ios_web_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2868,7 +2868,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPad Air (6th generation) 26.1", + "name": "ios_web_view_inttests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2888,11 +2888,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2900,18 +2900,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2919,7 +2919,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPhone 16 26.1", + "name": "ios_web_view_inttests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2939,11 +2939,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -2951,18 +2951,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -2970,7 +2970,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_inttests", "module_scheme": "gtest", - "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.1", + "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -2990,11 +2990,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3002,18 +3002,18 @@ }, "test": "ios_web_view_inttests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3021,7 +3021,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPad Air (6th generation) 26.1", + "name": "ios_web_view_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3041,11 +3041,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3053,18 +3053,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3072,7 +3072,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPhone 16 26.1", + "name": "ios_web_view_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3092,11 +3092,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3104,18 +3104,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3123,7 +3123,7 @@ }, "module_name": "//ios/web_view/test:ios_web_view_unittests", "module_scheme": "gtest", - "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.1", + "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3143,11 +3143,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3155,18 +3155,18 @@ }, "test": "ios_web_view_unittests", "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3174,7 +3174,7 @@ }, "module_name": "//net:net_unittests", "module_scheme": "gtest", - "name": "net_unittests iPad Air (6th generation) 26.1", + "name": "net_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3194,11 +3194,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3206,18 +3206,18 @@ }, "test": "net_unittests", "test_id_prefix": "ninja://net:net_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3225,7 +3225,7 @@ }, "module_name": "//net:net_unittests", "module_scheme": "gtest", - "name": "net_unittests iPhone 16 26.1", + "name": "net_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3245,11 +3245,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3257,18 +3257,18 @@ }, "test": "net_unittests", "test_id_prefix": "ninja://net:net_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3276,7 +3276,7 @@ }, "module_name": "//services:services_unittests", "module_scheme": "gtest", - "name": "services_unittests iPad Air (6th generation) 26.1", + "name": "services_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3296,11 +3296,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3308,18 +3308,18 @@ }, "test": "services_unittests", "test_id_prefix": "ninja://services:services_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3327,7 +3327,7 @@ }, "module_name": "//services:services_unittests", "module_scheme": "gtest", - "name": "services_unittests iPhone 16 26.1", + "name": "services_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3347,11 +3347,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3359,18 +3359,18 @@ }, "test": "services_unittests", "test_id_prefix": "ninja://services:services_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3378,7 +3378,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPad Air (6th generation) 26.1", + "name": "skia_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3398,11 +3398,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3410,18 +3410,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3429,7 +3429,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPhone 16 26.1", + "name": "skia_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3449,11 +3449,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3461,18 +3461,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3480,7 +3480,7 @@ }, "module_name": "//skia:skia_unittests", "module_scheme": "gtest", - "name": "skia_unittests iPhone SE (3rd generation) 26.1", + "name": "skia_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3500,11 +3500,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3512,18 +3512,18 @@ }, "test": "skia_unittests", "test_id_prefix": "ninja://skia:skia_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3531,7 +3531,7 @@ }, "module_name": "//sql:sql_unittests", "module_scheme": "gtest", - "name": "sql_unittests iPad Air (6th generation) 26.1", + "name": "sql_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3551,11 +3551,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3563,18 +3563,18 @@ }, "test": "sql_unittests", "test_id_prefix": "ninja://sql:sql_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3582,7 +3582,7 @@ }, "module_name": "//sql:sql_unittests", "module_scheme": "gtest", - "name": "sql_unittests iPhone 16 26.1", + "name": "sql_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3602,11 +3602,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3614,18 +3614,18 @@ }, "test": "sql_unittests", "test_id_prefix": "ninja://sql:sql_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3633,7 +3633,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPad Air (6th generation) 26.1", + "name": "ui_base_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3653,11 +3653,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3665,18 +3665,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3684,7 +3684,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPhone 16 26.1", + "name": "ui_base_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3704,11 +3704,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3716,18 +3716,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" }, { "args": [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3735,7 +3735,7 @@ }, "module_name": "//ui/base:ui_base_unittests", "module_scheme": "gtest", - "name": "ui_base_unittests iPhone SE (3rd generation) 26.1", + "name": "ui_base_unittests iPhone SE (3rd generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3755,11 +3755,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3767,18 +3767,18 @@ }, "test": "ui_base_unittests", "test_id_prefix": "ninja://ui/base:ui_base_unittests/", - "variant_id": "iPhone SE (3rd generation) 26.1" + "variant_id": "iPhone SE (3rd generation) 26.2" }, { "args": [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3786,7 +3786,7 @@ }, "module_name": "//url:url_unittests", "module_scheme": "gtest", - "name": "url_unittests iPad Air (6th generation) 26.1", + "name": "url_unittests iPad Air (6th generation) 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3806,11 +3806,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3818,18 +3818,18 @@ }, "test": "url_unittests", "test_id_prefix": "ninja://url:url_unittests/", - "variant_id": "iPad Air (6th generation) 26.1" + "variant_id": "iPad Air (6th generation) 26.2" }, { "args": [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17b54", + "17c5013i", "--xctest" ], "merge": { @@ -3837,7 +3837,7 @@ }, "module_name": "//url:url_unittests", "module_scheme": "gtest", - "name": "url_unittests iPhone 16 26.1", + "name": "url_unittests iPhone 16 26.2", "resultdb": { "enable": true, "has_native_resultdb_integration": true @@ -3857,11 +3857,11 @@ }, "named_caches": [ { - "name": "runtime_ios_26_1", - "path": "Runtime-ios-26.1" + "name": "runtime_ios_26_2", + "path": "Runtime-ios-26.2" }, { - "name": "xcode_ios_17b54", + "name": "xcode_ios_17c5013i", "path": "Xcode.app" } ], @@ -3869,7 +3869,7 @@ }, "test": "url_unittests", "test_id_prefix": "ninja://url:url_unittests/", - "variant_id": "iPhone 16 26.1" + "variant_id": "iPhone 16 26.2" } ] }
diff --git a/infra/config/generated/builders/try/linux-dcheck-off-rel/targets/chromium.linux.json b/infra/config/generated/builders/try/linux-dcheck-off-rel/targets/chromium.linux.json index c945c9ad..c79e923 100644 --- a/infra/config/generated/builders/try/linux-dcheck-off-rel/targets/chromium.linux.json +++ b/infra/config/generated/builders/try/linux-dcheck-off-rel/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 + "shards": 3 }, "test": "blink_wpt_tests", "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/try/linux-full-remote-rel/targets/chromium.linux.json b/infra/config/generated/builders/try/linux-full-remote-rel/targets/chromium.linux.json index c945c9ad..c79e923 100644 --- a/infra/config/generated/builders/try/linux-full-remote-rel/targets/chromium.linux.json +++ b/infra/config/generated/builders/try/linux-full-remote-rel/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 + "shards": 3 }, "test": "blink_wpt_tests", "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/try/linux-rel-test-selection/targets/chromium.linux.json b/infra/config/generated/builders/try/linux-rel-test-selection/targets/chromium.linux.json index c945c9ad..c79e923 100644 --- a/infra/config/generated/builders/try/linux-rel-test-selection/targets/chromium.linux.json +++ b/infra/config/generated/builders/try/linux-rel-test-selection/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 + "shards": 3 }, "test": "blink_wpt_tests", "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/try/linux-rel/targets/chromium.linux.json b/infra/config/generated/builders/try/linux-rel/targets/chromium.linux.json index c945c9ad..c79e923 100644 --- a/infra/config/generated/builders/try/linux-rel/targets/chromium.linux.json +++ b/infra/config/generated/builders/try/linux-rel/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 + "shards": 3 }, "test": "blink_wpt_tests", "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/targets/chromium.memory.json b/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/targets/chromium.memory.json index d1cc8ba..1826e9ea6 100644 --- a/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/targets/chromium.memory.json +++ b/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/targets/chromium.memory.json
@@ -913,7 +913,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 92 + "shards": 101 }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" @@ -1508,7 +1508,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 9 + "shards": 10 }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git a/infra/config/generated/builders/try/linux_chromium_compile_rel_ng/targets/chromium.linux.json b/infra/config/generated/builders/try/linux_chromium_compile_rel_ng/targets/chromium.linux.json index 1c5be331..2c48fcbd 100644 --- a/infra/config/generated/builders/try/linux_chromium_compile_rel_ng/targets/chromium.linux.json +++ b/infra/config/generated/builders/try/linux_chromium_compile_rel_ng/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 + "shards": 3 }, "test": "blink_wpt_tests", "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/targets/chromium.memory.json b/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/targets/chromium.memory.json index 63b95ee..fee76ffb4 100644 --- a/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/targets/chromium.memory.json +++ b/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/targets/chromium.memory.json
@@ -213,7 +213,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 7 + "shards": 8 }, "test": "blink_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/controller:blink_unittests/" @@ -1490,7 +1490,7 @@ "os": "Ubuntu-22.04" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 8 + "shards": 10 }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git a/infra/config/generated/builders/try/mac15-arm64-rel/targets/chromium.mac.json b/infra/config/generated/builders/try/mac15-arm64-rel/targets/chromium.mac.json index 41550b4..1bfad73c 100644 --- a/infra/config/generated/builders/try/mac15-arm64-rel/targets/chromium.mac.json +++ b/infra/config/generated/builders/try/mac15-arm64-rel/targets/chromium.mac.json
@@ -936,7 +936,7 @@ } }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 7 + "shards": 8 }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/builders/try/win-rel/targets/chromium.win.json b/infra/config/generated/builders/try/win-rel/targets/chromium.win.json index db636a65..c3159fbc 100644 --- a/infra/config/generated/builders/try/win-rel/targets/chromium.win.json +++ b/infra/config/generated/builders/try/win-rel/targets/chromium.win.json
@@ -1078,7 +1078,7 @@ "os": "Windows-10-19045" }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 18 + "shards": 20 }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index d3ab863..a754683 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -53672,8 +53672,8 @@ priority: 35 execution_timeout_secs: 10800 caches { - name: "xcode_ios_17b54" - path: "xcode_ios_17b54.app" + name: "xcode_ios_17c5013i" + path: "xcode_ios_17c5013i.app" } build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -55320,8 +55320,8 @@ priority: 35 execution_timeout_secs: 36000 caches { - name: "xcode_ios_17b54" - path: "xcode_ios_17b54.app" + name: "xcode_ios_17c5013i" + path: "xcode_ios_17c5013i.app" } build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -55546,8 +55546,8 @@ priority: 35 execution_timeout_secs: 36000 caches { - name: "xcode_ios_17b54" - path: "xcode_ios_17b54.app" + name: "xcode_ios_17c5013i" + path: "xcode_ios_17c5013i.app" } build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -109191,8 +109191,8 @@ seconds: 120 } caches { - name: "xcode_ios_17b54" - path: "xcode_ios_17b54.app" + name: "xcode_ios_17c5013i" + path: "xcode_ios_17c5013i.app" } build_numbers: YES service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -110856,8 +110856,8 @@ seconds: 120 } caches { - name: "xcode_ios_17b54" - path: "xcode_ios_17b54.app" + name: "xcode_ios_17c5013i" + path: "xcode_ios_17c5013i.app" } build_numbers: YES service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -111090,8 +111090,8 @@ seconds: 120 } caches { - name: "xcode_ios_17b54" - path: "xcode_ios_17b54.app" + name: "xcode_ios_17c5013i" + path: "xcode_ios_17c5013i.app" } build_numbers: YES service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/infra/config/generated/testing/gn_isolate_map.pyl b/infra/config/generated/testing/gn_isolate_map.pyl index 87f0975..75bf6087 100644 --- a/infra/config/generated/testing/gn_isolate_map.pyl +++ b/infra/config/generated/testing/gn_isolate_map.pyl
@@ -7,14 +7,17 @@ "absl_hardening_tests": { "label": "//third_party/abseil-cpp:absl_hardening_tests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "accessibility_unittests": { "label": "//ui/accessibility:accessibility_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "android_browsertests": { "label": "//chrome/test:android_browsertests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "android_lint": { @@ -25,6 +28,7 @@ "android_sync_integration_tests": { "label": "//chrome/test:android_sync_integration_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "android_tools": { @@ -34,120 +38,145 @@ "android_webview_junit_tests": { "label": "//android_webview/test:android_webview_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "android_webview_unittests": { "label": "//android_webview/test:android_webview_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "angle_deqp_egl_tests": { "label": "//third_party/angle/src/tests:angle_deqp_egl_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_gles2_tests": { "label": "//third_party/angle/src/tests:angle_deqp_gles2_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_gles31_rotate180_tests": { "label": "//third_party/angle/src/tests:angle_deqp_gles31_rotate180_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_gles31_rotate270_tests": { "label": "//third_party/angle/src/tests:angle_deqp_gles31_rotate270_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_gles31_rotate90_tests": { "label": "//third_party/angle/src/tests:angle_deqp_gles31_rotate90_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_gles31_tests": { "label": "//third_party/angle/src/tests:angle_deqp_gles31_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_gles3_rotate180_tests": { "label": "//third_party/angle/src/tests:angle_deqp_gles3_rotate180_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_gles3_rotate270_tests": { "label": "//third_party/angle/src/tests:angle_deqp_gles3_rotate270_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_gles3_rotate90_tests": { "label": "//third_party/angle/src/tests:angle_deqp_gles3_rotate90_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_gles3_tests": { "label": "//third_party/angle/src/tests:angle_deqp_gles3_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_khr_gles2_tests": { "label": "//third_party/angle/src/tests:angle_deqp_khr_gles2_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_khr_gles31_tests": { "label": "//third_party/angle/src/tests:angle_deqp_khr_gles31_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_deqp_khr_gles3_tests": { "label": "//third_party/angle/src/tests:angle_deqp_khr_gles3_tests", "type": "windowed_test_launcher", + "module_scheme": "deqp", "skip_usage_check": True, }, "angle_end2end_tests": { "label": "//third_party/angle/src/tests:angle_end2end_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "angle_unittests": { "label": "//third_party/angle/src/tests:angle_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "angle_white_box_tests": { "label": "//third_party/angle/src/tests:angle_white_box_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "app_shell_unittests": { "label": "//extensions/shell:app_shell_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "ash_components_unittests": { "label": "//chromeos/ash/experiences:ash_components_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "ash_pixeltests": { "label": "//ash:ash_pixeltests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "ash_unittests": { "label": "//ash:ash_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "ash_webui_unittests": { "label": "//ash/webui:ash_webui_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "aura_unittests": { "label": "//ui/aura:aura_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "base_junit_tests": { "label": "//base:base_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "base_nocompile_tests": { @@ -171,18 +200,22 @@ "base_unittests": { "label": "//base:base_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "blink_common_unittests": { "label": "//third_party/blink/common:blink_common_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "blink_fuzzer_unittests": { "label": "//third_party/blink/renderer/platform:blink_fuzzer_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "blink_heap_unittests": { "label": "//third_party/blink/renderer/platform/heap:blink_heap_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "blink_platform_nocompile_tests": { "label": "//third_party/blink/renderer/platform:blink_platform_nocompile_tests", @@ -192,6 +225,7 @@ "blink_platform_unittests": { "label": "//third_party/blink/renderer/platform:blink_platform_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "blink_probes_nocompile_tests": { "label": "//third_party/blink/renderer/core/probe:blink_probes_nocompile_tests", @@ -201,11 +235,13 @@ "blink_python_tests": { "label": "//:blink_python_tests", "type": "generated_script", + "module_scheme": "pyunit", "skip_usage_check": True, }, "blink_pytype": { "label": "//third_party/blink/tools:blink_pytype", "type": "script", + "module_scheme": "single", "script": "//third_party/blink/tools/run_pytype.py", "skip_usage_check": True, }, @@ -216,10 +252,12 @@ "blink_unittests": { "label": "//third_party/blink/renderer/controller:blink_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "blink_web_tests": { "label": "//:blink_web_tests", "type": "generated_script", + "module_scheme": "webtest", "args": [ "--results-directory", "${ISOLATED_OUTDIR}", @@ -228,6 +266,7 @@ "blink_wpt_tests": { "label": "//:blink_wpt_tests", "type": "generated_script", + "module_scheme": "webtest", "args": [ "--results-directory", "${ISOLATED_OUTDIR}", @@ -236,32 +275,39 @@ "boringssl_crypto_tests": { "label": "//third_party/boringssl:boringssl_crypto_tests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "boringssl_ssl_tests": { "label": "//third_party/boringssl:boringssl_ssl_tests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "browser_tests": { "label": "//chrome/test:browser_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "build_junit_tests": { "label": "//build/android:build_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "build_rust_tests": { "label": "//build/rust/tests:build_rust_tests", "type": "generated_script", + "module_scheme": "flat", "skip_usage_check": True, }, "capture_unittests": { "label": "//media/capture:capture_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "captured_sites_interactive_tests": { "label": "//chrome/test:captured_sites_interactive_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "args": [ "--disable-extensions", ], @@ -269,21 +315,25 @@ "cast_android_cma_backend_unittests": { "label": "//chromecast/media/cma/backend/android:cast_android_cma_backend_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_audio_backend_unittests": { "label": "//chromecast/media/cma/backend:cast_audio_backend_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_base_junit_tests": { "label": "//chromecast/base:cast_base_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "cast_base_unittests": { "label": "//chromecast/base:cast_base_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_browser_apk": { @@ -299,21 +349,25 @@ "cast_cast_core_unittests": { "label": "//chromecast/cast_core:cast_cast_core_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_crash_unittests": { "label": "//chromecast/crash:cast_crash_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_display_settings_unittests": { "label": "//chromecast/ui/display_settings:cast_display_settings_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_graphics_unittests": { "label": "//chromecast/graphics:cast_graphics_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_junit_test_lists": { @@ -324,16 +378,19 @@ "cast_media_unittests": { "label": "//chromecast/media:cast_media_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_runner_browsertests": { "label": "//fuchsia_web/runners:cast_runner_browsertests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_runner_integration_tests": { "label": "//fuchsia_web/runners:cast_runner_integration_tests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_runner_pkg": { @@ -343,6 +400,7 @@ "cast_runner_unittests": { "label": "//fuchsia_web/runners:cast_runner_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_shell": { @@ -353,16 +411,19 @@ "cast_shell_browsertests": { "label": "//chromecast:cast_shell_browsertests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_shell_junit_tests": { "label": "//chromecast/browser/android:cast_shell_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "cast_shell_unittests": { "label": "//chromecast:cast_shell_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cast_test_lists": { @@ -373,10 +434,12 @@ "cast_unittests": { "label": "//media/cast:cast_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "cc_unittests": { "label": "//cc:cc_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "check_chrome_static_initializers": { "label": "//chrome/android:check_chrome_static_initializers", @@ -420,6 +483,7 @@ "chrome_ai_wpt_tests": { "label": "//components/optimization_guide/internal/testing:chrome_ai_wpt_tests", "type": "generated_script", + "module_scheme": "webtest", "args": [ "--results-directory", "${ISOLATED_OUTDIR}", @@ -428,6 +492,7 @@ "chrome_all_tast_tests": { "label": "//chromeos:chrome_all_tast_tests", "type": "generated_script", + "module_scheme": "tast", "args": [ "--logs-dir=${ISOLATED_OUTDIR}", ], @@ -435,10 +500,12 @@ "chrome_app_unittests": { "label": "//chrome/test:chrome_app_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "chrome_criticalstaging_tast_tests": { "label": "//chromeos:chrome_criticalstaging_tast_tests", "type": "generated_script", + "module_scheme": "tast", "args": [ "--logs-dir=${ISOLATED_OUTDIR}", ], @@ -446,6 +513,7 @@ "chrome_disabled_tast_tests": { "label": "//chromeos:chrome_disabled_tast_tests", "type": "generated_script", + "module_scheme": "tast", "args": [ "--logs-dir=${ISOLATED_OUTDIR}", ], @@ -453,11 +521,13 @@ "chrome_elf_unittests": { "label": "//chrome/chrome_elf:chrome_elf_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "chrome_ios_wpt": { "label": "//ios/chrome/test/wpt:chrome_ios_wpt", "type": "generated_script", + "module_scheme": "webtest", "skip_usage_check": True, "args": [ "--results-directory", @@ -467,16 +537,19 @@ "chrome_java_test_pagecontroller_junit_tests": { "label": "//chrome/test/android:chrome_java_test_pagecontroller_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "chrome_junit_tests": { "label": "//chrome/android:chrome_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "chrome_ml_unittests": { "label": "//components/optimization_guide/internal:chrome_ml_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "chrome_nocompile_tests": { "label": "//chrome/android:chrome_nocompile_tests", @@ -494,6 +567,7 @@ "chrome_private_code_test": { "label": "//chrome:chrome_private_code_test", "type": "generated_script", + "module_scheme": "single", }, "chrome_public_apk": { "label": "//chrome/android:chrome_public_apk", @@ -502,36 +576,43 @@ "chrome_public_apk_baseline_profile_generator": { "label": "//chrome/test/android:chrome_public_apk_baseline_profile_generator", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "chrome_public_smoke_test": { "label": "//chrome/android:chrome_public_smoke_test", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "chrome_public_test_apk": { "label": "//chrome/android:chrome_public_test_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "chrome_public_test_ar_apk": { "label": "//chrome/android:chrome_public_test_ar_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "chrome_public_test_vr_apk": { "label": "//chrome/android:chrome_public_test_vr_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "chrome_public_unit_test_apk": { "label": "//chrome/android:chrome_public_unit_test_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "chrome_public_wpt": { "label": "//chrome/android:chrome_public_wpt", "type": "generated_script", + "module_scheme": "webtest", "skip_usage_check": True, "args": [ "--results-directory", @@ -545,10 +626,12 @@ "chrome_sizes": { "label": "//chrome/test:chrome_sizes", "type": "generated_script", + "module_scheme": "single", }, "chrome_wpt_tests": { "label": "//:chrome_wpt_tests", "type": "generated_script", + "module_scheme": "webtest", "args": [ "--results-directory", "${ISOLATED_OUTDIR}", @@ -565,6 +648,7 @@ "chromedriver_py_tests": { "label": "//chrome/test/chromedriver:chromedriver_py_tests", "type": "script", + "module_scheme": "pyunit", "script": "//testing/xvfb.py", "skip_usage_check": True, "args": [ @@ -578,6 +662,7 @@ "chromedriver_py_tests_headless_shell": { "label": "//chrome/test/chromedriver:chromedriver_py_tests_headless_shell", "type": "script", + "module_scheme": "pyunit", "script": "//testing/scripts/run_chromedriver_tests.py", "skip_usage_check": True, "args": [ @@ -590,24 +675,29 @@ "chromedriver_replay_unittests": { "label": "//chrome/test/chromedriver:chromedriver_replay_unittests", "type": "script", + "module_scheme": "single", "script": "//chrome/test/chromedriver/log_replay/client_replay_unittest.py", "skip_usage_check": True, }, "chromedriver_unittests": { "label": "//chrome/test/chromedriver:chromedriver_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "chromeos_components_unittests": { "label": "//chromeos/components:chromeos_components_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "chromeos_integration_tests": { "label": "//chrome/test:chromeos_integration_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "chromeos_unittests": { "label": "//chromeos:chromeos_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "chromium_builder_asan": { "label": "//:chromium_builder_asan", @@ -624,6 +714,7 @@ "command_buffer_perftests": { "label": "//gpu:command_buffer_perftests", "type": "script", + "module_scheme": "single", "script": "//testing/scripts/run_performance_tests.py", "skip_usage_check": True, "args": [ @@ -636,6 +727,7 @@ "component_storage_test": { "label": "//build/fuchsia/test:component_storage_test", "type": "script", + "module_scheme": "single", "script": "//build/fuchsia/test/component_storage_test.py", "skip_usage_check": True, }, @@ -678,10 +770,12 @@ "components_browsertests": { "label": "//components:components_browsertests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "components_junit_tests": { "label": "//components:components_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "components_perftests": { @@ -698,18 +792,22 @@ "components_unittests": { "label": "//components:components_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "compositor_unittests": { "label": "//ui/compositor:compositor_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "content_browsertests": { "label": "//content/test:content_browsertests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "content_junit_tests": { "label": "//content/public/android:content_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "content_nocompile_tests": { @@ -725,16 +823,19 @@ "content_shell_crash_test": { "label": "//content/shell:content_shell_crash_test", "type": "script", + "module_scheme": "single", "script": "//testing/scripts/content_shell_crash_test.py", }, "content_shell_test_apk": { "label": "//content/shell/android:content_shell_test_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "content_unittests": { "label": "//content/test:content_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "core_runtime_simple": { "label": "//chromecast/cast_core:core_runtime_simple", @@ -749,6 +850,7 @@ "crashpad_tests": { "label": "//third_party/crashpad/crashpad:crashpad_tests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "cronet_gn2bp_aosp_feedback_loop": { "label": "//components/cronet/android:cronet_gn2bp_aosp_feedback_loop", @@ -768,56 +870,67 @@ "cronet_sample_test_apk": { "label": "//components/cronet/android:cronet_sample_test_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "cronet_sizes": { "label": "//components/cronet/android:cronet_sizes", "type": "generated_script", + "module_scheme": "single", "skip_usage_check": True, }, "cronet_smoketests_apk": { "label": "//components/cronet/android:cronet_smoketests_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "cronet_smoketests_missing_native_library_instrumentation_apk": { "label": "//components/cronet/android:cronet_smoketests_missing_native_library_instrumentation_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "cronet_smoketests_platform_only_instrumentation_apk": { "label": "//components/cronet/android:cronet_smoketests_platform_only_instrumentation_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "cronet_test_instrumentation_apk": { "label": "//components/cronet/android:cronet_test_instrumentation_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "cronet_tests": { "label": "//components/cronet:cronet_tests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cronet_tests_android": { "label": "//components/cronet/android:cronet_tests_android", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cronet_unittests": { "label": "//components/cronet:cronet_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "cronet_unittests_android": { "label": "//components/cronet/android:cronet_unittests_android", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "crossbench_smoketests": { "label": "//chrome/test:crossbench_smoketests", "type": "generated_script", + "module_scheme": "single", "skip_usage_check": True, "args": [ "../../third_party/crossbench/cb.py", @@ -833,6 +946,7 @@ "crypto_unittests": { "label": "//crypto:crypto_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "ct_telemetry_perf_tests_without_chrome": { "label": "//chrome/test:ct_telemetry_perf_tests_without_chrome", @@ -845,11 +959,13 @@ "dawn_end2end_tests": { "label": "//third_party/dawn/src/dawn/tests:dawn_end2end_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "dawn_perf_tests": { "label": "//third_party/dawn/src/dawn/tests:dawn_perf_tests", "type": "script", + "module_scheme": "single", "script": "//testing/scripts/run_performance_tests.py", "skip_usage_check": True, "args": [ @@ -863,29 +979,35 @@ "dbus_unittests": { "label": "//dbus:dbus_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "delayloads_unittests": { "label": "//chrome/test:delayloads_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "device_junit_tests": { "label": "//device:device_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "device_realtarget_browsertests": { "label": "//chrome/test:device_realtarget_browsertests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "device_unittests": { "label": "//device:device_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "disk_usage_tast_test": { "label": "//chromeos:disk_usage_tast_test", "type": "generated_script", + "module_scheme": "tast", "skip_usage_check": True, "args": [ "--logs-dir=${ISOLATED_OUTDIR}", @@ -894,15 +1016,18 @@ "display_unittests": { "label": "//ui/display:display_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "elevated_tracing_service_unittests": { "label": "//chrome/windows_services/elevated_tracing_service:elevated_tracing_service_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "elevation_service_unittests": { "label": "//chrome/elevation_service:elevation_service_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "empty_main": { @@ -913,6 +1038,7 @@ "enterprise_companion_integration_tests": { "label": "//chrome/enterprise_companion:enterprise_companion_integration_tests", "type": "script", + "module_scheme": "gtest", "script": "//testing/scripts/run_telemetry_as_googletest.py", "skip_usage_check": True, "args": [ @@ -925,6 +1051,7 @@ "enterprise_companion_tests": { "label": "//chrome/enterprise_companion:enterprise_companion_tests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, "args": [ "--gtest_shuffle", @@ -933,77 +1060,94 @@ "env_chromium_unittests": { "label": "//third_party/leveldatabase:env_chromium_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "events_unittests": { "label": "//ui/events:events_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "exo_unittests": { "label": "//components/exo:exo_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "extensions_browsertests": { "label": "//extensions:extensions_browsertests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "extensions_unittests": { "label": "//extensions:extensions_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "fake_libva_driver_unittest": { "label": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest", "type": "console_test_launcher", + "module_scheme": "gtest", }, "filesystem_service_unittests": { "label": "//components/services/filesystem:filesystem_service_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "flatbuffers_unittests": { "label": "//third_party/flatbuffers:flatbuffers_unittests", "type": "script", + "module_scheme": "single", "script": "//testing/scripts/run_flatbuffers_unittests.py", "skip_usage_check": True, }, "fuchsia_pytype": { "label": "//testing:fuchsia_pytype", "type": "script", + "module_scheme": "single", "script": "//build/fuchsia/test/run_pytype.py", "skip_usage_check": True, }, "fuchsia_sizes": { "label": "//tools/fuchsia/size_tests:fuchsia_sizes", "type": "generated_script", + "module_scheme": "flat", "skip_usage_check": True, }, "fuzzing_unittests": { "label": "//testing/libfuzzer/tests:fuzzing_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "gcm_unit_tests": { "label": "//google_apis/gcm:gcm_unit_tests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "gcp_unittests": { "label": "//chrome/credential_provider/test:gcp_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "gfx_unittests": { "label": "//ui/gfx:gfx_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "gin_unittests": { "label": "//gin:gin_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "gl_tests": { "label": "//gpu:gl_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "gl_unittests": { "label": "//ui/gl:gl_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "gl_unittests_ozone": { @@ -1011,6 +1155,7 @@ "label_type": "group", "type": "windowed_test_launcher", "executable": "gl_unittests", + "module_scheme": "gtest", }, "gn_all": { "label": "//:gn_all", @@ -1020,12 +1165,14 @@ "gold_common_pytype": { "label": "//build:gold_common_pytype", "type": "script", + "module_scheme": "single", "script": "//build/skia_gold_common/run_pytype.py", "skip_usage_check": True, }, "google_apis_unittests": { "label": "//google_apis:google_apis_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "gpu_perftests": { "label": "//gpu:gpu_perftests", @@ -1042,16 +1189,19 @@ "gpu_pytype": { "label": "//content/test:gpu_pytype", "type": "script", + "module_scheme": "single", "script": "//content/test/gpu/run_pytype.py", "skip_usage_check": True, }, "gpu_unittests": { "label": "//gpu:gpu_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "grit_python_unittests": { "label": "//tools/grit:grit_python_unittests", "type": "script", + "module_scheme": "pyunit", "script": "//testing/scripts/run_isolated_script_test.py", "skip_usage_check": True, "args": [ @@ -1061,14 +1211,17 @@ "gwp_asan_unittests": { "label": "//components/gwp_asan:gwp_asan_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "headless_browsertests": { "label": "//headless:headless_browsertests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "headless_shell_wpt": { "label": "//:headless_shell_wpt", "type": "generated_script", + "module_scheme": "webtest", "args": [ "--results-directory", "${ISOLATED_OUTDIR}", @@ -1077,10 +1230,12 @@ "headless_unittests": { "label": "//headless:headless_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "highway_tests": { "label": "//third_party/highway:highway_tests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "image_processor_perf_test": { "label": "//media/gpu/chromeos:image_processor_perf_test", @@ -1090,16 +1245,19 @@ "install_static_unittests": { "label": "//chrome/install_static:install_static_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "installer_util_unittests": { "label": "//chrome/installer/util:installer_util_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "interactive_ui_tests": { "label": "//chrome/test:interactive_ui_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "args": [ "--snapshot-output-dir=${ISOLATED_OUTDIR}", ], @@ -1117,6 +1275,7 @@ "ios_chrome_bookmarks_eg2tests_module": { "label": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module", "type": "generated_script", + "module_scheme": "xctest", "skip_usage_check": True, }, "ios_chrome_clusterfuzz_asan_build": { @@ -1127,126 +1286,152 @@ "ios_chrome_integration_eg2tests_module": { "label": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module", "type": "generated_script", + "module_scheme": "xctest", "skip_usage_check": True, }, "ios_chrome_settings_eg2tests_module": { "label": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module", "type": "generated_script", + "module_scheme": "xctest", "skip_usage_check": True, }, "ios_chrome_signin_eg2tests_module": { "label": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module", "type": "generated_script", + "module_scheme": "xctest", "skip_usage_check": True, }, "ios_chrome_smoke_eg2tests_module": { "label": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module", "type": "generated_script", + "module_scheme": "xctest", "skip_usage_check": True, }, "ios_chrome_ui_eg2tests_module": { "label": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module", "type": "generated_script", + "module_scheme": "xctest", "skip_usage_check": True, }, "ios_chrome_unittests": { "label": "//ios/chrome/test:ios_chrome_unittests", "type": "generated_script", + "module_scheme": "gtest", "skip_usage_check": True, }, "ios_chrome_web_eg2tests_module": { "label": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module", "type": "generated_script", + "module_scheme": "xctest", "skip_usage_check": True, }, "ios_components_unittests": { "label": "//ios/components:ios_components_unittests", "type": "generated_script", + "module_scheme": "gtest", "skip_usage_check": True, }, "ios_crash_xcuitests_module": { "label": "//third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module", "type": "generated_script", + "module_scheme": "xctest", "skip_usage_check": True, }, "ios_credential_provider_extension_unittests": { "label": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests", "type": "generated_script", + "module_scheme": "gtest", "skip_usage_check": True, }, "ios_net_unittests": { "label": "//ios/net:ios_net_unittests", "type": "generated_script", + "module_scheme": "gtest", "skip_usage_check": True, }, "ios_testing_unittests": { "label": "//ios/testing:ios_testing_unittests", "type": "generated_script", + "module_scheme": "gtest", "skip_usage_check": True, }, "ios_web_inttests": { "label": "//ios/web:ios_web_inttests", "type": "generated_script", + "module_scheme": "gtest", "skip_usage_check": True, }, "ios_web_shell_eg2tests_module": { "label": "//ios/web/shell/test:ios_web_shell_eg2tests_module", "type": "generated_script", + "module_scheme": "xctest", "skip_usage_check": True, }, "ios_web_unittests": { "label": "//ios/web:ios_web_unittests", "type": "generated_script", + "module_scheme": "gtest", "skip_usage_check": True, }, "ios_web_view_inttests": { "label": "//ios/web_view/test:ios_web_view_inttests", "type": "generated_script", + "module_scheme": "gtest", "skip_usage_check": True, }, "ios_web_view_unittests": { "label": "//ios/web_view/test:ios_web_view_unittests", "type": "generated_script", + "module_scheme": "gtest", "skip_usage_check": True, }, "ipc_tests": { "label": "//ipc:ipc_tests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "jni_zero_sample_apk_test": { "label": "//third_party/jni_zero/sample:jni_zero_sample_apk_test", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "junit_unit_tests": { "label": "//testing/android/junit:junit_unit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "keyboard_accessory_junit_tests": { "label": "//chrome/android/features/keyboard_accessory:keyboard_accessory_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "keyboard_unittests": { "label": "//ash/keyboard/ui:keyboard_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "latency_unittests": { "label": "//ui/latency:latency_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "leveldb_unittests": { "label": "//third_party/leveldatabase:leveldb_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "libjingle_xmpp_unittests": { "label": "//third_party/libjingle_xmpp:libjingle_xmpp_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "liburlpattern_unittests": { "label": "//third_party/liburlpattern:liburlpattern_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "linux_symbols": { "label": "//chrome:linux_symbols", @@ -1266,11 +1451,13 @@ "mac_signing_tests": { "label": "//chrome/installer/mac:mac_signing_tests", "type": "generated_script", + "module_scheme": "pyunit", "skip_usage_check": True, }, "media_base_junit_tests": { "label": "//media/base/android:media_base_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "media_perftests": { @@ -1298,14 +1485,17 @@ "media_unittests": { "label": "//media:media_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "message_center_unittests": { "label": "//ui/message_center:message_center_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "midi_unittests": { "label": "//media/midi:midi_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "mini_installer": { "label": "//chrome/installer/mini_installer:mini_installer", @@ -1314,6 +1504,7 @@ "mini_installer_tests": { "label": "//chrome/test/mini_installer:mini_installer_tests", "type": "script", + "module_scheme": "flat", "script": "//testing/scripts/run_isolated_script_test.py", "args": [ "../../chrome/test/mini_installer/run_mini_installer_tests.py", @@ -1323,6 +1514,7 @@ "minidump_uploader_test": { "label": "//components/minidump_uploader:minidump_uploader_test", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "model_validation_tests": { @@ -1336,11 +1528,13 @@ "module_installer_junit_tests": { "label": "//components/module_installer/android:module_installer_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "mojo_python_unittests": { "label": "//mojo/public/tools:mojo_python_unittests", "type": "script", + "module_scheme": "pyunit", "script": "//testing/scripts/run_isolated_script_test.py", "skip_usage_check": True, "args": [ @@ -1350,11 +1544,13 @@ "mojo_test_apk": { "label": "//mojo/public/java/system:mojo_test_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "mojo_unittests": { "label": "//mojo:mojo_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "nacl_helper": { "label": "//components/nacl/loader:nacl_helper", @@ -1369,10 +1565,12 @@ "native_theme_unittests": { "label": "//ui/native_theme:native_theme_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "net_junit_tests": { "label": "//net/android:net_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "net_perftests": { @@ -1388,10 +1586,12 @@ "net_unittests": { "label": "//net:net_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "notification_helper_unittests": { "label": "//chrome/notification_helper:notification_helper_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "ondevice_model_benchmark": { @@ -1413,11 +1613,13 @@ "one_time_tokens_junit_tests": { "label": "//components/one_time_tokens/android/backend/sms:one_time_tokens_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "openscreen_unittests": { "label": "//chrome/browser/media/router:openscreen_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "opt_target_coverage_test": { @@ -1427,31 +1629,38 @@ "optimization_guide_gpu_unittests": { "label": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "optimization_guide_unittests": { "label": "//components/optimization_guide/internal:optimization_guide_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "ozone_gl_unittests": { "label": "//ui/ozone/gl:ozone_gl_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "ozone_unittests": { "label": "//ui/ozone:ozone_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "ozone_x11_unittests": { "label": "//ui/ozone:ozone_x11_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "paint_preview_junit_tests": { "label": "//components/paint_preview/player/android:paint_preview_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "password_manager_junit_tests": { "label": "//chrome/browser/password_manager/android:password_manager_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "pdf_fuzzers": { @@ -1462,6 +1671,7 @@ "pdf_unittests": { "label": "//pdf:pdf_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "pdfium_test": { "label": "//third_party/pdfium/testing:pdfium_test", @@ -1470,6 +1680,7 @@ "perfetto_unittests": { "label": "//third_party/perfetto:perfetto_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "performance_browser_tests": { "label": "//chrome/test:performance_browser_tests", @@ -1504,6 +1715,7 @@ "performance_web_engine_test_suite": { "label": "//content/test:performance_web_engine_test_suite", "type": "script", + "module_scheme": "single", "script": "//testing/scripts/run_performance_tests.py", "args": [ "../../content/test/gpu/run_telemetry_benchmark_fuchsia.py", @@ -1528,6 +1740,7 @@ "polymer_tools_python_unittests": { "label": "//tools/polymer:polymer_tools_python_unittests", "type": "script", + "module_scheme": "pyunit", "script": "//testing/scripts/run_isolated_script_test.py", "args": [ "../../tools/polymer/run_polymer_tools_tests.py", @@ -1540,6 +1753,7 @@ "power_sampler_unittests": { "label": "//tools/mac/power:power_sampler_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "previous_version_mini_installer": { @@ -1549,19 +1763,23 @@ "printing_unittests": { "label": "//printing:printing_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "private_code_failure_test": { "label": "//build/private_code_test:private_code_failure_test", "type": "generated_script", + "module_scheme": "single", "skip_usage_check": True, }, "profile_provider_unittest": { "label": "//chrome/browser/metrics/perf:profile_provider_unittest", "type": "console_test_launcher", + "module_scheme": "gtest", }, "pthreadpool_unittests": { "label": "//third_party/pthreadpool:pthreadpool_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "push_apps_to_background_apk": { "label": "//tools/android/push_apps_to_background:push_apps_to_background_apk", @@ -1574,10 +1792,12 @@ "remoting_unittests": { "label": "//remoting:remoting_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "resource_sizes_cronet_sample_apk": { "label": "//components/cronet/android:resource_sizes_cronet_sample_apk", "type": "generated_script", + "module_scheme": "single", "skip_usage_check": True, }, "rust_build_tests": { @@ -1588,48 +1808,58 @@ "rust_gtest_interop_unittests": { "label": "//testing/rust_gtest_interop:rust_gtest_interop_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "sandbox_linux_unittests": { "label": "//sandbox/linux:sandbox_linux_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "sandbox_unittests": { "label": "//sandbox:sandbox_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "sbox_integration_tests": { "label": "//sandbox/win:sbox_integration_tests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "sbox_unittests": { "label": "//sandbox/win:sbox_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "sbox_validation_tests": { "label": "//sandbox/win:sbox_validation_tests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "services_junit_tests": { "label": "//services:services_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "services_unittests": { "label": "//services:services_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "setup_unittests": { "label": "//chrome/installer/setup:setup_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "shell_dialogs_unittests": { "label": "//ui/shell_dialogs:shell_dialogs_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "args": [ "--test-launcher-jobs=1", ], @@ -1637,22 +1867,27 @@ "shell_encryption_unittests": { "label": "//third_party/shell-encryption:shell_encryption_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "skia_unittests": { "label": "//skia:skia_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "snapshot_unittests": { "label": "//ui/snapshot:snapshot_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "sql_unittests": { "label": "//sql:sql_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "storage_unittests": { "label": "//storage:storage_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "symupload": { "label": "//third_party/breakpad:symupload", @@ -1661,6 +1896,7 @@ "sync_integration_tests": { "label": "//chrome/test:sync_integration_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "sync_performance_tests": { "label": "//chrome/test:sync_performance_tests", @@ -1686,11 +1922,13 @@ "system_webview_shell_layout_test_apk": { "label": "//android_webview/tools/system_webview_shell:system_webview_shell_layout_test_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "system_webview_wpt": { "label": "//android_webview/test:system_webview_wpt", "type": "generated_script", + "module_scheme": "webtest", "skip_usage_check": True, "args": [ "--results-directory", @@ -1732,6 +1970,7 @@ "telemetry_gpu_unittests": { "label": "//chrome/test:telemetry_gpu_unittests", "type": "script", + "module_scheme": "flat", "script": "//testing/scripts/run_telemetry_as_googletest.py", "args": [ "../../content/test/gpu/run_unittests.py", @@ -1741,40 +1980,48 @@ "telemetry_perf_unittests": { "label": "//chrome/test:telemetry_perf_unittests", "type": "generated_script", + "module_scheme": "pyunit", }, "telemetry_perf_unittests_android_chrome": { "label": "//chrome/test:telemetry_perf_unittests_android_chrome", "type": "generated_script", + "module_scheme": "pyunit", "skip_usage_check": True, }, "telemetry_unittests": { "label": "//chrome/test:telemetry_unittests", "type": "generated_script", + "module_scheme": "pyunit", }, "test_cpp_including_rust_unittests": { "label": "//build/rust/tests/test_cpp_including_rust:test_cpp_including_rust_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "test_env_py_unittests": { "label": "//testing:test_env_py_unittests", "type": "generated_script", + "module_scheme": "single", "skip_usage_check": True, }, "test_serde_json_lenient": { "label": "//build/rust/tests/test_serde_json_lenient:test_serde_json_lenient", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "testing_pytype": { "label": "//testing:testing_pytype", "type": "script", + "module_scheme": "single", "script": "//testing/run_pytype.py", "skip_usage_check": True, }, "touch_to_fill_junit_tests": { "label": "//chrome/browser/touch_to_fill/password_manager/android:touch_to_fill_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "trace_processor_shell": { @@ -1806,11 +2053,13 @@ "trichrome_chrome_bundle_smoke_test": { "label": "//chrome/android:trichrome_chrome_bundle_smoke_test", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "trichrome_webview_wpt_64": { "label": "//android_webview/test:trichrome_webview_wpt_64", "type": "generated_script", + "module_scheme": "webtest", "skip_usage_check": True, "args": [ "--results-directory", @@ -1820,36 +2069,44 @@ "ui_android_unittests": { "label": "//ui/android:ui_android_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "ui_base_unittests": { "label": "//ui/base:ui_base_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "ui_chromeos_unittests": { "label": "//ui/chromeos:ui_chromeos_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "ui_junit_tests": { "label": "//ui:ui_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "ui_touch_selection_unittests": { "label": "//ui/touch_selection:ui_touch_selection_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "ui_unittests": { "label": "//ui/tests:ui_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "unit_tests": { "label": "//chrome/test:unit_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "updater_tests": { "label": "//chrome/updater:updater_tests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, "args": [ "--gtest_shuffle", @@ -1861,6 +2118,7 @@ "updater_tests_system": { "label": "//chrome/updater:updater_tests_system", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, "args": [ "--gtest_shuffle", @@ -1873,6 +2131,7 @@ "updater_tests_win_uac": { "label": "//chrome/updater:updater_tests_win_uac", "type": "script", + "module_scheme": "gtest", "script": "//testing/scripts/run_telemetry_as_googletest.py", "skip_usage_check": True, "args": [ @@ -1894,10 +2153,12 @@ "url_unittests": { "label": "//url:url_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "usage_time_limit_unittests": { "label": "//chrome/browser/ash/child_accounts/time_limit_consistency_test:usage_time_limit_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "v4l2_stateless_decoder": { "label": "//media/gpu/v4l2:v4l2_stateless_decoder", @@ -1912,14 +2173,17 @@ "vaapi_unittest": { "label": "//media/gpu/vaapi:vaapi_unittest", "type": "console_test_launcher", + "module_scheme": "gtest", }, "variations_desktop_smoke_tests": { "label": "//chrome/test/variations:variations_desktop_smoke_tests", "type": "generated_script", + "module_scheme": "flat", }, "variations_smoke_tests": { "label": "//chrome/test:variations_smoke_tests", "type": "generated_script", + "module_scheme": "single", }, "video_decode_accelerator_perf_tests": { "label": "//media/gpu/test:video_decode_accelerator_perf_tests", @@ -1929,6 +2193,7 @@ "video_decode_accelerator_tests": { "label": "//media/gpu/test:video_decode_accelerator_tests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "video_encode_accelerator_perf_tests": { "label": "//media/gpu/test:video_encode_accelerator_perf_tests", @@ -1938,16 +2203,19 @@ "video_encode_accelerator_tests": { "label": "//media/gpu/test:video_encode_accelerator_tests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "views_examples_unittests": { "label": "//ui/views/examples:views_examples_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "views_perftests": { "label": "//ui/views:views_perftests", "type": "script", + "module_scheme": "single", "script": "//testing/scripts/run_performance_tests.py", "skip_usage_check": True, "args": [ @@ -1959,14 +2227,17 @@ "views_unittests": { "label": "//ui/views:views_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "viz_unittests": { "label": "//components/viz:viz_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "vr_android_unittests": { "label": "//chrome/browser/android/vr:vr_android_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "vr_common_perftests": { @@ -1983,11 +2254,13 @@ "vr_common_unittests": { "label": "//chrome/browser/vr:vr_common_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "vr_perf_tests": { "label": "//tools/perf/contrib/vr_benchmarks:vr_perf_tests", "type": "script", + "module_scheme": "flat", "script": "//testing/scripts/run_performance_tests.py", "skip_usage_check": True, "args": [ @@ -2005,24 +2278,29 @@ "vulkan_tests": { "label": "//gpu/vulkan:vulkan_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "wayland_client_perftests": { "label": "//components/exo/wayland:wayland_client_perftests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "wayland_client_tests": { "label": "//components/exo/wayland:wayland_client_tests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "web_engine_browsertests": { "label": "//fuchsia_web/webengine:web_engine_browsertests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "web_engine_integration_tests": { "label": "//fuchsia_web/webengine:web_engine_integration_tests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "web_engine_shell_pkg": { @@ -2032,26 +2310,31 @@ "web_engine_unittests": { "label": "//fuchsia_web/webengine:web_engine_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, "webapk_client_junit_tests": { "label": "//chrome/android/webapk/libs/client:webapk_client_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "webapk_shell_apk_h2o_junit_tests": { "label": "//chrome/android/webapk/shell_apk:webapk_shell_apk_h2o_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "webapk_shell_apk_junit_tests": { "label": "//chrome/android/webapk/shell_apk:webapk_shell_apk_junit_tests", "type": "generated_script", + "module_scheme": "junit", "skip_usage_check": True, }, "webgpu_blink_web_tests": { "label": "//:webgpu_blink_web_tests", "type": "generated_script", + "module_scheme": "webtest", "skip_usage_check": True, "args": [ "--results-directory", @@ -2061,11 +2344,13 @@ "webui_resources_tools_python_unittests": { "label": "//ui/webui/resources/tools:webui_resources_tools_python_unittests", "type": "generated_script", + "module_scheme": "pyunit", "skip_usage_check": True, }, "webview_64_cts_tests": { "label": "//android_webview/test:webview_64_cts_tests", "type": "script", + "module_scheme": "junit", "script": "//android_webview/tools/run_cts.py", "skip_usage_check": True, "args": [ @@ -2083,6 +2368,7 @@ "webview_cts_tests": { "label": "//android_webview/test:webview_cts_tests", "type": "script", + "module_scheme": "junit", "script": "//android_webview/tools/run_cts.py", "skip_usage_check": True, "args": [ @@ -2100,11 +2386,13 @@ "webview_instrumentation_test_apk": { "label": "//android_webview/test:webview_instrumentation_test_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "webview_trichrome_64_32_cts_tests": { "label": "//android_webview/test:webview_trichrome_64_32_cts_tests", "type": "script", + "module_scheme": "junit", "script": "//android_webview/tools/run_cts.py", "skip_usage_check": True, "args": [ @@ -2124,6 +2412,7 @@ "webview_trichrome_64_cts_hostside_tests": { "label": "//android_webview/test:webview_trichrome_64_cts_hostside_tests", "type": "script", + "module_scheme": "junit", "script": "//android_webview/tools/run_cts.py", "skip_usage_check": True, "args": [ @@ -2141,6 +2430,7 @@ "webview_trichrome_64_cts_tests": { "label": "//android_webview/test:webview_trichrome_64_cts_tests", "type": "script", + "module_scheme": "junit", "script": "//android_webview/tools/run_cts.py", "skip_usage_check": True, "args": [ @@ -2160,6 +2450,7 @@ "webview_trichrome_cts_tests": { "label": "//android_webview/test:webview_trichrome_cts_tests", "type": "script", + "module_scheme": "junit", "script": "//android_webview/tools/run_cts.py", "skip_usage_check": True, "args": [ @@ -2179,21 +2470,25 @@ "webview_ui_test_app_test_apk": { "label": "//android_webview/tools/automated_ui_tests:webview_ui_test_app_test_apk", "type": "console_test_launcher", + "module_scheme": "junit", "skip_usage_check": True, }, "wm_unittests": { "label": "//ui/wm:wm_unittests", "type": "windowed_test_launcher", + "module_scheme": "gtest", }, "wtf_unittests": { "label": "//third_party/blink/renderer/platform/wtf:wtf_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", }, "xr_browser_tests": { "label": "//chrome/test:xr_browser_tests", "type": "windowed_test_launcher", "executable": "run_xr_browser_tests.py", "executable_suffix": "", + "module_scheme": "gtest", "skip_usage_check": True, "args": [ "--enable-gpu", @@ -2207,11 +2502,13 @@ "xvfb_py_unittests": { "label": "//testing:xvfb_py_unittests", "type": "generated_script", + "module_scheme": "single", "skip_usage_check": True, }, "zlib_unittests": { "label": "//third_party/zlib:zlib_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "args": [ "--test-launcher-timeout=400000", ], @@ -2219,6 +2516,7 @@ "zucchini_unittests": { "label": "//components/zucchini:zucchini_unittests", "type": "console_test_launcher", + "module_scheme": "gtest", "skip_usage_check": True, }, }
diff --git a/infra/config/generated/testing/test_suites.pyl b/infra/config/generated/testing/test_suites.pyl index a8d1cfc..c98f17aa 100644 --- a/infra/config/generated/testing/test_suites.pyl +++ b/infra/config/generated/testing/test_suites.pyl
@@ -915,6 +915,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'info_collection', 'mixins': [ @@ -931,6 +932,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'mixins': [ 'gpu_integration_test_common_args', @@ -948,6 +950,7 @@ 'gpu_force_skia_ganesh', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'context_lost', }, @@ -962,6 +965,7 @@ 'gpu_integration_test_expected_color_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'expected_color', }, @@ -970,6 +974,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'gpu_process', 'mixins': [ @@ -981,6 +986,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'hardware_accelerated_feature', 'mixins': [ @@ -998,6 +1004,7 @@ 'gpu_integration_test_pixel_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'pixel', }, @@ -1011,6 +1018,7 @@ 'gpu_integration_test_screenshot_sync_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'screenshot_sync', }, @@ -1026,6 +1034,7 @@ 'gpu_force_skia_ganesh', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'context_lost', }, @@ -1040,6 +1049,7 @@ 'gpu_integration_test_expected_color_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'expected_color', }, @@ -1048,6 +1058,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'gpu_process', 'mixins': [ @@ -1059,6 +1070,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'hardware_accelerated_feature', 'mixins': [ @@ -1076,6 +1088,7 @@ 'gpu_integration_test_pixel_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'pixel', }, @@ -1089,6 +1102,7 @@ 'gpu_integration_test_screenshot_sync_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'screenshot_sync', }, @@ -1104,6 +1118,7 @@ 'gpu_force_skia_graphite', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'context_lost', }, @@ -1118,6 +1133,7 @@ 'gpu_integration_test_expected_color_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'expected_color', }, @@ -1126,6 +1142,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'gpu_process', 'mixins': [ @@ -1137,6 +1154,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'hardware_accelerated_feature', 'mixins': [ @@ -1154,6 +1172,7 @@ 'gpu_integration_test_pixel_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'pixel', }, @@ -1167,6 +1186,7 @@ 'gpu_integration_test_screenshot_sync_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'screenshot_sync', }, @@ -1174,6 +1194,9 @@ 'gpu_noop_sleep_telemetry_test': { 'noop_sleep_tests': { + 'test_common': { + 'module_scheme': 'flat', + }, 'telemetry_test_name': 'noop_sleep', 'mixins': [ 'gpu_integration_test_common_args', @@ -1190,6 +1213,7 @@ 'gpu_force_skia_graphite', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'context_lost', }, @@ -1203,6 +1227,7 @@ 'gpu_integration_test_expected_color_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'expected_color', }, @@ -1216,6 +1241,7 @@ 'gpu_integration_test_pixel_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'pixel', }, @@ -1228,6 +1254,7 @@ 'gpu_integration_test_screenshot_sync_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'screenshot_sync', }, @@ -1241,6 +1268,7 @@ 'gpu_force_command_decoder_passthrough', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'context_lost', }, @@ -1253,6 +1281,7 @@ 'gpu_integration_test_expected_color_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'expected_color', }, @@ -1261,6 +1290,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'gpu_process', 'mixins': [ @@ -1272,6 +1302,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'hardware_accelerated_feature', 'mixins': [ @@ -1287,6 +1318,7 @@ 'gpu_integration_test_pixel_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'pixel', }, @@ -1298,6 +1330,7 @@ 'gpu_integration_test_screenshot_sync_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'screenshot_sync', }, @@ -1310,6 +1343,7 @@ 'skia_gold_test', 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'pixel', 'mixins': [ @@ -1335,6 +1369,7 @@ 'gpu_force_command_decoder_validating', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'context_lost', }, @@ -1347,6 +1382,7 @@ 'gpu_integration_test_expected_color_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'expected_color', }, @@ -1355,6 +1391,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'gpu_process', 'mixins': [ @@ -1366,6 +1403,7 @@ 'mixins': [ 'has_native_resultdb_integration', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'hardware_accelerated_feature', 'mixins': [ @@ -1381,6 +1419,7 @@ 'gpu_integration_test_pixel_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'pixel', }, @@ -1392,6 +1431,7 @@ 'gpu_integration_test_screenshot_sync_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'screenshot_sync', }, @@ -1407,6 +1447,7 @@ 'gpu_force_skia_ganesh', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webcodecs', }, @@ -1422,6 +1463,7 @@ 'gpu_force_skia_ganesh', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webcodecs', }, @@ -1437,6 +1479,7 @@ 'gpu_force_skia_graphite', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webcodecs', }, @@ -1449,6 +1492,7 @@ 'has_native_resultdb_integration', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webcodecs', }, @@ -1465,6 +1509,7 @@ 'gpu_integration_test_webgl2_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl2_conformance', 'swarming': { @@ -1485,6 +1530,7 @@ 'gpu_integration_test_webgl2_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl2_conformance', 'swarming': { @@ -1504,6 +1550,7 @@ 'gpu_integration_test_webgl2_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl2_conformance', 'swarming': { @@ -1523,6 +1570,7 @@ 'gpu_integration_test_webgl2_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl2_conformance', 'swarming': { @@ -1547,6 +1595,7 @@ 'gpu_integration_test_webgl2_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl2_conformance', 'swarming': { @@ -1566,6 +1615,7 @@ 'gpu_integration_test_webgl1_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl1_conformance', 'swarming': { @@ -1585,6 +1635,7 @@ 'gpu_integration_test_webgl1_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl1_conformance', 'swarming': { @@ -1605,6 +1656,7 @@ 'gpu_integration_test_webgl1_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl1_conformance', 'swarming': { @@ -1624,6 +1676,7 @@ 'gpu_integration_test_webgl1_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl1_conformance', 'swarming': { @@ -1643,6 +1696,7 @@ 'gpu_integration_test_webgl1_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl1_conformance', 'swarming': { @@ -1667,6 +1721,7 @@ 'gpu_integration_test_webgl1_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl1_conformance', }, @@ -1685,6 +1740,7 @@ 'gpu_integration_test_webgl1_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl1_conformance', }, @@ -1699,6 +1755,7 @@ 'gpu_force_angle_swiftshader', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl1_conformance', 'args': [ @@ -1721,6 +1778,7 @@ 'gpu_integration_test_webgl1_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl1_conformance', 'swarming': { @@ -1743,6 +1801,7 @@ 'gpu_integration_test_webgl1_args', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webgl1_conformance', 'swarming': { @@ -1761,6 +1820,7 @@ 'gpu_force_skia_ganesh', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webrtc', }, @@ -1776,6 +1836,7 @@ 'gpu_force_skia_ganesh', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webrtc', }, @@ -1791,6 +1852,7 @@ 'gpu_force_skia_graphite', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webrtc', }, @@ -1803,6 +1865,7 @@ 'has_native_resultdb_integration', 'gpu_integration_test_common_args', ], + 'module_scheme': 'flat', }, 'telemetry_test_name': 'webrtc', },
diff --git a/infra/config/lib/xcode.star b/infra/config/lib/xcode.star index 71da73e..3a99cc2 100644 --- a/infra/config/lib/xcode.star +++ b/infra/config/lib/xcode.star
@@ -12,7 +12,7 @@ # Xcode 16 beta version used on beta bots. x16betabots = _xcode.for_ios("16f6"), # Xcode 26 beta version used on beta bots. - x26betabots = _xcode.for_ios("17b54"), + x26betabots = _xcode.for_ios("17c5013i"), # in use by ios-webkit-tot x14wk = _xcode.for_ios("14c18wk"), )
diff --git a/infra/config/main.star b/infra/config/main.star index fb8b09c..d116d64 100755 --- a/infra/config/main.star +++ b/infra/config/main.star
@@ -166,6 +166,7 @@ platforms = settings.platforms, experiments = [ "targets.module_name_without_slash", + "targets.module_scheme_generator", "targets.module_scheme_junit_tests", "targets.module_scheme_regex", "targets.module_scheme_script_tests",
diff --git a/infra/config/targets/bundles.star b/infra/config/targets/bundles.star index 5d464848..f1883df 100644 --- a/infra/config/targets/bundles.star +++ b/infra/config/targets/bundles.star
@@ -4980,8 +4980,8 @@ targets.bundle( targets = "ios_common_tests", variants = [ - "SIM_IPAD_AIR_6TH_GEN_26_1", - "SIM_IPHONE_16_26_1", + "SIM_IPAD_AIR_6TH_GEN_26_2", + "SIM_IPHONE_16_26_2", ], ), targets.bundle( @@ -4990,8 +4990,8 @@ "xcodebuild_sim_runner", ], variants = [ - "SIM_IPAD_AIR_6TH_GEN_26_1", - "SIM_IPHONE_16_26_1", + "SIM_IPAD_AIR_6TH_GEN_26_2", + "SIM_IPHONE_16_26_2", ], ), targets.bundle( @@ -5001,8 +5001,8 @@ "record_failed_tests", ], variants = [ - "SIM_IPAD_AIR_6TH_GEN_26_1", - "SIM_IPHONE_16_26_1", + "SIM_IPAD_AIR_6TH_GEN_26_2", + "SIM_IPHONE_16_26_2", ], ), targets.bundle( @@ -5012,16 +5012,16 @@ "record_failed_tests", ], variants = [ - "SIM_IPAD_AIR_6TH_GEN_26_1", - "SIM_IPHONE_16_26_1", + "SIM_IPAD_AIR_6TH_GEN_26_2", + "SIM_IPHONE_16_26_2", ], ), targets.bundle( targets = "ios_screen_size_dependent_tests", variants = [ - "SIM_IPAD_AIR_6TH_GEN_26_1", - "SIM_IPHONE_16_26_1", - "SIM_IPHONE_SE_3RD_GEN_26_1", + "SIM_IPAD_AIR_6TH_GEN_26_2", + "SIM_IPHONE_16_26_2", + "SIM_IPHONE_SE_3RD_GEN_26_2", ], ), ], @@ -5033,8 +5033,8 @@ targets.bundle( targets = "ios_common_tests", variants = [ - "SIM_IPAD_AIR_6TH_GEN_26_1", - "SIM_IPHONE_16_26_1", + "SIM_IPAD_AIR_6TH_GEN_26_2", + "SIM_IPHONE_16_26_2", ], ), targets.bundle( @@ -5043,8 +5043,8 @@ "xcodebuild_sim_runner", ], variants = [ - "SIM_IPAD_AIR_6TH_GEN_26_1", - "SIM_IPHONE_16_26_1", + "SIM_IPAD_AIR_6TH_GEN_26_2", + "SIM_IPHONE_16_26_2", ], ), targets.bundle( @@ -5053,16 +5053,16 @@ "xcodebuild_sim_runner", ], variants = [ - "SIM_IPAD_AIR_6TH_GEN_26_1", - "SIM_IPHONE_16_26_1", + "SIM_IPAD_AIR_6TH_GEN_26_2", + "SIM_IPHONE_16_26_2", ], ), targets.bundle( targets = "ios_screen_size_dependent_tests", variants = [ - "SIM_IPAD_AIR_6TH_GEN_26_1", - "SIM_IPHONE_16_26_1", - "SIM_IPHONE_SE_3RD_GEN_26_1", + "SIM_IPAD_AIR_6TH_GEN_26_2", + "SIM_IPHONE_16_26_2", + "SIM_IPHONE_SE_3RD_GEN_26_2", ], ), ], @@ -5118,7 +5118,7 @@ targets.bundle( targets = "ios_blink_tests", variants = [ - "SIM_IPHONE_15_26_1", + "SIM_IPHONE_15_26_2", ], ), ],
diff --git a/infra/config/targets/mixins.star b/infra/config/targets/mixins.star index de32fb9..ba21ca1 100644 --- a/infra/config/targets/mixins.star +++ b/infra/config/targets/mixins.star
@@ -1466,13 +1466,13 @@ ) targets.mixin( - name = "ios_runtime_cache_26_1", + name = "ios_runtime_cache_26_2", generate_pyl_entry = False, swarming = targets.swarming( named_caches = [ swarming.cache( - name = "runtime_ios_26_1", - path = "Runtime-ios-26.1", + name = "runtime_ios_26_2", + path = "Runtime-ios-26.2", ), ], ), @@ -2920,12 +2920,12 @@ generate_pyl_entry = False, args = [ "--xcode-build-version", - "17b54", + "17c5013i", ], swarming = targets.swarming( named_caches = [ swarming.cache( - name = "xcode_ios_17b54", + name = "xcode_ios_17c5013i", path = "Xcode.app", ), ],
diff --git a/infra/config/targets/variants.star b/infra/config/targets/variants.star index b07a2f1..9d4959b 100644 --- a/infra/config/targets/variants.star +++ b/infra/config/targets/variants.star
@@ -340,17 +340,17 @@ ) targets.variant( - name = "SIM_IPAD_AIR_6TH_GEN_26_1", - identifier = "iPad Air (6th generation) 26.1", + name = "SIM_IPAD_AIR_6TH_GEN_26_2", + identifier = "iPad Air (6th generation) 26.2", generate_pyl_entry = False, mixins = [ - "ios_runtime_cache_26_1", + "ios_runtime_cache_26_2", ], args = [ "--platform", "iPad Air 11-inch (M2)", "--version", - "26.1", + "26.2", ], ) @@ -549,17 +549,17 @@ ) targets.variant( - name = "SIM_IPHONE_15_26_1", - identifier = "iPhone 15 26.1", + name = "SIM_IPHONE_15_26_2", + identifier = "iPhone 15 26.2", generate_pyl_entry = False, mixins = [ - "ios_runtime_cache_26_1", + "ios_runtime_cache_26_2", ], args = [ "--platform", "iPhone 15", "--version", - "26.1", + "26.2", ], ) @@ -594,17 +594,17 @@ ) targets.variant( - name = "SIM_IPHONE_16_26_1", - identifier = "iPhone 16 26.1", + name = "SIM_IPHONE_16_26_2", + identifier = "iPhone 16 26.2", generate_pyl_entry = False, mixins = [ - "ios_runtime_cache_26_1", + "ios_runtime_cache_26_2", ], args = [ "--platform", "iPhone 16", "--version", - "26.1", + "26.2", ], ) @@ -759,17 +759,17 @@ ) targets.variant( - name = "SIM_IPHONE_SE_3RD_GEN_26_1", - identifier = "iPhone SE (3rd generation) 26.1", + name = "SIM_IPHONE_SE_3RD_GEN_26_2", + identifier = "iPhone SE (3rd generation) 26.2", generate_pyl_entry = False, mixins = [ - "ios_runtime_cache_26_1", + "ios_runtime_cache_26_2", ], args = [ "--platform", "iPhone SE (3rd generation)", "--version", - "26.1", + "26.2", ], )
diff --git a/internal b/internal index 62509a0..d448ebc 160000 --- a/internal +++ b/internal
@@ -1 +1 @@ -Subproject commit 62509a008e80f28517d610ec8f9d3750ca81c911 +Subproject commit d448ebcd4132c53725dfe2c6cde9b49eeda160bf
diff --git a/ios/chrome/app/profile/BUILD.gn b/ios/chrome/app/profile/BUILD.gn index e995beed..9692b4b 100644 --- a/ios/chrome/app/profile/BUILD.gn +++ b/ios/chrome/app/profile/BUILD.gn
@@ -330,15 +330,18 @@ public_deps = [ ":profile" ] deps = [ "//base", + "//components/password_manager/core/browser", "//components/previous_session_info", "//components/signin/public/base", "//components/signin/public/identity_manager", "//ios/chrome/app/profile", + "//ios/chrome/browser/first_run/public:best_features_item", "//ios/chrome/browser/first_run/ui_bundled:features", "//ios/chrome/browser/metrics/model", "//ios/chrome/browser/promos_manager/model", "//ios/chrome/browser/promos_manager/model:constants", "//ios/chrome/browser/promos_manager/model:factory", + "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/profile", "//ios/chrome/browser/shared/public/features:system_flags", "//ios/chrome/browser/signin/model",
diff --git a/ios/chrome/app/profile/welcome_back_screen_profile_agent.mm b/ios/chrome/app/profile/welcome_back_screen_profile_agent.mm index 58ab6a6..7d0bc60 100644 --- a/ios/chrome/app/profile/welcome_back_screen_profile_agent.mm +++ b/ios/chrome/app/profile/welcome_back_screen_profile_agent.mm
@@ -6,18 +6,21 @@ #import "base/check.h" #import "base/time/time.h" +#import "components/password_manager/core/browser/password_manager_util.h" #import "components/prefs/pref_service.h" #import "components/previous_session_info/previous_session_info.h" #import "components/signin/public/base/consent_level.h" #import "components/signin/public/identity_manager/identity_manager.h" #import "ios/chrome/app/profile/profile_init_stage.h" #import "ios/chrome/app/profile/profile_state.h" +#import "ios/chrome/browser/first_run/public/best_features_item.h" #import "ios/chrome/browser/first_run/ui_bundled/features.h" #import "ios/chrome/browser/metrics/model/ios_profile_session_durations_service.h" #import "ios/chrome/browser/metrics/model/ios_profile_session_durations_service_factory.h" #import "ios/chrome/browser/promos_manager/model/constants.h" #import "ios/chrome/browser/promos_manager/model/promos_manager.h" #import "ios/chrome/browser/promos_manager/model/promos_manager_factory.h" +#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/shared/model/profile/profile_manager_ios.h" #import "ios/chrome/browser/shared/public/features/system_flags.h" @@ -25,6 +28,11 @@ #import "ios/chrome/browser/welcome_back/model/features.h" #import "ios/chrome/browser/welcome_back/model/welcome_back_prefs.h" +namespace { +// Minimum number of features required to show the promo. +constexpr size_t kMinEligibleFeatures = 2; +} // namespace + @implementation WelcomeBackScreenProfileAgent #pragma mark - ProfileStateObserver @@ -70,13 +78,20 @@ base::Time::FromNSDate( [PreviousSessionInfo sharedInstance].sessionEndTime); + // Mark Autofill feature as used if the Credential Provider Extension is + // enabled on startup. + PrefService* localState = GetApplicationContext()->GetLocalState(); + if (password_manager_util::IsCredentialProviderEnabledOnStartup(localState)) { + MarkWelcomeBackFeatureUsed( + BestFeaturesItemType::kAutofillPasswordsInOtherApps); + } + // Only register the promo if a user has been away for >28 days, // `kWelcomeBack` is enabled, `kBestFeaturesScreenInFirstRun` is // disabled, and there are at least two features eligible for display. - size_t number_of_items = GetWelcomeBackEligibleItems().size(); if (timeSinceActive > base::Days(28) && IsWelcomeBackEnabled() && !base::FeatureList::IsEnabled(first_run::kBestFeaturesScreenInFirstRun) && - number_of_items >= 2) { + GetWelcomeBackEligibleItems().size() >= kMinEligibleFeatures) { PromosManagerFactory::GetForProfile(self.profileState.profile) ->RegisterPromoForSingleDisplay(promos_manager::Promo::WelcomeBack); } else {
diff --git a/ios/chrome/app/resources/Settings.bundle/Experimental.plist b/ios/chrome/app/resources/Settings.bundle/Experimental.plist index 90c8f03..d4437cba5 100644 --- a/ios/chrome/app/resources/Settings.bundle/Experimental.plist +++ b/ios/chrome/app/resources/Settings.bundle/Experimental.plist
@@ -161,6 +161,7 @@ <string>promos_manager::Promo::DockingPromo</string> <string>promos_manager::Promo::BWGPromo</string> <string>promos_manager::Promo::FullscreenSignin</string> + <string>promos_manager::Promo::WelcomeBack</string> </array> <key>Titles</key> <array> @@ -176,6 +177,7 @@ <string>Docking Promo</string> <string>BWG Promo</string> <string>Fullscreen sign-in</string> + <string>Welcome Back Promo</string> </array> </dict> <dict>
diff --git a/ios/chrome/app/spotlight/spotlight_logger.mm b/ios/chrome/app/spotlight/spotlight_logger.mm index e103da7..fefa583e 100644 --- a/ios/chrome/app/spotlight/spotlight_logger.mm +++ b/ios/chrome/app/spotlight/spotlight_logger.mm
@@ -12,7 +12,7 @@ namespace { -NSString* kSpotlightDebuggerErrorLogKey = @"SpotlightDebuggerErrorLogKey"; +NSString* const kSpotlightDebuggerErrorLogKey = @"SpotlightDebuggerErrorLogKey"; } // namespace
diff --git a/ios/chrome/app/startup/ios_chrome_main_delegate.mm b/ios/chrome/app/startup/ios_chrome_main_delegate.mm index a7006c8..64701bb7 100644 --- a/ios/chrome/app/startup/ios_chrome_main_delegate.mm +++ b/ios/chrome/app/startup/ios_chrome_main_delegate.mm
@@ -5,6 +5,7 @@ #import "ios/chrome/app/startup/ios_chrome_main_delegate.h" #import "base/logging.h" +#import "base/logging/logging_settings.h" #import "third_party/skia/include/core/SkGraphics.h" IOSChromeMainDelegate::IOSChromeMainDelegate() {}
diff --git a/ios/chrome/app/startup/register_experimental_settings.mm b/ios/chrome/app/startup/register_experimental_settings.mm index 6045f45..217777e 100644 --- a/ios/chrome/app/startup/register_experimental_settings.mm +++ b/ios/chrome/app/startup/register_experimental_settings.mm
@@ -11,7 +11,7 @@ namespace { // Key in the UserDefaults for the Experimental Keys. -NSString* kExperimentalKeysKey = @"ExperimentalKeys"; +NSString* const kExperimentalKeysKey = @"ExperimentalKeys"; // Returns YES if a setting value is equivalent to not having the setting at // all. This must always be true for default values, otherwise the experimental
diff --git a/ios/chrome/app/variations_app_state_agent.mm b/ios/chrome/app/variations_app_state_agent.mm index 2c01bfca..3c95987 100644 --- a/ios/chrome/app/variations_app_state_agent.mm +++ b/ios/chrome/app/variations_app_state_agent.mm
@@ -37,7 +37,8 @@ using ::variations::VariationsSeedStore; // The NSUserDefault key to store the time the last seed is fetched. -NSString* kLastVariationsSeedFetchTimeKey = @"kLastVariationsSeedFetchTime"; +NSString* const kLastVariationsSeedFetchTimeKey = + @"kLastVariationsSeedFetchTime"; // Local state key of experiment group assigned, persisted for subsequent runs. const char kFirstRunSeedFetchExperimentGroupPref[] = "ios.variations.first_run";
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm index 6205732..a6ab881 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm +++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm
@@ -39,8 +39,8 @@ }; // Table view header/footer height. -CGFloat kSectionHeaderHeight = 8.; -CGFloat kSectionFooterHeight = 8.; +constexpr CGFloat kSectionHeaderHeight = 8.; +constexpr CGFloat kSectionFooterHeight = 8.; } // namespace
diff --git a/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn b/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn index 57f8506..3dfa300 100644 --- a/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn +++ b/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn
@@ -20,6 +20,8 @@ "//ios/chrome/browser/intelligence/enhanced_calendar/model", "//ios/chrome/browser/intelligence/persist_tab_context/model", "//ios/chrome/browser/intelligence/proto_wrappers", + "//ios/chrome/browser/intelligence/proto_wrappers:ios_smart_tab_grouping_proto_wrapper", + "//ios/chrome/browser/intelligence/smart_tab_grouping/model", "//ios/chrome/browser/optimization_guide/model", "//ios/chrome/browser/optimization_guide/mojom", "//ios/chrome/browser/shared/coordinator/chrome_coordinator",
diff --git a/ios/chrome/browser/ai_prototyping/coordinator/DEPS b/ios/chrome/browser/ai_prototyping/coordinator/DEPS index a7e2fdb1..720a1e6 100644 --- a/ios/chrome/browser/ai_prototyping/coordinator/DEPS +++ b/ios/chrome/browser/ai_prototyping/coordinator/DEPS
@@ -5,4 +5,5 @@ "+ios/chrome/browser/optimization_guide/mojom", "+ios/chrome/browser/intelligence/enhanced_calendar/model", "+ios/chrome/browser/intelligence/persist_tab_context/model", + "+ios/chrome/browser/intelligence/smart_tab_grouping/model", ]
diff --git a/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm b/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm index 6feec49a..edc93c1d 100644 --- a/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm +++ b/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm
@@ -7,6 +7,7 @@ #import <string> #import "base/functional/bind.h" +#import "base/strings/string_number_conversions.h" #import "base/strings/stringprintf.h" #import "base/strings/sys_string_conversions.h" #import "base/strings/utf_string_conversions.h" @@ -15,6 +16,7 @@ #import "components/optimization_guide/proto/features/bling_prototyping.pb.h" #import "components/optimization_guide/proto/features/common_quality_data.pb.h" #import "components/optimization_guide/proto/features/enhanced_calendar.pb.h" +#import "components/optimization_guide/proto/features/ios_smart_tab_grouping.pb.h" #import "components/optimization_guide/proto/features/tab_organization.pb.h" #import "components/optimization_guide/proto/string_value.pb.h" // nogncheck #import "ios/chrome/browser/ai_prototyping/model/ai_prototyping_service_impl.h" @@ -22,8 +24,10 @@ #import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_consumer.h" #import "ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h" #import "ios/chrome/browser/intelligence/enhanced_calendar/model/enhanced_calendar_service_impl.h" +#import "ios/chrome/browser/intelligence/proto_wrappers/ios_smart_tab_grouping_request_wrapper.h" #import "ios/chrome/browser/intelligence/proto_wrappers/page_context_wrapper.h" #import "ios/chrome/browser/intelligence/proto_wrappers/tab_organization_request_wrapper.h" +#import "ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.h" #import "ios/chrome/browser/optimization_guide/model/optimization_guide_service.h" #import "ios/chrome/browser/optimization_guide/model/optimization_guide_service_factory.h" #import "ios/chrome/browser/optimization_guide/mojom/enhanced_calendar_service.mojom-forward.h" @@ -60,6 +64,13 @@ std::unique_ptr<ai::EnhancedCalendarServiceImpl> _enhanced_calendar_service_impl; + // Remote used to make calls to functions related to + // 'SmartTabGroupingService'. + mojo::Remote<ai::mojom::SmartTabGroupingService> _smartTabGroupingService; + // Instatiated to pipe virtual remote calls to overriden functions in + // 'SmartTabGroupingServiceImpl'. + std::unique_ptr<ai::SmartTabGroupingServiceImpl> _smartTabGroupingServiceImpl; + // The Tab Organization feature's request wrapper. TabOrganizationRequestWrapper* _tabOrganizationRequestWrapper; @@ -105,6 +116,14 @@ std::make_unique<ai::EnhancedCalendarServiceImpl>( std::move(enhanced_calendar_receiver), _webStateList->GetActiveWebState()); + + mojo::PendingReceiver<ai::mojom::SmartTabGroupingService> + smartTabGroupingReceiver = + _smartTabGroupingService.BindNewPipeAndPassReceiver(); + _smartTabGroupingServiceImpl = + std::make_unique<ai::SmartTabGroupingServiceImpl>( + std::move(smartTabGroupingReceiver), _webStateList, + _persistTabContextBrowserAgent); } return self; } @@ -247,6 +266,22 @@ [_tabOrganizationRequestWrapper populateRequestFieldsAsync]; } +- (void)executeSmartTabGrouping { + __weak __typeof(self) weakSelf = self; + auto handleResponseBlock = + ^void(ai::mojom::SmartTabGroupingResponseResultPtr result) { + [weakSelf handleSmartTabGroupingResponseResult:std::move(result)]; + }; + + base::OnceCallback<void(ai::mojom::SmartTabGroupingResponseResultPtr)> + handleResponseCallback = base::BindOnce(handleResponseBlock); + + // Call the service to execute the request, the service will handle the + // request population. + _smartTabGroupingService->ExecuteSmartTabGroupingRequest( + std::move(handleResponseCallback)); +} + - (void)executeEnhancedCalendarQueryWithPrompt:(NSString*)prompt selectedText:(NSString*)selectedText { // Create and set the request params. @@ -355,4 +390,54 @@ return result; } +// Handles the SmartTabGroupingResponse by outputting the response proto or +// an error message into the result text field. +- (void)handleSmartTabGroupingResponseResult: + (ai::mojom::SmartTabGroupingResponseResultPtr)response_result { + if (response_result->is_error()) { + [self.consumer + updateQueryResult:base::SysUTF8ToNSString(response_result->get_error()) + forFeature:AIPrototypingFeature::kSmartTabGrouping]; + return; + } + + std::string result = [self + serializeSmartTabGroupingResponseToString: + response_result->get_response() + .As<optimization_guide::proto::IosSmartTabGroupingResponse>() + .value()]; + + [self.consumer updateQueryResult:base::SysUTF8ToNSString(result) + forFeature:AIPrototypingFeature::kSmartTabGrouping]; +} + +// Serializes the IosSmartTabGroupingResponse proto into a human-readable +// string. +- (std::string)serializeSmartTabGroupingResponseToString: + (const optimization_guide::proto::IosSmartTabGroupingResponse&) + response_proto { + std::string result; + result += "iOS Smart Tab Grouping Response:\n\n"; + + for (const auto& group : response_proto.tab_groups()) { + result += base::StringPrintf("Group: %s %s\n", group.emoji().c_str(), + group.label().c_str()); + + std::vector<std::string> tab_ids_str; + for (int64_t tab_id : group.tab_ids()) { + tab_ids_str.push_back(base::NumberToString(tab_id)); + } + result += "Tabs: "; + for (size_t i = 0; i < tab_ids_str.size(); ++i) { + result += tab_ids_str[i]; + if (i < tab_ids_str.size() - 1) { + result += ", "; + } + } + result += "\n\n"; + } + + return result; +} + @end
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h index bdfb6101..9a74b70 100644 --- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h +++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h
@@ -28,11 +28,15 @@ model:(optimization_guide::proto:: BlingPrototypingRequest_ModelEnum)model; +// TODO(crbug.com/460813653): Remove deprecated TabOrganization functions. // Executes a tab organization request with a given organization `strategy`. - (void)executeGroupTabsWithStrategy: (optimization_guide::proto:: TabOrganizationRequest_TabOrganizationModelStrategy)strategy; +// Executes a tab organization request. +- (void)executeSmartTabGrouping; + // Executes an enhanced calendar request with a given (optional) prompt and // selected text. - (void)executeEnhancedCalendarQueryWithPrompt:(NSString*)prompt
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm index d9f5985d..6eb7fcf 100644 --- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm +++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm
@@ -129,7 +129,7 @@ - (void)onGroupTabsButtonPressed:(UIButton*)button { [self disableSubmitButton]; [self updateResponseField:@""]; - [self.mutator executeGroupTabsWithStrategy:self.groupingStrategy]; + [self.mutator executeSmartTabGrouping]; } #pragma mark - AIPrototypingViewControllerProtocol
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm index bb33620..6bc8354f 100644 --- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm +++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm
@@ -34,7 +34,7 @@ [[AIPrototypingFreeformViewController alloc] initForFeature:AIPrototypingFeature::kFreeform], [[AIPrototypingTabOrganizationViewController alloc] - initForFeature:AIPrototypingFeature::kTabOrganization], + initForFeature:AIPrototypingFeature::kSmartTabGrouping], [[AIPrototypingCalendarViewController alloc] initForFeature:AIPrototypingFeature::kEnhancedCalendar], nil];
diff --git a/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h b/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h index 6ff1303..e50c1d3 100644 --- a/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h +++ b/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h
@@ -24,10 +24,13 @@ // Represents the `kBlingPrototyping` feature used for flexible model // querying. kFreeform, + // TODO(crbug.com/460813653): Remove deprecated TabOrganization constants. // Represents the tab organization/grouping feature. kTabOrganization, // Represents the enhanced calendar feature. kEnhancedCalendar, + // Represents the new smart tab grouping feature. + kSmartTabGrouping, }; #endif // IOS_CHROME_BROWSER_AI_PROTOTYPING_UTILS_AI_PROTOTYPING_CONSTANTS_H_
diff --git a/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm index e504e24e..6f66780 100644 --- a/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm
@@ -11,10 +11,10 @@ namespace { // Top margin for the label. -CGFloat kTopMargin = 20.; -CGFloat kBottomMargin = 15; +constexpr CGFloat kTopMargin = 20.; +constexpr CGFloat kBottomMargin = 15; // Leading margin for the label. -CGFloat kLeadingMargin = 24.; +constexpr CGFloat kLeadingMargin = 24.; } // namespace @interface IdentityChooserHeaderView : UITableViewHeaderFooterView
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm index 3df63ef..948c12c 100644 --- a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm
@@ -43,8 +43,8 @@ }; // Table view header/footer height. -CGFloat kSectionHeaderHeight = 8.; -CGFloat kSectionFooterHeight = 8.; +constexpr CGFloat kSectionHeaderHeight = 8.; +constexpr CGFloat kSectionFooterHeight = 8.; } // namespace
diff --git a/ios/chrome/browser/autofill/model/autofill_controller_js_unittest.mm b/ios/chrome/browser/autofill/model/autofill_controller_js_unittest.mm index 2cfae54a..298638f 100644 --- a/ios/chrome/browser/autofill/model/autofill_controller_js_unittest.mm +++ b/ios/chrome/browser/autofill/model/autofill_controller_js_unittest.mm
@@ -82,7 +82,7 @@ } // clang-format off -NSString* kHTMLForTestingElements = @"<html><body>" +NSString* const kHTMLForTestingElements = @"<html><body>" "<input type=hidden name='gl' value='us'>" "<form name='testform'>" " <input type=hidden name='hl' value='en'>"
diff --git a/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.h b/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.h index 5909386b..a28f4c1 100644 --- a/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.h +++ b/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.h
@@ -131,7 +131,6 @@ void HideAutofillSuggestions(SuggestionHidingReason reason) override; bool IsAutofillEnabled() const override; bool IsAutofillProfileEnabled() const override; - bool IsAutofillPaymentMethodsEnabled() const override; bool IsWalletStorageEnabled() const override; bool IsAutocompleteEnabled() const override; bool IsPasswordManagerEnabled() const override;
diff --git a/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.mm b/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.mm index bad4df8..26694efa 100644 --- a/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.mm +++ b/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.mm
@@ -382,17 +382,15 @@ } bool ChromeAutofillClientIOS::IsAutofillEnabled() const { - return IsAutofillProfileEnabled() || IsAutofillPaymentMethodsEnabled(); + return IsAutofillProfileEnabled() || + AutofillClient::GetPaymentsAutofillClient() + ->IsAutofillPaymentMethodsEnabled(); } bool ChromeAutofillClientIOS::IsAutofillProfileEnabled() const { return prefs::IsAutofillProfileEnabled(GetPrefs()); } -bool ChromeAutofillClientIOS::IsAutofillPaymentMethodsEnabled() const { - return prefs::IsAutofillPaymentMethodsEnabled(GetPrefs()); -} - bool ChromeAutofillClientIOS::IsWalletStorageEnabled() const { return false; }
diff --git a/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.h b/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.h index a0d65f9..b3f5a64 100644 --- a/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.h +++ b/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.h
@@ -160,6 +160,7 @@ base::OnceClosure cancel_mandatory_reauth_callback, base::RepeatingClosure close_mandatory_reauth_callback) override; void ShowMandatoryReauthOptInConfirmation() override; + bool IsAutofillPaymentMethodsEnabled() const final; IbanManager* GetIbanManager() override; IbanAccessManager* GetIbanAccessManager() override; MerchantPromoCodeManager* GetMerchantPromoCodeManager() override;
diff --git a/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.mm b/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.mm index c2e42240..31dbf2b 100644 --- a/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.mm +++ b/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.mm
@@ -45,6 +45,7 @@ #import "components/autofill/core/browser/ui/payments/card_unmask_prompt_view.h" #import "components/autofill/core/browser/ui/payments/virtual_card_enroll_ui_model.h" #import "components/autofill/core/common/autofill_payments_features.h" +#import "components/autofill/core/common/autofill_prefs.h" #import "components/autofill/ios/browser/credit_card_save_metrics_ios.h" #import "ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.h" #import "ios/chrome/browser/autofill/model/credit_card/autofill_save_card_infobar_delegate_ios.h" @@ -482,6 +483,10 @@ void IOSChromePaymentsAutofillClient::ShowMandatoryReauthOptInConfirmation() {} +bool IOSChromePaymentsAutofillClient::IsAutofillPaymentMethodsEnabled() const { + return autofill::prefs::IsAutofillPaymentMethodsEnabled(pref_service_); +} + IbanManager* IOSChromePaymentsAutofillClient::GetIbanManager() { return nullptr; }
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm index 2557ddfc..5c9b749 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm
@@ -42,13 +42,13 @@ const char kFormElementCardExpirationMonth[] = "CCExpiresMonth"; const char kFormElementCardExpirationYear[] = "CCExpiresYear"; -NSString* kLocalCardNumber = @"4111111111111111"; -NSString* kLocalCardHolder = @"Test User"; +NSString* const kLocalCardNumber = @"4111111111111111"; +NSString* const kLocalCardHolder = @"Test User"; // The local card's expiration month and year (only the last two digits) are set // with next month and next year. -NSString* kLocalCardExpirationMonth = +NSString* const kLocalCardExpirationMonth = base::SysUTF8ToNSString(autofill::test::NextMonth()); -NSString* kLocalCardExpirationYear = +NSString* const kLocalCardExpirationYear = base::SysUTF8ToNSString(autofill::test::NextYear().substr(2, 2)); // Unicode characters used in card number: @@ -58,16 +58,16 @@ constexpr char16_t kMidlineEllipsis[] = { 0x2022, 0x2060, 0x2006, 0x2060, 0x2022, 0x2060, 0x2006, 0x2060, 0x2022, 0x2060, 0x2006, 0x2060, 0x2022, 0x2060, 0x2006, 0x2060, 0}; -NSString* kObfuscatedNumberPrefix = base::SysUTF16ToNSString( +NSString* const kObfuscatedNumberPrefix = base::SysUTF16ToNSString( kMidlineEllipsis + std::u16string(separator) + kMidlineEllipsis + std::u16string(separator) + kMidlineEllipsis + std::u16string(separator)); -NSString* kLocalNumberObfuscated = +NSString* const kLocalNumberObfuscated = [NSString stringWithFormat:@"%@1111", kObfuscatedNumberPrefix]; -NSString* kServerNumberObfuscated = +NSString* const kServerNumberObfuscated = [NSString stringWithFormat:@"%@2109", kObfuscatedNumberPrefix]; -NSString* kCvcObfuscated = +NSString* const kCvcObfuscated = base::SysUTF16ToNSString(autofill::CreditCard::GetMidlineEllipsisDots(3)); const char kFormHTMLFile[] = "/credit_card.html";
diff --git a/ios/chrome/browser/browser_container/ui_bundled/browser_edit_menu_handler_unittest.mm b/ios/chrome/browser/browser_container/ui_bundled/browser_edit_menu_handler_unittest.mm index e975442..799983fc 100644 --- a/ios/chrome/browser/browser_container/ui_bundled/browser_edit_menu_handler_unittest.mm +++ b/ios/chrome/browser/browser_container/ui_bundled/browser_edit_menu_handler_unittest.mm
@@ -74,11 +74,11 @@ stringWithFormat:@"%d:u:%@", indent, menuElement.description] ]; } -NSString* kPageHTML = @"<html>" - " <body>" - " This is a simple HTML file." - " </body>" - "</html>"; +NSString* const kPageHTML = @"<html>" + " <body>" + " This is a simple HTML file." + " </body>" + "</html>"; // Return the base menu depending on the environment. NSMutableArray* GetExpectedMenu() {
diff --git a/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm b/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm index a26ada57..a825412 100644 --- a/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm +++ b/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm
@@ -19,7 +19,7 @@ namespace { // FirstRunRecency key, should match the one in `system_flags`. -NSString* kFirstRunRecencyKey = @"FirstRunRecency"; +NSString* const kFirstRunRecencyKey = @"FirstRunRecency"; // Constant for timeout while waiting for a gestural IPH to appear or disappear. const base::TimeDelta kWaitForGestureIPHTimeOut = base::Seconds(3);
diff --git a/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm b/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm index 34b2ba74..307acb97 100644 --- a/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm +++ b/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm
@@ -31,23 +31,23 @@ namespace { // Identifier for long press on notification and open menu categories. -NSString* kCommerceCategoryIdentifier = @"PriceDropNotifications"; +NSString* const kCommerceCategoryIdentifier = @"PriceDropNotifications"; // Identifier if user taps notification (doesn't long press and // choose from options). -NSString* kDefaultActionIdentifier = +NSString* const kDefaultActionIdentifier = @"com.apple.UNNotificationDefaultActionIdentifier"; // Opaque payload key from notification service. -NSString* kSerializedPayloadKey = @"op"; +NSString* const kSerializedPayloadKey = @"op"; // Identifier for user pressing 'Visit site' option after long pressing // notification. -NSString* kVisitSiteActionIdentifier = @"visit_site"; +NSString* const kVisitSiteActionIdentifier = @"visit_site"; // Text for option for long press. -NSString* kVisitSiteTitle = @"Visit site"; +NSString* const kVisitSiteTitle = @"Visit site"; // Identifier for user pressing 'Untrack price' after long pressing // notification. -NSString* kUntrackPriceIdentifier = @"untrack_price"; +NSString* const kUntrackPriceIdentifier = @"untrack_price"; // Text for option 'Untrack price' when long pressing notification. -NSString* kUntrackPriceTitle = @"Untrack price"; +NSString* const kUntrackPriceTitle = @"Untrack price"; // Returns an arbitrary profile amongst the currently loaded profile. This // means that this API is not safe when there are multiple profiles. Instead
diff --git a/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client_unittest.mm b/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client_unittest.mm index a1aea85..25b7d17 100644 --- a/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client_unittest.mm +++ b/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client_unittest.mm
@@ -59,11 +59,11 @@ std::string kBookmarkTitle = "My product title"; constexpr uint64_t kClusterId = 12345L; constexpr char kPayloadValue[] = "value"; -NSString* kSerializedPayloadKey = @"op"; -NSString* kVisitSiteActionId = @"visit_site"; -NSString* kVisitSiteTitle = @"Visit site"; -NSString* kUntrackPriceActionId = @"untrack_price"; -NSString* kUntrackPriceTitle = @"Untrack price"; +NSString* const kSerializedPayloadKey = @"op"; +NSString* const kVisitSiteActionId = @"visit_site"; +NSString* const kVisitSiteTitle = @"Visit site"; +NSString* const kUntrackPriceActionId = @"untrack_price"; +NSString* const kUntrackPriceTitle = @"Untrack price"; constexpr char kUntrackSuccessHistogramName[] = "Commerce.PriceTracking.Untrack.Success";
diff --git a/ios/chrome/browser/composebox/coordinator/composebox_input_plate_mediator.mm b/ios/chrome/browser/composebox/coordinator/composebox_input_plate_mediator.mm index f218bbe9..3a7bd21 100644 --- a/ios/chrome/browser/composebox/coordinator/composebox_input_plate_mediator.mm +++ b/ios/chrome/browser/composebox/coordinator/composebox_input_plate_mediator.mm
@@ -28,6 +28,7 @@ #import "base/unguessable_token.h" #import "components/lens/contextual_input.h" #import "components/lens/lens_bitmap_processing.h" +#import "components/omnibox/browser/lens_suggest_inputs_utils.h" #import "components/omnibox/common/omnibox_features.h" #import "components/omnibox/composebox/ios/composebox_file_upload_observer_bridge.h" #import "components/omnibox/composebox/ios/composebox_query_controller_ios.h" @@ -591,9 +592,11 @@ case contextual_search::FileUploadStatus::kUploadExpired: item.state = ComposeboxInputItemState::kError; break; + case contextual_search::FileUploadStatus::kProcessingSuggestSignalsReady: + [self.delegate reloadAutocompleteSuggestions]; + break; case contextual_search::FileUploadStatus::kNotUploaded: case contextual_search::FileUploadStatus::kProcessing: - case contextual_search::FileUploadStatus::kProcessingSuggestSignalsReady: case contextual_search::FileUploadStatus::kUploadStarted: // No-op, as the state is already `Uploading`. return; @@ -823,6 +826,14 @@ #pragma mark - ComposeboxOmniboxClientDelegate +- (std::optional<lens::proto::LensOverlaySuggestInputs>)suggestInputs { + if (!_composeboxQueryController) { + return std::nullopt; + } + + return _composeboxQueryController->suggest_inputs(); +} + - (BOOL)isAIModeEnabled { return _AIModeEnabled; }
diff --git a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.h b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.h index bcd2cc34..bf4294c 100644 --- a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.h +++ b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.h
@@ -110,6 +110,10 @@ web::NavigationContext* navigation_context) override; void WebStateDestroyed(web::WebState* web_state) override; + // Returns the LensOverlaySuggestInputs if available. + std::optional<lens::proto::LensOverlaySuggestInputs> + GetLensOverlaySuggestInputs() const override; + private: // Object associated with a web state id in `web_state_tracker_`. If the // navigation succeeds, the shortcut is stored in the ShortcutsDatabase.
diff --git a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.mm b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.mm index f4dd7b9..2d2f272 100644 --- a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.mm +++ b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.mm
@@ -165,6 +165,11 @@ is_prefetch); } +std::optional<lens::proto::LensOverlaySuggestInputs> +ComposeboxOmniboxClient::GetLensOverlaySuggestInputs() const { + return [delegate_ suggestInputs]; +} + security_state::SecurityLevel ComposeboxOmniboxClient::GetSecurityLevel() const { return location_bar_->GetLocationBarModel()->GetSecurityLevel();
diff --git a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client_delegate.h b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client_delegate.h index dfa9c0c9..fd78ff8 100644 --- a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client_delegate.h +++ b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client_delegate.h
@@ -10,6 +10,9 @@ /// Delegate for ComposeboxOmniboxClient. @protocol ComposeboxOmniboxClientDelegate +/// Returns the current attached suggest input in the composebox. +- (std::optional<lens::proto::LensOverlaySuggestInputs>)suggestInputs; + /// Returns YES if AI Mode is enabled. - (BOOL)isAIModeEnabled;
diff --git a/ios/chrome/browser/composebox/ui/composebox_input_plate_view_controller.mm b/ios/chrome/browser/composebox/ui/composebox_input_plate_view_controller.mm index 7db15862..a44f8f2c 100644 --- a/ios/chrome/browser/composebox/ui/composebox_input_plate_view_controller.mm +++ b/ios/chrome/browser/composebox/ui/composebox_input_plate_view_controller.mm
@@ -821,6 +821,9 @@ _glowEffectView = ios::provider::CreateGlowEffect( CGRectZero, kInputPlateCornerRadius, kGlowEffectWidth); + // Temporarily remove the glow effect view while its broken (the effect + // doesn't stop rotating). + _glowEffectView = nil; if (_glowEffectView) { _glowEffectView.translatesAutoresizingMaskIntoConstraints = NO; _glowEffectView.userInteractionEnabled = NO;
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn index 151d51b..303a432 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn
@@ -64,7 +64,7 @@ "//ios/chrome/browser/content_suggestions/ui_bundled/magic_stack:utils", "//ios/chrome/browser/content_suggestions/ui_bundled/price_tracking_promo/coordinator", "//ios/chrome/browser/content_suggestions/ui_bundled/safety_check", - "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self", + "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator", "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list", "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list:default_browser_promo", "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list:utils",
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/cells/BUILD.gn index 68483c7..ee9faa19 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/BUILD.gn +++ b/ios/chrome/browser/content_suggestions/ui_bundled/cells/BUILD.gn
@@ -164,15 +164,11 @@ "content_suggestions_cells_constants.mm", "content_suggestions_tile_constants.h", "content_suggestions_tile_constants.mm", - "content_suggestions_tile_layout_util.h", - "content_suggestions_tile_layout_util.mm", ] deps = [ "//ios/chrome/app/strings", "//ios/chrome/browser/shared/ui/symbols", - "//ios/chrome/browser/shared/ui/util", - "//ios/chrome/common/ui/util", "//ui/base", ] } @@ -180,7 +176,6 @@ source_set("unit_tests") { testonly = true sources = [ - "content_suggestions_tile_layout_util_unittest.mm", "content_suggestions_tile_saver_unittest.mm", "most_visited_tiles_mediator_unittest.mm", "shortcuts_mediator_unittest.mm",
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.h b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.h index 7071162..770f1ec0 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.h +++ b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.h
@@ -12,6 +12,13 @@ // index value of the Shortcuts content. const int kShortcutMinimumIndex = 4; +// Vertical spacing between rows of tiles. +extern const int kContentSuggestionsTilesVerticalSpacing; + +// Vertical spacing between columns of tiles. +extern const int kContentSuggestionsTilesHorizontalSpacingRegular; +extern const int kContentSuggestionsTilesHorizontalSpacingCompact; + // Enum listing the collection shortcuts on NTP and similar surfaces. typedef NS_ENUM(NSInteger, NTPCollectionShortcutType) { NTPCollectionShortcutTypeBookmark = kShortcutMinimumIndex,
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.mm b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.mm index 8b762925..34e23ec 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.mm
@@ -18,6 +18,10 @@ } // namespace +const int kContentSuggestionsTilesHorizontalSpacingRegular = 19; + +const int kContentSuggestionsTilesHorizontalSpacingCompact = 5; + NSString* TitleForCollectionShortcutType(NTPCollectionShortcutType type) { switch (type) { case NTPCollectionShortcutTypeBookmark:
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h deleted file mode 100644 index 4a07c56e..0000000 --- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h +++ /dev/null
@@ -1,42 +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. - -#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_CELLS_CONTENT_SUGGESTIONS_TILE_LAYOUT_UTIL_H_ -#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_CELLS_CONTENT_SUGGESTIONS_TILE_LAYOUT_UTIL_H_ - -#import <UIKit/UIKit.h> - -// Vertical spacing between rows of tiles. -extern const int kContentSuggestionsTilesVerticalSpacing; -// Vertical spacing between columns of tiles. -extern const int kContentSuggestionsTilesHorizontalSpacingRegular; -extern const int kContentSuggestionsTilesHorizontalSpacingCompact; - -// For font size < UIContentSizeCategoryExtraExtraExtraLarge. -extern const CGSize kContentSuggestionsTileViewSizeSmall; -// For font size == UIContentSizeCategoryExtraExtraExtraLarge. -extern const CGSize kContentSuggestionsTileViewSizeMedium; -// For font size == UIContentSizeCategoryAccessibilityMedium. -extern const CGSize kContentSuggestionsTileViewSizeLarge; -// For font size > UIContentSizeCategoryAccessibilityMedium. -extern const CGSize kContentSuggestionsTileViewSizeExtraLarge; - -// Returns the vertical spacing between columns of tiles under -// `trait_collection`. -CGFloat ContentSuggestionsTilesHorizontalSpacing( - UITraitCollection* trait_collection); - -// Returns the size of most visited cell based on `category`. -CGSize MostVisitedCellSize(UIContentSizeCategory category); - -// Returns x-offset in order to have the tiles centered in a view with a -// `width` under `environment`. -CGFloat CenteredTilesMarginForWidth(UITraitCollection* trait_collection, - CGFloat width); - -// Returns horizontal space needed to show the Most Visited tiles. -CGFloat MostVisitedTilesContentHorizontalSpace( - UITraitCollection* trait_collection); - -#endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_CELLS_CONTENT_SUGGESTIONS_TILE_LAYOUT_UTIL_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.mm b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.mm deleted file mode 100644 index 3a9d90e..0000000 --- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.mm +++ /dev/null
@@ -1,82 +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. - -#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h" - -#import "base/notreached.h" -#import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/common/ui/util/ui_util.h" - -const int kContentSuggestionsTilesVerticalSpacing = 16; -const int kContentSuggestionsTilesHorizontalSpacingRegular = 19; -const int kContentSuggestionsTilesHorizontalSpacingCompact = 5; - -const CGSize kContentSuggestionsTileViewSizeSmall = {/*width=*/73, - /*height=*/100}; -const CGSize kContentSuggestionsTileViewSizeMedium = {/*width=*/73, - /*height=*/112}; -const CGSize kContentSuggestionsTileViewSizeLarge = {/*width=*/110, - /*height=*/140}; -const CGSize kContentSuggestionsTileViewSizeExtraLarge = {/*width=*/146, - /*height=*/150}; - -namespace { -// Display at most 4 tiles per row. -const int kMaxNumberOfTilesPerRow = 4; -} // namespace - -CGFloat ContentSuggestionsTilesHorizontalSpacing( - UITraitCollection* trait_collection) { - return (trait_collection.horizontalSizeClass != - UIUserInterfaceSizeClassCompact && - trait_collection.verticalSizeClass != UIUserInterfaceSizeClassCompact) - ? kContentSuggestionsTilesHorizontalSpacingRegular - : kContentSuggestionsTilesHorizontalSpacingCompact; -} - -CGSize MostVisitedCellSize(UIContentSizeCategory category) { - NSComparisonResult result = UIContentSizeCategoryCompareToCategory( - category, UIContentSizeCategoryAccessibilityMedium); - BOOL isSmallestSize = - UIContentSizeCategoryCompareToCategory( - category, UIContentSizeCategoryExtraLarge) == NSOrderedAscending; - switch (result) { - case NSOrderedAscending: - return isSmallestSize ? kContentSuggestionsTileViewSizeSmall - : kContentSuggestionsTileViewSizeMedium; - case NSOrderedSame: - return kContentSuggestionsTileViewSizeLarge; - case NSOrderedDescending: - return kContentSuggestionsTileViewSizeExtraLarge; - } -} - -CGFloat CenteredTilesMarginForWidth(UITraitCollection* trait_collection, - CGFloat width) { - CGFloat horizontalSpace = - ContentSuggestionsTilesHorizontalSpacing(trait_collection); - CGSize cellSize = - MostVisitedCellSize(trait_collection.preferredContentSizeCategory); - for (int columns = kMaxNumberOfTilesPerRow; columns > 0; --columns) { - CGFloat whitespace = - width - (columns * cellSize.width) - ((columns - 1) * horizontalSpace); - CGFloat margin = AlignValueToPixel(whitespace / 2); - if (margin >= horizontalSpace) { - return margin; - } - } - NOTREACHED(); -} - -CGFloat MostVisitedTilesContentHorizontalSpace( - UITraitCollection* trait_collection) { - CGFloat horizontalSpace = - ContentSuggestionsTilesHorizontalSpacing(trait_collection); - CGSize cellSize = - MostVisitedCellSize(trait_collection.preferredContentSizeCategory); - // Sum up the space taken up by all the tiles and space between them. - CGFloat width = (kMaxNumberOfTilesPerRow * cellSize.width) + - ((kMaxNumberOfTilesPerRow - 1) * horizontalSpace); - return width; -}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util_unittest.mm b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util_unittest.mm deleted file mode 100644 index dfc299b3..0000000 --- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util_unittest.mm +++ /dev/null
@@ -1,132 +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. - -#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h" - -#import <UIKit/UIKit.h> - -#import "testing/platform_test.h" -#import "third_party/ocmock/OCMock/OCMock.h" - -using ContentSuggestionsTileLayoutUtilTest = PlatformTest; - -// Tests that MostVisitedCellSize returns correct size for all content size -// categories. -TEST_F(ContentSuggestionsTileLayoutUtilTest, MostVisitedCellSize) { - EXPECT_TRUE( - CGSizeEqualToSize(kContentSuggestionsTileViewSizeSmall, - MostVisitedCellSize(UIContentSizeCategoryUnspecified))); - EXPECT_TRUE( - CGSizeEqualToSize(kContentSuggestionsTileViewSizeSmall, - MostVisitedCellSize(UIContentSizeCategoryExtraSmall))); - EXPECT_TRUE( - CGSizeEqualToSize(kContentSuggestionsTileViewSizeSmall, - MostVisitedCellSize(UIContentSizeCategorySmall))); - EXPECT_TRUE( - CGSizeEqualToSize(kContentSuggestionsTileViewSizeSmall, - MostVisitedCellSize(UIContentSizeCategoryMedium))); - EXPECT_TRUE( - CGSizeEqualToSize(kContentSuggestionsTileViewSizeSmall, - MostVisitedCellSize(UIContentSizeCategoryLarge))); - EXPECT_TRUE( - CGSizeEqualToSize(kContentSuggestionsTileViewSizeMedium, - MostVisitedCellSize(UIContentSizeCategoryExtraLarge))); - EXPECT_TRUE(CGSizeEqualToSize( - kContentSuggestionsTileViewSizeMedium, - MostVisitedCellSize(UIContentSizeCategoryExtraExtraLarge))); - EXPECT_TRUE(CGSizeEqualToSize( - kContentSuggestionsTileViewSizeMedium, - MostVisitedCellSize(UIContentSizeCategoryExtraExtraExtraLarge))); - EXPECT_TRUE(CGSizeEqualToSize( - kContentSuggestionsTileViewSizeLarge, - MostVisitedCellSize(UIContentSizeCategoryAccessibilityMedium))); - EXPECT_TRUE(CGSizeEqualToSize( - kContentSuggestionsTileViewSizeExtraLarge, - MostVisitedCellSize(UIContentSizeCategoryAccessibilityLarge))); - EXPECT_TRUE(CGSizeEqualToSize( - kContentSuggestionsTileViewSizeExtraLarge, - MostVisitedCellSize(UIContentSizeCategoryAccessibilityExtraLarge))); - EXPECT_TRUE(CGSizeEqualToSize( - kContentSuggestionsTileViewSizeExtraLarge, - MostVisitedCellSize(UIContentSizeCategoryAccessibilityExtraExtraLarge))); - EXPECT_TRUE(CGSizeEqualToSize( - kContentSuggestionsTileViewSizeExtraLarge, - MostVisitedCellSize( - UIContentSizeCategoryAccessibilityExtraExtraExtraLarge))); -} - -// Tests that CenteredTilesMarginForWidth works under various environment. -TEST_F(ContentSuggestionsTileLayoutUtilTest, CenteredTilesMarginForWidth) { - // Set up Regular size class and Large font size. - UITraitCollection* trait_collection; - trait_collection = [UITraitCollection - traitCollectionWithTraits:^(id<UIMutableTraits> mutableTraits) { - mutableTraits.horizontalSizeClass = UIUserInterfaceSizeClassRegular; - mutableTraits.preferredContentSizeCategory = UIContentSizeCategoryLarge; - }]; - - // Display 4 columns on very big screen. - EXPECT_EQ(200, CenteredTilesMarginForWidth( - trait_collection, - kContentSuggestionsTileViewSizeSmall.width * 4 + - kContentSuggestionsTilesHorizontalSpacingRegular * 3 + - 200 * 2)); - // Display 4 columns on normal screen. - EXPECT_EQ(20, CenteredTilesMarginForWidth( - trait_collection, - kContentSuggestionsTileViewSizeSmall.width * 4 + - kContentSuggestionsTilesHorizontalSpacingRegular * 3 + - 20 * 2)); - // Display 3 columns. - EXPECT_EQ(20, CenteredTilesMarginForWidth( - trait_collection, - kContentSuggestionsTileViewSizeSmall.width * 3 + - kContentSuggestionsTilesHorizontalSpacingRegular * 2 + - 20 * 2)); - // Display 2 columns. - EXPECT_EQ(20, CenteredTilesMarginForWidth( - trait_collection, - kContentSuggestionsTileViewSizeSmall.width * 2 + - kContentSuggestionsTilesHorizontalSpacingRegular * 1 + - 20 * 2)); - // Display 1 columns. - EXPECT_EQ(20, CenteredTilesMarginForWidth( - trait_collection, - kContentSuggestionsTileViewSizeSmall.width * 1 + - kContentSuggestionsTilesHorizontalSpacingRegular * 0 + - 20 * 2)); - - // Set up Compact size class and Accessibility Large font size. - trait_collection = [UITraitCollection - traitCollectionWithTraits:^(id<UIMutableTraits> mutableTraits) { - mutableTraits.horizontalSizeClass = UIUserInterfaceSizeClassCompact; - mutableTraits.preferredContentSizeCategory = - UIContentSizeCategoryAccessibilityLarge; - }]; - - // Display 4 columns. - EXPECT_EQ(20, CenteredTilesMarginForWidth( - trait_collection, - kContentSuggestionsTileViewSizeExtraLarge.width * 4 + - kContentSuggestionsTilesHorizontalSpacingCompact * 3 + - 20 * 2)); - // Display 3 columns. - EXPECT_EQ(20, CenteredTilesMarginForWidth( - trait_collection, - kContentSuggestionsTileViewSizeExtraLarge.width * 3 + - kContentSuggestionsTilesHorizontalSpacingCompact * 2 + - 20 * 2)); - // Display 2 columns. - EXPECT_EQ(20, CenteredTilesMarginForWidth( - trait_collection, - kContentSuggestionsTileViewSizeExtraLarge.width * 2 + - kContentSuggestionsTilesHorizontalSpacingCompact * 1 + - 20 * 2)); - // Display 1 columns. - EXPECT_EQ(20, CenteredTilesMarginForWidth( - trait_collection, - kContentSuggestionsTileViewSizeExtraLarge.width * 1 + - kContentSuggestionsTilesHorizontalSpacingCompact * 0 + - 20 * 2)); -}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_view.mm b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_view.mm index 234a2f0..fdd23177 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_view.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_view.mm
@@ -4,7 +4,6 @@ #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_view.h" -#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h" #import "ios/chrome/browser/shared/ui/util/dynamic_type_util.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_collection_utils_unittest.mm b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_collection_utils_unittest.mm index 2a81987b..4a5a8d7 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_collection_utils_unittest.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_collection_utils_unittest.mm
@@ -18,7 +18,7 @@ namespace content_suggestions { -CGFloat kDoodleHeightNoLogo = 0; +constexpr CGFloat kDoodleHeightNoLogo = 0; class ContentSuggestionsCollectionUtilsTest : public PlatformTest { public:
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm index ea00e4a4..ef76a617 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm
@@ -73,7 +73,7 @@ #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_item_type.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_magic_stack_mediator.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/utils.h" -#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_default_browser_promo_coordinator.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_default_browser_promo_coordinator_delegate.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_item_view.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller.mm b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller.mm index ae4b360..ad2ea25 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller.mm
@@ -27,9 +27,6 @@ @property(nonatomic, strong) URLDragDropHandler* dragDropHandler; -// StackView holding all subviews. -@property(nonatomic, strong) UIStackView* verticalStackView; - // List of all UITapGestureRecognizers created for the Most Visisted tiles. @property(nonatomic, strong) NSMutableArray<UITapGestureRecognizer*>* mostVisitedTapRecognizers; @@ -57,30 +54,6 @@ initWithDelegate:self.dragDropHandler]]; self.view.backgroundColor = [UIColor clearColor]; self.view.accessibilityIdentifier = kContentSuggestionsCollectionIdentifier; - - self.verticalStackView = [[UIStackView alloc] init]; - self.verticalStackView.translatesAutoresizingMaskIntoConstraints = NO; - self.verticalStackView.axis = UILayoutConstraintAxisVertical; - // A centered alignment will ensure the views are centered. - self.verticalStackView.alignment = UIStackViewAlignmentCenter; - // A fill distribution allows for the custom spacing between elements and - // height/width configurations for each row. - self.verticalStackView.distribution = UIStackViewDistributionFill; - [self.view addSubview:self.verticalStackView]; - - [NSLayoutConstraint activateConstraints:@[ - [self.verticalStackView.leadingAnchor - constraintEqualToAnchor:self.view.leadingAnchor], - [self.verticalStackView.trailingAnchor - constraintEqualToAnchor:self.view.trailingAnchor], - [self.verticalStackView.topAnchor - constraintEqualToAnchor:self.view.topAnchor - constant:content_suggestions::HeaderBottomPadding( - self.traitCollection)], - [self.verticalStackView.bottomAnchor - constraintEqualToAnchor:self.view.bottomAnchor] - ]]; - if (_mostVisitedTileConfig.mostVisitedItems.count > 0) { [self createAndInsertMostVisitedModule]; } @@ -122,9 +95,8 @@ [[MagicStackModuleContainer alloc] initWithFrame:CGRectZero]; [self.mostVisitedModuleContainer configureWithConfig:_mostVisitedTileConfig]; // If viewDidLoad has been called before the first valid Most Visited Tiles - // are available, construct `mostVisitedStackView`. - if (self.verticalStackView && - _mostVisitedTileConfig.mostVisitedItems.count > 0) { + // are available, construct the most visited tiles. + if (_mostVisitedTileConfig.mostVisitedItems.count > 0) { [self createAndInsertMostVisitedModule]; } @@ -140,21 +112,21 @@ #pragma mark - Private -- (void)addUIElement:(UIView*)view withCustomBottomSpacing:(CGFloat)spacing { - [self.verticalStackView addArrangedSubview:view]; - if (spacing > 0) { - [self.verticalStackView setCustomSpacing:spacing afterView:view]; - } -} - - (void)createAndInsertMostVisitedModule { - [self.verticalStackView insertArrangedSubview:self.mostVisitedModuleContainer - atIndex:0]; + [self.view addSubview:self.mostVisitedModuleContainer]; + self.mostVisitedModuleContainer.translatesAutoresizingMaskIntoConstraints = + NO; [NSLayoutConstraint activateConstraints:@[ - [self.mostVisitedModuleContainer.widthAnchor - constraintEqualToAnchor:self.view.widthAnchor], - [self.mostVisitedModuleContainer.centerXAnchor - constraintEqualToAnchor:self.view.centerXAnchor], + [self.mostVisitedModuleContainer.leadingAnchor + constraintEqualToAnchor:self.view.leadingAnchor], + [self.mostVisitedModuleContainer.trailingAnchor + constraintEqualToAnchor:self.view.trailingAnchor], + [self.mostVisitedModuleContainer.topAnchor + constraintEqualToAnchor:self.view.topAnchor + constant:content_suggestions::HeaderBottomPadding( + self.traitCollection)], + [self.mostVisitedModuleContainer.bottomAnchor + constraintEqualToAnchor:self.view.bottomAnchor] ]]; [self.view layoutIfNeeded]; }
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/BUILD.gn index b938737..e20c605 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/BUILD.gn +++ b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/BUILD.gn
@@ -62,7 +62,8 @@ "//ios/chrome/browser/content_suggestions/ui_bundled/price_tracking_promo/ui", "//ios/chrome/browser/content_suggestions/ui_bundled/safety_check", "//ios/chrome/browser/content_suggestions/ui_bundled/safety_check:prefs", - "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self", + "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator", + "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui", "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list", "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list:utils", "//ios/chrome/browser/content_suggestions/ui_bundled/shop_card", @@ -159,7 +160,7 @@ "//ios/chrome/browser/content_suggestions/ui_bundled/default_browser/ui", "//ios/chrome/browser/content_suggestions/ui_bundled/price_tracking_promo/ui", "//ios/chrome/browser/content_suggestions/ui_bundled/safety_check", - "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self", + "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui", "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list", "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list:constants", "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list:utils",
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_collection_view.mm b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_collection_view.mm index 3fc95070..e014d11 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_collection_view.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_collection_view.mm
@@ -11,7 +11,6 @@ #import "base/metrics/histogram_macros.h" #import "base/numerics/safe_conversions.h" #import "components/segmentation_platform/public/features.h" -#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_constants.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/edit_button_config.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_collection_view_audience.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_container.mm b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_container.mm index e82a5828..d54389f 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_container.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_container.mm
@@ -9,7 +9,6 @@ #import "base/strings/sys_string_conversions.h" #import "components/commerce/core/commerce_feature_list.h" #import "google_apis/gaia/gaia_id.h" -#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/most_visited_tiles_config.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_collection_utils.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_constants.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_contents_factory.mm b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_contents_factory.mm index 8690789..1fc4d78 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_contents_factory.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_contents_factory.mm
@@ -8,7 +8,7 @@ #import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_view.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_shortcut_tile_view.h" -#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/most_visited_tiles_stack_view.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/multi_row_container_view.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/shortcuts_commands.h" @@ -24,7 +24,7 @@ #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_consumer_source.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_state.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_view.h" -#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/constants.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_config.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_consumer_source.h" @@ -46,6 +46,21 @@ #import "ios/chrome/browser/content_suggestions/ui_bundled/tips/ui/tips_module_view.h" #import "ios/chrome/browser/shared/public/features/features.h" +namespace { + +// Returns the vertical spacing between columns of tiles under +// `trait_collection`. +CGFloat ContentSuggestionsTilesHorizontalSpacing( + UITraitCollection* trait_collection) { + return (trait_collection.horizontalSizeClass != + UIUserInterfaceSizeClassCompact && + trait_collection.verticalSizeClass != UIUserInterfaceSizeClassCompact) + ? kContentSuggestionsTilesHorizontalSpacingRegular + : kContentSuggestionsTilesHorizontalSpacingCompact; +} + +} // namespace + @implementation MagicStackModuleContentsFactory - (UIView*)contentViewForConfig:(MagicStackModule*)config
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_ranking_model.mm b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_ranking_model.mm index 2f4cc29..53f53878 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_ranking_model.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_ranking_model.mm
@@ -62,8 +62,9 @@ #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_magic_stack_mediator.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_prefs.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_state.h" -#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h" -#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator_delegate.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_config.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_item_view_data.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_mediator.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/BUILD.gn similarity index 74% rename from ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/BUILD.gn rename to ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/BUILD.gn index 959297a..a569f46 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/BUILD.gn +++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/BUILD.gn
@@ -1,27 +1,24 @@ -# Copyright 2024 The Chromium Authors +# 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("send_tab_to_self") { +source_set("coordinator") { sources = [ - "send_tab_promo_item.h", - "send_tab_promo_item.mm", "send_tab_promo_mediator.h", "send_tab_promo_mediator.mm", + "send_tab_promo_mediator_delegate.h", ] deps = [ "//base", "//components/prefs", "//components/send_tab_to_self", - "//ios/chrome/app/strings", "//ios/chrome/browser/content_suggestions/ui_bundled:constants", "//ios/chrome/browser/content_suggestions/ui_bundled:promo_module_ui", "//ios/chrome/browser/content_suggestions/ui_bundled/magic_stack:public", + "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui", "//ios/chrome/browser/favicon/model", - "//ios/chrome/browser/shared/ui/symbols", "//ios/chrome/common/ui/favicon", "//ios/chrome/common/ui/favicon:favicon_constants", - "//ui/base", "//url", ] }
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h similarity index 77% rename from ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h rename to ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h index c7af113..1e4e409 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h +++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_MEDIATOR_H_ -#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_MEDIATOR_H_ +#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_H_ #import <UIKit/UIKit.h> @@ -13,18 +13,7 @@ @protocol MagicStackModuleContainerDelegate; class PrefService; @class SendTabPromoItem; - -// Delegate handling events from the SendTabPromoMediator. -@protocol SendTabPromoMediatorDelegate - -// Signals that the user has received a tab sent from one of their other -// devices. -- (void)sentTabReceived; - -// Signals that the Send Tab Promo Module should be removed. -- (void)removeSendTabPromoModule; - -@end +@protocol SendTabPromoMediatorDelegate; // Mediator for managing the state of the Send Tab to Self Promo Magic Stack // module. @@ -57,4 +46,4 @@ @end -#endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_MEDIATOR_H_ +#endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.mm b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.mm similarity index 93% rename from ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.mm rename to ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.mm index 1689c382..45133fd 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h" #import "base/memory/raw_ptr.h" #import "base/metrics/histogram_functions.h" @@ -10,7 +10,8 @@ #import "components/send_tab_to_self/pref_names.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_constants.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_container_delegate.h" -#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator_delegate.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h" #import "ios/chrome/browser/favicon/model/favicon_loader.h" #import "ios/chrome/common/ui/favicon/favicon_attributes.h" #import "ios/chrome/common/ui/favicon/favicon_constants.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator_delegate.h b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator_delegate.h new file mode 100644 index 0000000..e2ab489 --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator_delegate.h
@@ -0,0 +1,20 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_DELEGATE_H_ +#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_DELEGATE_H_ + +// Delegate handling events from the SendTabPromoMediator. +@protocol SendTabPromoMediatorDelegate + +// Signals that the user has received a tab sent from one of their other +// devices. +- (void)sentTabReceived; + +// Signals that the Send Tab Promo Module should be removed. +- (void)removeSendTabPromoModule; + +@end + +#endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_DELEGATE_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/BUILD.gn new file mode 100644 index 0000000..5d7ea83 --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/BUILD.gn
@@ -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. + +source_set("ui") { + sources = [ + "send_tab_promo_item.h", + "send_tab_promo_item.mm", + ] + deps = [ + "//ios/chrome/app/strings", + "//ios/chrome/browser/content_suggestions/ui_bundled:constants", + "//ios/chrome/browser/content_suggestions/ui_bundled:promo_module_ui", + "//ios/chrome/browser/shared/ui/symbols", + "//ui/base", + ] +}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h similarity index 82% rename from ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h rename to ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h index c546a04a..f9b893c9 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h +++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h
@@ -1,9 +1,8 @@ // Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_ITEM_H_ -#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_ITEM_H_ +#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_UI_SEND_TAB_PROMO_ITEM_H_ +#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_UI_SEND_TAB_PROMO_ITEM_H_ #import "ios/chrome/browser/content_suggestions/ui_bundled/standalone_module_item.h" @@ -12,4 +11,4 @@ @end -#endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_ITEM_H_ +#endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_UI_SEND_TAB_PROMO_ITEM_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.mm b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.mm similarity index 96% rename from ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.mm rename to ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.mm index a9333d2..62b1509 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h" #import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_constants.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h"
diff --git a/ios/chrome/browser/docking_promo/coordinator/docking_promo_mediator_unittest.mm b/ios/chrome/browser/docking_promo/coordinator/docking_promo_mediator_unittest.mm index cfe649f..7746172 100644 --- a/ios/chrome/browser/docking_promo/coordinator/docking_promo_mediator_unittest.mm +++ b/ios/chrome/browser/docking_promo/coordinator/docking_promo_mediator_unittest.mm
@@ -30,7 +30,7 @@ namespace { -NSString* kFirstRunRecencyKey = @"FirstRunRecency"; +NSString* const kFirstRunRecencyKey = @"FirstRunRecency"; } // namespace
diff --git a/ios/chrome/browser/download/coordinator/auto_deletion/auto_deletion_coordinator.mm b/ios/chrome/browser/download/coordinator/auto_deletion/auto_deletion_coordinator.mm index 03d9bea2..f5bfc496 100644 --- a/ios/chrome/browser/download/coordinator/auto_deletion/auto_deletion_coordinator.mm +++ b/ios/chrome/browser/download/coordinator/auto_deletion/auto_deletion_coordinator.mm
@@ -25,19 +25,19 @@ namespace { // The number of bytes in a KB. -CGFloat kBytesInKiloBytes = 1000; +constexpr CGFloat kBytesInKiloBytes = 1000; // The number of KB in a MB. -CGFloat kKiloBytesInMegaBytes = 1000; +constexpr CGFloat kKiloBytesInMegaBytes = 1000; // The number of bytes in MB. -CGFloat kBytesInMegaBytes = kBytesInKiloBytes * kKiloBytesInMegaBytes; +constexpr CGFloat kBytesInMegaBytes = kBytesInKiloBytes * kKiloBytesInMegaBytes; // The threshold where if the user has less than this percentage of storage // remaining on their device then the Auto-deletion IPH should be shown. This // value is a percentage. -CGFloat kAvailableStorageThreshold = 2.0; +constexpr CGFloat kAvailableStorageThreshold = 2.0; // The threshold where if a file downloaded onto the device is greater than this // value then the Auto-deletion IPH should be shown. This value is in units of // MB. -CGFloat kLargeFileSizeThreshold = 20.0; +constexpr CGFloat kLargeFileSizeThreshold = 20.0; } // namespace typedef void (^UIAlertActionHandler)(UIAlertAction* action);
diff --git a/ios/chrome/browser/download/ui/download_manager_egtest.mm b/ios/chrome/browser/download/ui/download_manager_egtest.mm index d9aaa452..ba88d1e0 100644 --- a/ios/chrome/browser/download/ui/download_manager_egtest.mm +++ b/ios/chrome/browser/download/ui/download_manager_egtest.mm
@@ -39,7 +39,7 @@ namespace { // Accessibility ID of the Activity menu. -NSString* kActivityMenuIdentifier = @"ActivityListView"; +NSString* const kActivityMenuIdentifier = @"ActivityListView"; // Scroll to the top of the Reading List. void ScrollToTop() {
diff --git a/ios/chrome/browser/drive/model/drive_list.mm b/ios/chrome/browser/drive/model/drive_list.mm index bda6562..643e476 100644 --- a/ios/chrome/browser/drive/model/drive_list.mm +++ b/ios/chrome/browser/drive/model/drive_list.mm
@@ -12,15 +12,15 @@ // The size of the drive file picker item icon. constexpr CGFloat kDriveFilePickerItemIconSize = 18; // Prefix of MIME types associated with images. -NSString* kImageMIMETypePrefix = @"image/"; +NSString* const kImageMIMETypePrefix = @"image/"; // Prefix of the icon link for shortcuts. -NSString* kShortcutImageLinkPrefix = +NSString* const kShortcutImageLinkPrefix = @"https://drive-thirdparty.googleusercontent.com/64/type/"; // Prefix of links to icons in the Drive third-party icon repository. -NSString* kDriveIconRepositoryPrefix = +NSString* const kDriveIconRepositoryPrefix = @"https://drive-thirdparty.googleusercontent.com/"; // MIME type for folder items. -NSString* kFolderMIMEType = @"application/vnd.google-apps.folder"; +NSString* const kFolderMIMEType = @"application/vnd.google-apps.folder"; } // namespace
diff --git a/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator_helper.mm b/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator_helper.mm index 48e42f79..f8efd88 100644 --- a/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator_helper.mm +++ b/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator_helper.mm
@@ -26,25 +26,26 @@ constexpr NSInteger kNextPageSize = 50; // extra_term parameter for the Starred view. -NSString* kStarredExtraTerm = @"starred=true"; +NSString* const kStarredExtraTerm = @"starred=true"; // extra_term parameter for the Recent view. -NSString* kRecentExtraTerm = @"mimeType!='application/vnd.google-apps.folder'"; +NSString* const kRecentExtraTerm = + @"mimeType!='application/vnd.google-apps.folder'"; // order_by parameter for the Recent view. -NSString* kRecentOrderBy = @"recency desc"; +NSString* const kRecentOrderBy = @"recency desc"; // extra_term parameter for the Shared with me view. -NSString* kSharedWithMeExtraTerm = @"sharedWithMe=true"; +NSString* const kSharedWithMeExtraTerm = @"sharedWithMe=true"; // order_by parameter for the Shared with me view. -NSString* kSharedWithMeOrderBy = @"sharedWithMeTime desc"; +NSString* const kSharedWithMeOrderBy = @"sharedWithMeTime desc"; // The key word to sort items in an ascending order. -NSString* kAscendingQueryOrder = @"asc"; +NSString* const kAscendingQueryOrder = @"asc"; // The key word to sort items in an descending order. -NSString* kDescendingQueryOrder = @"desc"; +NSString* const kDescendingQueryOrder = @"desc"; // The key word to sort items by name. -NSString* kQueryOrderNameType = @"name"; +NSString* const kQueryOrderNameType = @"name"; // The key word to sort items by opening time. -NSString* kQueryOrderOpeningType = @"viewedByMeTime"; +NSString* const kQueryOrderOpeningType = @"viewedByMeTime"; // The key word to sort items by modification time. -NSString* kQueryOrderModifiedType = @"modifiedTime"; +NSString* const kQueryOrderModifiedType = @"modifiedTime"; // String representing any audio MIME type. const char kAnyAudioFileMimeType[] = "audio/*"; // String representing any video MIME type. @@ -52,7 +53,7 @@ // String representing any image MIME type. const char kAnyImageFileMimeType[] = "image/*"; // extra_term parameter for the "Archives" filter. -NSString* kOnlyShowArchivesExtraTerm = +NSString* const kOnlyShowArchivesExtraTerm = @"(mimeType='application/zip' or" " mimeType='application/x-7z-compressed' or" " mimeType='application/x-rar-compressed' or" @@ -64,20 +65,20 @@ " mimeType='application/java-archive' or" " mimeType='application/gzip')"; // extra_term parameter for the "Audio" filter. -NSString* kOnlyShowAudioExtraTerm = @"mimeType contains 'audio/'"; +NSString* const kOnlyShowAudioExtraTerm = @"mimeType contains 'audio/'"; // extra_term parameter for the "Video" filter. -NSString* kOnlyShowVideosExtraTerm = @"mimeType contains 'video/'"; +NSString* const kOnlyShowVideosExtraTerm = @"mimeType contains 'video/'"; // extra_term parameter for the "Photos & Images" filter. -NSString* kOnlyShowImagesExtraTerm = @"mimeType contains 'image/'"; +NSString* const kOnlyShowImagesExtraTerm = @"mimeType contains 'image/'"; // extra_term parameter for the "PDFs" filter. -NSString* kOnlyShowPDFsExtraTerm = @"mimeType='application/pdf'"; +NSString* const kOnlyShowPDFsExtraTerm = @"mimeType='application/pdf'"; // extra_term parameter to add folders to a filter. -NSString* kAlsoShowFoldersExtraTerm = +NSString* const kAlsoShowFoldersExtraTerm = @"mimeType='application/vnd.google-apps.folder'"; // Prefix of MIME types associated with Google apps. -NSString* kGoogleAppsMIMETypePrefix = @"application/vnd.google-apps."; +NSString* const kGoogleAppsMIMETypePrefix = @"application/vnd.google-apps."; // MIME type for folder items. -NSString* kFolderMIMEType = @"application/vnd.google-apps.folder"; +NSString* const kFolderMIMEType = @"application/vnd.google-apps.folder"; // Replaces `/` and `\` characters with `_` in `file_path` and returns the // result.
diff --git a/ios/chrome/browser/enterprise/connectors/connectors_service.h b/ios/chrome/browser/enterprise/connectors/connectors_service.h index dfa68f0..762b5851 100644 --- a/ios/chrome/browser/enterprise/connectors/connectors_service.h +++ b/ios/chrome/browser/enterprise/connectors/connectors_service.h
@@ -24,7 +24,7 @@ // - OnSecurityEventEnterpriseConnectors class ConnectorsService : public ConnectorsServiceBase, public KeyedService { public: - ConnectorsService(ProfileIOS* profile); + explicit ConnectorsService(ProfileIOS* profile); ~ConnectorsService() override; // Returns the CBCM domain or profile domain that enables connector policies. @@ -48,8 +48,6 @@ bool ConnectorsEnabled() const override; PrefService* GetPrefs() override; const PrefService* GetPrefs() const override; - ConnectorsManagerBase* GetConnectorsManagerBase() override; - const ConnectorsManagerBase* GetConnectorsManagerBase() const override; policy::CloudPolicyManager* GetManagedUserCloudPolicyManager() const override; private: @@ -59,7 +57,6 @@ FRIEND_TEST_ALL_PREFIXES(ConnectorsServiceTest, ConnectorsEnabled); raw_ptr<ProfileIOS> profile_; - std::unique_ptr<ConnectorsManager> connectors_manager_; }; } // namespace enterprise_connectors
diff --git a/ios/chrome/browser/enterprise/connectors/connectors_service.mm b/ios/chrome/browser/enterprise/connectors/connectors_service.mm index 986213c5..dc3a1bd 100644 --- a/ios/chrome/browser/enterprise/connectors/connectors_service.mm +++ b/ios/chrome/browser/enterprise/connectors/connectors_service.mm
@@ -21,11 +21,12 @@ namespace enterprise_connectors { -ConnectorsService::ConnectorsService(ProfileIOS* profile) : profile_(profile) { +ConnectorsService::ConnectorsService(ProfileIOS* profile) + : ConnectorsServiceBase( + std::make_unique<ConnectorsManager>(profile->GetPrefs(), + GetServiceProviderConfig())), + profile_(profile) { CHECK(profile_); - - connectors_manager_ = std::make_unique<ConnectorsManager>( - profile_->GetPrefs(), GetServiceProviderConfig()); } ConnectorsService::~ConnectorsService() = default; @@ -43,16 +44,16 @@ policy_scope = dm_token.value().scope; } - // Machine scope has precedence, only update the scope if the previous - // policy is not already machine-scoped. - if (policy_scope != policy::PolicyScope::POLICY_SCOPE_MACHINE) { - if (std::optional<DmToken> dm_token = - GetDmToken(kOnSecurityEventScopePref)) { - policy_scope = dm_token.value().scope; - } + // Machine scope has precedence, only update the scope if the previous + // policy is not already machine-scoped. + if (policy_scope != policy::PolicyScope::POLICY_SCOPE_MACHINE) { + if (std::optional<DmToken> dm_token = + GetDmToken(kOnSecurityEventScopePref)) { + policy_scope = dm_token.value().scope; } + } - return enterprise::GetManagementDomain(policy_scope, profile_); + return enterprise::GetManagementDomain(policy_scope, profile_); } bool ConnectorsService::IsConnectorEnabled(AnalysisConnector connector) const { @@ -98,15 +99,6 @@ return profile_->GetPrefs(); } -ConnectorsManagerBase* ConnectorsService::GetConnectorsManagerBase() { - return connectors_manager_.get(); -} - -const ConnectorsManagerBase* ConnectorsService::GetConnectorsManagerBase() - const { - return connectors_manager_.get(); -} - policy::CloudPolicyManager* ConnectorsService::GetManagedUserCloudPolicyManager() const { return profile_->GetUserCloudPolicyManager();
diff --git a/ios/chrome/browser/first_run/ui_bundled/best_features/coordinator/best_features_screen_detail_coordinator.mm b/ios/chrome/browser/first_run/ui_bundled/best_features/coordinator/best_features_screen_detail_coordinator.mm index 6b0957f..7ca93f8 100644 --- a/ios/chrome/browser/first_run/ui_bundled/best_features/coordinator/best_features_screen_detail_coordinator.mm +++ b/ios/chrome/browser/first_run/ui_bundled/best_features/coordinator/best_features_screen_detail_coordinator.mm
@@ -52,7 +52,7 @@ _viewController = [[FeatureHighlightScreenshotViewController alloc] initWithFeatureHighlightItem:_bestFeaturesItem]; _viewController.actionHandler = self; - _baseNavigationController.delegate = _viewController; + _baseNavigationController.navigationBarHidden = NO; [_baseNavigationController pushViewController:_viewController animated:YES]; }
diff --git a/ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.mm b/ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.mm index cca9872..1600dc5 100644 --- a/ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.mm +++ b/ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.mm
@@ -98,6 +98,14 @@ textStackView.translatesAutoresizingMaskIntoConstraints = NO; [contentView addSubview:textStackView]; + // Adjust the cell separator inset to align with the start of the text + // content. The right inset aligns with the content view's trailing margin. + self.separatorInset = + UIEdgeInsetsMake(0, + kTableViewHorizontalSpacing + kIconBackgroundWidth + + kTableViewImagePadding, + 0, kContentViewTrailingMargin); + [NSLayoutConstraint activateConstraints:@[ // Icon background constraints. [_iconBackgroundView.leadingAnchor
diff --git a/ios/chrome/browser/first_run/ui_bundled/best_features/ui/feature_highlight_screenshot_view_controller.mm b/ios/chrome/browser/first_run/ui_bundled/best_features/ui/feature_highlight_screenshot_view_controller.mm index 1d33b66..cf8a930 100644 --- a/ios/chrome/browser/first_run/ui_bundled/best_features/ui/feature_highlight_screenshot_view_controller.mm +++ b/ios/chrome/browser/first_run/ui_bundled/best_features/ui/feature_highlight_screenshot_view_controller.mm
@@ -35,8 +35,7 @@ } } // namespace -@interface FeatureHighlightScreenshotViewController () < - UINavigationControllerDelegate> +@interface FeatureHighlightScreenshotViewController () @end @@ -88,12 +87,4 @@ } } -#pragma mark - UINavigationControllerDelegate - -- (void)navigationController:(UINavigationController*)navigationController - willShowViewController:(UIViewController*)viewController - animated:(BOOL)animated { - [navigationController setNavigationBarHidden:(viewController != self)]; -} - @end
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index 2081bcdf..97d4aa0 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -1933,14 +1933,6 @@ flag_descriptions::kPageContentAnnotationsDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE( page_content_annotations::features::kPageContentAnnotations)}, - {"page-content-annotations-persist-salient-image-metadata", - flag_descriptions::kPageContentAnnotationsPersistSalientImageMetadataName, - flag_descriptions:: - kPageContentAnnotationsPersistSalientImageMetadataDescription, - flags_ui::kOsIos, - FEATURE_VALUE_TYPE( - page_content_annotations::features:: - kPageContentAnnotationsPersistSalientImageMetadata)}, {"page-content-annotations-remote-page-metadata", flag_descriptions::kPageContentAnnotationsRemotePageMetadataName, flag_descriptions::kPageContentAnnotationsRemotePageMetadataDescription,
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index c407e8e..087cdd76 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -1307,11 +1307,6 @@ const char kPageContentAnnotationsDescription[] = "Enables page content to be annotated on-device."; -const char kPageContentAnnotationsPersistSalientImageMetadataName[] = - "Page content annotations - Persist salient image metadata"; -const char kPageContentAnnotationsPersistSalientImageMetadataDescription[] = - "Enables salient image metadata per page load to be persisted on-device."; - const char kPageContentAnnotationsRemotePageMetadataName[] = "Page content annotations - Remote page metadata"; const char kPageContentAnnotationsRemotePageMetadataDescription[] =
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index 02fc2fcb..5c515673 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -779,10 +779,6 @@ extern const char kPageContentAnnotationsName[]; extern const char kPageContentAnnotationsDescription[]; -extern const char kPageContentAnnotationsPersistSalientImageMetadataName[]; -extern const char - kPageContentAnnotationsPersistSalientImageMetadataDescription[]; - extern const char kPageContentAnnotationsRemotePageMetadataName[]; extern const char kPageContentAnnotationsRemotePageMetadataDescription[];
diff --git a/ios/chrome/browser/home_customization/ui/home_customization_background_preset_header_view.mm b/ios/chrome/browser/home_customization/ui/home_customization_background_preset_header_view.mm index 3cf93d8..a064a6f1 100644 --- a/ios/chrome/browser/home_customization/ui/home_customization_background_preset_header_view.mm +++ b/ios/chrome/browser/home_customization/ui/home_customization_background_preset_header_view.mm
@@ -10,7 +10,7 @@ namespace { // The minimum width the text label can have. -CGFloat kLabelMinWidth = 105.0; +constexpr CGFloat kLabelMinWidth = 105.0; } // namespace @implementation HomeCustomizationBackgroundPresetHeaderView {
diff --git a/ios/chrome/browser/intelligence/enhanced_calendar/coordinator/enhanced_calendar_mediator.mm b/ios/chrome/browser/intelligence/enhanced_calendar/coordinator/enhanced_calendar_mediator.mm index e418c4a..fde14d34 100644 --- a/ios/chrome/browser/intelligence/enhanced_calendar/coordinator/enhanced_calendar_mediator.mm +++ b/ios/chrome/browser/intelligence/enhanced_calendar/coordinator/enhanced_calendar_mediator.mm
@@ -18,7 +18,7 @@ namespace { // The string template to use for parsing the end and start date/time. -NSString* kDateTimeTemplate = @"dd/MM/yyyy HH:mm"; +NSString* const kDateTimeTemplate = @"dd/MM/yyyy HH:mm"; // String template to use for adding additional information to the calendar // event summary.
diff --git a/ios/chrome/browser/intelligence/smart_tab_grouping/model/BUILD.gn b/ios/chrome/browser/intelligence/smart_tab_grouping/model/BUILD.gn new file mode 100644 index 0000000..a6cacf1 --- /dev/null +++ b/ios/chrome/browser/intelligence/smart_tab_grouping/model/BUILD.gn
@@ -0,0 +1,23 @@ +# 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("model") { + sources = [ + "smart_tab_grouping_service_impl.h", + "smart_tab_grouping_service_impl.mm", + ] + deps = [ + "//base", + "//components/optimization_guide/core", + "//components/optimization_guide/proto:optimization_guide_proto", + "//components/signin/public/identity_manager", + "//ios/chrome/browser/intelligence/proto_wrappers:ios_smart_tab_grouping_proto_wrapper", + "//ios/chrome/browser/optimization_guide/model", + "//ios/chrome/browser/optimization_guide/mojom", + "//ios/chrome/browser/shared/model/profile", + "//ios/chrome/browser/shared/model/web_state_list", + "//ios/chrome/browser/signin/model", + "//ios/web/public", + ] +}
diff --git a/ios/chrome/browser/intelligence/smart_tab_grouping/model/DEPS b/ios/chrome/browser/intelligence/smart_tab_grouping/model/DEPS new file mode 100644 index 0000000..62a8ff6 --- /dev/null +++ b/ios/chrome/browser/intelligence/smart_tab_grouping/model/DEPS
@@ -0,0 +1,7 @@ +include_rules = [ + "+ios/chrome/browser/intelligence/proto_wrappers", + "+ios/chrome/browser/optimization_guide/model", + "+ios/chrome/browser/optimization_guide/mojom", + "+ios/chrome/browser/signin/model/identity_manager_factory.h", + "+mojo/public/cpp/base/proto_wrapper.h", +]
diff --git a/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.h b/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.h new file mode 100644 index 0000000..a0d851b --- /dev/null +++ b/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.h
@@ -0,0 +1,105 @@ +// 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 IOS_CHROME_BROWSER_INTELLIGENCE_SMART_TAB_GROUPING_MODEL_SMART_TAB_GROUPING_SERVICE_IMPL_H_ +#define IOS_CHROME_BROWSER_INTELLIGENCE_SMART_TAB_GROUPING_MODEL_SMART_TAB_GROUPING_SERVICE_IMPL_H_ + +#import "base/scoped_observation.h" +#import "components/optimization_guide/core/model_quality/model_quality_log_entry.h" +#import "components/signin/public/identity_manager/identity_manager.h" +#import "ios/chrome/browser/optimization_guide/mojom/smart_tab_grouping_service.mojom.h" +#import "mojo/public/cpp/bindings/pending_receiver.h" +#import "mojo/public/cpp/bindings/receiver.h" + +class OptimizationGuideService; +class WebStateList; +class PersistTabContextBrowserAgent; +@class IosSmartTabGroupingRequestWrapper; + +namespace optimization_guide { +struct OptimizationGuideModelExecutionResult; +namespace proto { +class IosSmartTabGroupingRequest; +} // namespace proto +} // namespace optimization_guide + +namespace ai { + +// Implementation of ai::mojom::SmartTabGroupingService. +class SmartTabGroupingServiceImpl : public ai::mojom::SmartTabGroupingService, + public signin::IdentityManager::Observer { + public: + SmartTabGroupingServiceImpl( + mojo::PendingReceiver<ai::mojom::SmartTabGroupingService> receiver, + WebStateList* web_state_list, + PersistTabContextBrowserAgent* persist_tab_context_browser_agent); + ~SmartTabGroupingServiceImpl() override; + + SmartTabGroupingServiceImpl(const SmartTabGroupingServiceImpl&) = delete; + SmartTabGroupingServiceImpl& operator=(const SmartTabGroupingServiceImpl&) = + delete; + + // ai::mojom::SmartTabGroupingService implementation: + void ExecuteSmartTabGroupingRequest( + ExecuteSmartTabGroupingRequestCallback request_callback) override; + + // signin::IdentityManager::Observer implementation. + void OnPrimaryAccountChanged( + const signin::PrimaryAccountChangeEvent& event_details) override; + void OnIdentityManagerShutdown( + signin::IdentityManager* /*unused*/ identity_manager) override; + + private: + // Callback for the IosSmartTabGroupingRequestWrapper. + void OnRequestWrapperCompleted( + std::unique_ptr<optimization_guide::proto::IosSmartTabGroupingRequest> + request); + + // Callback for OptimizationGuideService::ExecuteModel. + void OnSmartTabGroupingResponse( + optimization_guide::OptimizationGuideModelExecutionResult result, + std::unique_ptr<optimization_guide::ModelQualityLogEntry> entry); + + // Invokes the pending request callback with the result. + void InvokePendingCallback( + ai::mojom::SmartTabGroupingResponseResultPtr result_union); + + // Helper function to cancel pending operations and notify the caller. + void CancelPendingRequest(const std::string& error_message); + + // Optimization Guide service to execute genAI queries. + const raw_ref<OptimizationGuideService> optimization_guide_service_; + + // Receiver throughout the SmartTabGroupingService lifecycle. + mojo::Receiver<ai::mojom::SmartTabGroupingService> + smart_tab_grouping_receiver_; + + // Callback for the current request, cleared once invoked. + ExecuteSmartTabGroupingRequestCallback pending_request_callback_; + + // The list of WebStates for the current browser. + const raw_ref<WebStateList> web_state_list_; + + // The agent responsible for persisting and restoring tab context. + raw_ptr<PersistTabContextBrowserAgent> persist_tab_context_browser_agent_; + + // Pointer to the Objective-C request wrapper. + __strong IosSmartTabGroupingRequestWrapper* + smart_tab_grouping_request_wrapper_ = nil; + + // Observer for `IdentityManager`. + base::ScopedObservation<signin::IdentityManager, + signin::IdentityManager::Observer> + identity_manager_observation_{this}; + + // The identity manager that this instance uses. + const raw_ref<signin::IdentityManager> identity_manager_; + + // Weak pointer factory. + base::WeakPtrFactory<SmartTabGroupingServiceImpl> weak_ptr_factory_{this}; +}; + +} // namespace ai + +#endif // IOS_CHROME_BROWSER_INTELLIGENCE_SMART_TAB_GROUPING_MODEL_SMART_TAB_GROUPING_SERVICE_IMPL_H_
diff --git a/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.mm b/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.mm new file mode 100644 index 0000000..afed4d3f --- /dev/null +++ b/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.mm
@@ -0,0 +1,180 @@ +// 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. + +#import "ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.h" + +#import <utility> + +#import "base/functional/bind.h" +#import "base/time/time.h" +#import "components/optimization_guide/core/model_execution/feature_keys.h" +#import "components/optimization_guide/core/optimization_guide_util.h" +#import "components/optimization_guide/proto/features/ios_smart_tab_grouping.pb.h" +#import "ios/chrome/browser/intelligence/proto_wrappers/ios_smart_tab_grouping_request_wrapper.h" +#import "ios/chrome/browser/optimization_guide/model/optimization_guide_service.h" +#import "ios/chrome/browser/optimization_guide/model/optimization_guide_service_factory.h" +#import "ios/chrome/browser/shared/model/profile/profile_ios.h" +#import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h" +#import "ios/chrome/browser/signin/model/identity_manager_factory.h" +#import "ios/web/public/web_state.h" +#import "mojo/public/cpp/base/proto_wrapper.h" + +// TODO(crbug.com/459432095): Evaluate and set an appropriate timeout for Smart +// Tab Grouping. +const base::TimeDelta kSmartTabGroupingRequestTimeout = base::Seconds(15); + +namespace ai { + +SmartTabGroupingServiceImpl::SmartTabGroupingServiceImpl( + mojo::PendingReceiver<ai::mojom::SmartTabGroupingService> receiver, + WebStateList* web_state_list, + PersistTabContextBrowserAgent* persist_tab_context_browser_agent) + : optimization_guide_service_( + *OptimizationGuideServiceFactory::GetForProfile( + ProfileIOS::FromBrowserState( + web_state_list->GetActiveWebState()->GetBrowserState()))), + smart_tab_grouping_receiver_(this, std::move(receiver)), + web_state_list_(*web_state_list), + persist_tab_context_browser_agent_(persist_tab_context_browser_agent), + identity_manager_( + *IdentityManagerFactory::GetForProfile(ProfileIOS::FromBrowserState( + web_state_list->GetActiveWebState()->GetBrowserState()))) { + identity_manager_observation_.Observe(&identity_manager_.get()); +} + +SmartTabGroupingServiceImpl::~SmartTabGroupingServiceImpl() { + if (identity_manager_observation_.IsObserving()) { + identity_manager_observation_.Reset(); + } + + // Cancel any in-flight requests and clean up. + CancelPendingRequest("Service shutting down"); +} + +void SmartTabGroupingServiceImpl::ExecuteSmartTabGroupingRequest( + ExecuteSmartTabGroupingRequestCallback request_callback) { + if (pending_request_callback_) { + CancelPendingRequest( + "Request superseded by a new smart tab grouping request."); + } + pending_request_callback_ = std::move(request_callback); + + if (web_state_list_->empty()) { + CancelPendingRequest("WebStateList empty"); + return; + } + + if (smart_tab_grouping_request_wrapper_) { + smart_tab_grouping_request_wrapper_ = nil; + } + + base::OnceCallback<void( + std::unique_ptr<optimization_guide::proto::IosSmartTabGroupingRequest>)> + wrapper_completion_callback = base::BindOnce( + &SmartTabGroupingServiceImpl::OnRequestWrapperCompleted, + weak_ptr_factory_.GetWeakPtr()); + + // Instantiate and start the new wrapper to build the proto asynchronously. + smart_tab_grouping_request_wrapper_ = + [[IosSmartTabGroupingRequestWrapper alloc] + initWithWebStateList:&web_state_list_.get() + persistTabContextBrowserAgent:persist_tab_context_browser_agent_ + completionCallback:std::move(wrapper_completion_callback)]; + + if (persist_tab_context_browser_agent_) { + [smart_tab_grouping_request_wrapper_ + populateRequestFieldsAsyncFromPersistence]; + } else { + [smart_tab_grouping_request_wrapper_ + populateRequestFieldsAsyncFromWebStates]; + } +} + +void SmartTabGroupingServiceImpl::OnRequestWrapperCompleted( + std::unique_ptr<optimization_guide::proto::IosSmartTabGroupingRequest> + request) { + smart_tab_grouping_request_wrapper_ = nil; + + if (!request) { + InvokePendingCallback(ai::mojom::SmartTabGroupingResponseResult::NewError( + "Failed to populate request proto")); + return; + } + + optimization_guide_service_->ExecuteModel( + optimization_guide::ModelBasedCapabilityKey::kIosSmartTabGrouping, + std::move(*request), kSmartTabGroupingRequestTimeout, + base::BindOnce(&SmartTabGroupingServiceImpl::OnSmartTabGroupingResponse, + weak_ptr_factory_.GetWeakPtr())); +} + +void SmartTabGroupingServiceImpl::OnSmartTabGroupingResponse( + optimization_guide::OptimizationGuideModelExecutionResult result, + std::unique_ptr<optimization_guide::ModelQualityLogEntry> entry) { + if (!pending_request_callback_) { + return; + } + + ai::mojom::SmartTabGroupingResponseResultPtr result_union; + + if (result.response.has_value()) { + std::optional<optimization_guide::proto::IosSmartTabGroupingResponse> + response_proto = optimization_guide::ParsedAnyMetadata< + optimization_guide::proto::IosSmartTabGroupingResponse>( + result.response.value()); + + if (response_proto.has_value()) { + result_union = ai::mojom::SmartTabGroupingResponseResult::NewResponse( + mojo_base::ProtoWrapper(response_proto.value())); + } else { + result_union = ai::mojom::SmartTabGroupingResponseResult::NewError( + "Proto unmarshalling error"); + } + } else { + std::string error_string = + base::StrCat({"Server Model Execution Error: ", + optimization_guide_service_->ResponseForErrorCode( + static_cast<int>(result.response.error().error()))}); + result_union = + ai::mojom::SmartTabGroupingResponseResult::NewError(error_string); + } + + InvokePendingCallback(std::move(result_union)); +} + +void SmartTabGroupingServiceImpl::InvokePendingCallback( + ai::mojom::SmartTabGroupingResponseResultPtr result_union) { + CHECK(pending_request_callback_); + std::move(pending_request_callback_).Run(std::move(result_union)); +} + +void SmartTabGroupingServiceImpl::CancelPendingRequest( + const std::string& error_message) { + weak_ptr_factory_.InvalidateWeakPtrs(); + smart_tab_grouping_request_wrapper_ = nil; + + if (!pending_request_callback_) { + return; + } + + // Inform the caller of the error. + ai::mojom::SmartTabGroupingResponseResultPtr result_union = + ai::mojom::SmartTabGroupingResponseResult::NewError(error_message); + InvokePendingCallback(std::move(result_union)); +} + +#pragma mark - IdentityManagerObserverBridgeDelegate + +void SmartTabGroupingServiceImpl::OnPrimaryAccountChanged( + const signin::PrimaryAccountChangeEvent& event_details) { + CancelPendingRequest("Primary account was changed."); +} + +void SmartTabGroupingServiceImpl::OnIdentityManagerShutdown( + signin::IdentityManager* /*unused*/ identity_manager) { + identity_manager_observation_.Reset(); + CancelPendingRequest("IdentityManager shutdown."); +} + +} // namespace ai
diff --git a/ios/chrome/browser/location_bar/badge/coordinator/location_bar_badge_mediator_unittest.mm b/ios/chrome/browser/location_bar/badge/coordinator/location_bar_badge_mediator_unittest.mm index cff7f05e..2f0abfe5 100644 --- a/ios/chrome/browser/location_bar/badge/coordinator/location_bar_badge_mediator_unittest.mm +++ b/ios/chrome/browser/location_bar/badge/coordinator/location_bar_badge_mediator_unittest.mm
@@ -49,7 +49,7 @@ #import "third_party/ocmock/gtest_support.h" namespace { -NSString* kTestAccessibilityLabel = @"testBadge"; +NSString* const kTestAccessibilityLabel = @"testBadge"; } namespace {
diff --git a/ios/chrome/browser/mini_map/model/mini_map_tab_helper_unittest.mm b/ios/chrome/browser/mini_map/model/mini_map_tab_helper_unittest.mm index 0dde5aa..eb1648b 100644 --- a/ios/chrome/browser/mini_map/model/mini_map_tab_helper_unittest.mm +++ b/ios/chrome/browser/mini_map/model/mini_map_tab_helper_unittest.mm
@@ -39,14 +39,14 @@ "https://www.example.com/?q={searchTerms}"; // A link to Google SRP. -NSString* kGoogleSRPPage = @"https://www.google.com/search?q=foo"; +NSString* const kGoogleSRPPage = @"https://www.google.com/search?q=foo"; // A UL to Maps. -NSString* kMapsLink = @"https://maps.google.com/maps/foo"; +NSString* const kMapsLink = @"https://maps.google.com/maps/foo"; // A valid query parameter to mark URL valid for // MiniMapTabHelperTestMiniMapControllerFactory. -NSString* kValidQuery = @"valid=true"; +NSString* const kValidQuery = @"valid=true"; } // namespace // A Mini map factory that filters out some handled URLs based on their queries.
diff --git a/ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view.mm b/ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view.mm index 7ccbdf56..697ba76 100644 --- a/ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view.mm +++ b/ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view.mm
@@ -28,7 +28,7 @@ const CGFloat kLayoutGuideMinHeight = 12.0; // The size of the incognito symbol image. -NSInteger kIncognitoSymbolImagePointSize = 72; +constexpr NSInteger kIncognitoSymbolImagePointSize = 72; // Returns a font, scaled to the current dynamic type settings, that is suitable // for the title of the incognito page.
diff --git a/ios/chrome/browser/omnibox/coordinator/popup/DEPS b/ios/chrome/browser/omnibox/coordinator/popup/DEPS index daa56be..f4b7aa41 100644 --- a/ios/chrome/browser/omnibox/coordinator/popup/DEPS +++ b/ios/chrome/browser/omnibox/coordinator/popup/DEPS
@@ -3,6 +3,5 @@ "+ios/chrome/browser/menu/ui_bundled", "+ios/chrome/browser/sharing/ui_bundled", "+ios/chrome/browser/toolbar/ui_bundled/buttons", - "+ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h", "+third_party/omnibox_proto", ]
diff --git a/ios/chrome/browser/omnibox/eg_tests/omnibox_popup_pedal_egtest.mm b/ios/chrome/browser/omnibox/eg_tests/omnibox_popup_pedal_egtest.mm index 010e1bc..3e396e4 100644 --- a/ios/chrome/browser/omnibox/eg_tests/omnibox_popup_pedal_egtest.mm +++ b/ios/chrome/browser/omnibox/eg_tests/omnibox_popup_pedal_egtest.mm
@@ -21,8 +21,8 @@ namespace { -NSString* kDinoPedalString = @"chrome://dino"; -NSString* kDinoSearchString = @"dino game"; +NSString* const kDinoPedalString = @"chrome://dino"; +NSString* const kDinoSearchString = @"dino game"; } // namespace
diff --git a/ios/chrome/browser/omnibox/model/omnibox_autocomplete_controller.mm b/ios/chrome/browser/omnibox/model/omnibox_autocomplete_controller.mm index 6c16a0d0..4ded0b20 100644 --- a/ios/chrome/browser/omnibox/model/omnibox_autocomplete_controller.mm +++ b/ios/chrome/browser/omnibox/model/omnibox_autocomplete_controller.mm
@@ -21,6 +21,7 @@ #import "components/omnibox/browser/autocomplete_result.h" #import "components/omnibox/browser/clipboard_provider.h" #import "components/omnibox/browser/history_url_provider.h" +#import "components/omnibox/browser/lens_suggest_inputs_utils.h" #import "components/omnibox/browser/omnibox_client.h" #import "components/omnibox/browser/omnibox_popup_selection.h" #import "components/omnibox/browser/omnibox_pref_names.h" @@ -431,10 +432,7 @@ input.set_current_url(_omniboxClient->GetURL()); input.set_current_title(_omniboxClient->GetTitle()); input.set_prevent_inline_autocomplete(preventInlineAutocomplete); - if (std::optional<lens::proto::LensOverlaySuggestInputs> suggestInputs = - _omniboxClient->GetLensOverlaySuggestInputs()) { - input.set_lens_overlay_suggest_inputs(*suggestInputs); - } + [self attachSuggestInputsToAutocompleteInput:input]; [self startAutocompleteWithInput:input]; } @@ -479,11 +477,8 @@ input.set_current_url(_omniboxClient->GetURL()); input.set_current_title(_omniboxClient->GetTitle()); input.set_focus_type(metrics::OmniboxFocusType::INTERACTION_FOCUS); - // Set the lens overlay suggest inputs, if available. - if (std::optional<lens::proto::LensOverlaySuggestInputs> suggestInputs = - _omniboxClient->GetLensOverlaySuggestInputs()) { - input.set_lens_overlay_suggest_inputs(*suggestInputs); - } + [self attachSuggestInputsToAutocompleteInput:input]; + [self startAutocompleteWithInput:input]; } @@ -591,6 +586,24 @@ #pragma mark - Private +/// Attaches the client's suggest inputs if valid. +- (void)attachSuggestInputsToAutocompleteInput:(AutocompleteInput&)input { + std::optional<lens::proto::LensOverlaySuggestInputs> suggestInputs = + _omniboxClient->GetLensOverlaySuggestInputs(); + + if (!suggestInputs) { + return; + } + + if ((_omniboxPresentationContext == + OmniboxPresentationContext::kComposebox) && + !AreLensSuggestInputsReady(suggestInputs)) { + return; + } + + input.set_lens_overlay_suggest_inputs(*suggestInputs); +} + /// Wraps the suggestions and send them to the delegate. - (void)updateWithSortedResults:(const AutocompleteResult&)results { NSArray<id<AutocompleteSuggestionGroup>>* suggestionGroups =
diff --git a/ios/chrome/browser/omnibox/ui/popup/DEPS b/ios/chrome/browser/omnibox/ui/popup/DEPS index 3972b9e..6f56e22 100644 --- a/ios/chrome/browser/omnibox/ui/popup/DEPS +++ b/ios/chrome/browser/omnibox/ui/popup/DEPS
@@ -3,5 +3,4 @@ "+ios/chrome/browser/menu/ui_bundled", "+ios/chrome/browser/sharing/ui_bundled", "+ios/chrome/browser/toolbar/ui_bundled/buttons", - "+ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h", ]
diff --git a/ios/chrome/browser/omnibox/ui/popup/omnibox_popup_view_controller.mm b/ios/chrome/browser/omnibox/ui/popup/omnibox_popup_view_controller.mm index 188be75..916b44e 100644 --- a/ios/chrome/browser/omnibox/ui/popup/omnibox_popup_view_controller.mm +++ b/ios/chrome/browser/omnibox/ui/popup/omnibox_popup_view_controller.mm
@@ -9,7 +9,6 @@ #import "base/logging.h" #import "components/favicon/core/large_icon_service.h" #import "components/omnibox/common/omnibox_features.h" -#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h" #import "ios/chrome/browser/favicon/ui_bundled/favicon_attributes_provider.h" #import "ios/chrome/browser/favicon/ui_bundled/favicon_attributes_with_payload.h" #import "ios/chrome/browser/net/model/crurl.h"
diff --git a/ios/chrome/browser/optimization_guide/mojom/BUILD.gn b/ios/chrome/browser/optimization_guide/mojom/BUILD.gn index f26d270..63f26c82 100644 --- a/ios/chrome/browser/optimization_guide/mojom/BUILD.gn +++ b/ios/chrome/browser/optimization_guide/mojom/BUILD.gn
@@ -8,6 +8,7 @@ sources = [ "ai_prototyping_service.mojom", "enhanced_calendar_service.mojom", + "smart_tab_grouping_service.mojom", "tab_organization_service.mojom", "zero_state_suggestions_service.mojom", ]
diff --git a/ios/chrome/browser/optimization_guide/mojom/smart_tab_grouping_service.mojom b/ios/chrome/browser/optimization_guide/mojom/smart_tab_grouping_service.mojom new file mode 100644 index 0000000..fd4bfe1 --- /dev/null +++ b/ios/chrome/browser/optimization_guide/mojom/smart_tab_grouping_service.mojom
@@ -0,0 +1,21 @@ +// 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. + +module ai.mojom; + +import "mojo/public/mojom/base/proto_wrapper.mojom"; + +// Result of the Smart Tab Grouping execution. +union SmartTabGroupingResponseResult { + string error; + mojo_base.mojom.ProtoWrapper response; +}; + +// Used to bridge a mojo service and execute query requests related +// to the smart tab grouping feature. +interface SmartTabGroupingService { + // Executes the Smart Tab Grouping request. + ExecuteSmartTabGroupingRequest() => + (SmartTabGroupingResponseResult result); +};
diff --git a/ios/chrome/browser/overlays/ui_bundled/infobar_banner/tailored_security/tailored_security_infobar_banner_overlay_mediator_unittest.mm b/ios/chrome/browser/overlays/ui_bundled/infobar_banner/tailored_security/tailored_security_infobar_banner_overlay_mediator_unittest.mm index d1073ee..4061eec 100644 --- a/ios/chrome/browser/overlays/ui_bundled/infobar_banner/tailored_security/tailored_security_infobar_banner_overlay_mediator_unittest.mm +++ b/ios/chrome/browser/overlays/ui_bundled/infobar_banner/tailored_security/tailored_security_infobar_banner_overlay_mediator_unittest.mm
@@ -18,7 +18,7 @@ namespace { // The size of the symbol image. -CGFloat kSymbolImagePointSize = 18.; +constexpr CGFloat kSymbolImagePointSize = 18.; // Returns the branded version of the Google shield symbol. UIImage* GetBrandedGoogleShieldSymbol() {
diff --git a/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm b/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm index ccebde8..0affce7c 100644 --- a/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm +++ b/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm
@@ -49,9 +49,9 @@ // Details of the card to be saved. constexpr NSString* kCardHolderName = @"Name"; -NSString* kValidExpirationMonth = +NSString* const kValidExpirationMonth = base::SysUTF8ToNSString(autofill::test::NextMonth()); -NSString* kValidExpirationYear = +NSString* const kValidExpirationYear = base::SysUTF8ToNSString(autofill::test::NextYear()); constexpr NSString* kCardCvc = @"123";
diff --git a/ios/chrome/browser/partial_translate/ui_bundled/partial_translate_mediator_unittest.mm b/ios/chrome/browser/partial_translate/ui_bundled/partial_translate_mediator_unittest.mm index aac041a4..aef8b71 100644 --- a/ios/chrome/browser/partial_translate/ui_bundled/partial_translate_mediator_unittest.mm +++ b/ios/chrome/browser/partial_translate/ui_bundled/partial_translate_mediator_unittest.mm
@@ -38,7 +38,7 @@ // A template for an HTML page containing a selection. // "TEMPLATE_SELECTION" can be replaced by a custom text depending on the test. -NSString* kPageHTMLTemplate = +NSString* const kPageHTMLTemplate = @"<html>" " <body>" " This text contains a <span id='selectid'>TEMPLATE_SELECTION</span>."
diff --git a/ios/chrome/browser/passwords/model/BUILD.gn b/ios/chrome/browser/passwords/model/BUILD.gn index db5a81d..fc776ea 100644 --- a/ios/chrome/browser/passwords/model/BUILD.gn +++ b/ios/chrome/browser/passwords/model/BUILD.gn
@@ -80,6 +80,8 @@ "//components/translate/core/browser", "//components/ukm", "//components/ukm/ios:ukm_url_recorder", + "//components/webauthn/ios", + "//components/webauthn/ios:features", "//google_apis", "//ios/chrome/app:tests_hook", "//ios/chrome/app/strings",
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h index f9ab58d..60ebe7c 100644 --- a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h +++ b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h
@@ -155,6 +155,9 @@ void UpdateFormManagers() override; bool IsIsolationForPasswordSitesEnabled() const override; bool IsNewTabPage() const override; + password_manager::WebAuthnCredentialsDelegate* + GetWebAuthnCredentialsDelegateForDriver( + password_manager::PasswordManagerDriver* driver) override; safe_browsing::PasswordProtectionService* GetPasswordProtectionService() const override; autofill::AutofillCrowdsourcingManager* GetAutofillCrowdsourcingManager()
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm index 77ebcf27..7b0d82f0 100644 --- a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm +++ b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm
@@ -29,10 +29,13 @@ #import "components/password_manager/core/browser/password_requirements_service.h" #import "components/password_manager/core/browser/password_sync_util.h" #import "components/password_manager/core/common/password_manager_pref_names.h" +#import "components/password_manager/ios/ios_password_manager_driver.h" #import "components/password_manager/ios/password_manager_ios_util.h" #import "components/sync/service/sync_service.h" #import "components/translate/core/browser/translate_manager.h" #import "components/ukm/ios/ukm_url_recorder.h" +#import "components/webauthn/ios/features.h" +#import "components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h" #import "ios/chrome/browser/enterprise/connectors/reporting/ios_reporting_event_router_factory.h" #import "ios/chrome/browser/passwords/model/features.h" #import "ios/chrome/browser/passwords/model/ios_chrome_account_password_store_factory.h" @@ -389,6 +392,18 @@ return false; } +password_manager::WebAuthnCredentialsDelegate* +IOSChromePasswordManagerClient::GetWebAuthnCredentialsDelegateForDriver( + password_manager::PasswordManagerDriver* driver) { + if (!base::FeatureList::IsEnabled(kIOSPasskeyModalLoginWithShim)) { + return nullptr; + } + + return IOSWebAuthnCredentialsDelegateFactory::GetFactory(bridge_.webState) + ->GetDelegateForFrame( + static_cast<IOSPasswordManagerDriver*>(driver)->web_frame_id()); +} + safe_browsing::PasswordProtectionService* IOSChromePasswordManagerClient::GetPasswordProtectionService() const { return ChromePasswordProtectionServiceFactory::GetForProfile(bridge_.profile);
diff --git a/ios/chrome/browser/passwords/model/password_controller_egtest.mm b/ios/chrome/browser/passwords/model/password_controller_egtest.mm index c3c0d7dd..bd9fc7d 100644 --- a/ios/chrome/browser/passwords/model/password_controller_egtest.mm +++ b/ios/chrome/browser/passwords/model/password_controller_egtest.mm
@@ -140,15 +140,19 @@ // Types `text` on an input field with `fieldID`. Dismisses the credential // bottom sheet if `dismissBottomSheet` is true. -void TypeTextOnField(NSString* text, - const std::string& fieldID, - bool dismissBottomSheet = false) { - [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()] - performAction:chrome_test_util::TapWebElementWithId(fieldID)]; - if (dismissBottomSheet) { - WaitForBottomSheetAndOpenKeyboard(text); - } +void TypeTextOnField(NSString* text, const std::string& fieldID) { + [ChromeEarlGrey + evaluateJavaScriptForSideEffect: + [NSString stringWithFormat:@"document.getElementById('%@').focus();", + base::SysUTF8ToNSString(fieldID)]]; TypeText(text); + // Wait for the current input field to contain the `text` (i.e. typing from + // SimulatePhysicalKeyboardEvent finished) before proceeding to next step. + [ChromeEarlGrey + waitForJavaScriptCondition: + [NSString stringWithFormat: + @"document.getElementById('%@').value.includes('%@');", + base::SysUTF8ToNSString(fieldID), text]]; } // Types the username and password on the UFF forms. @@ -159,7 +163,12 @@ // field to be focused on, which triggers the credential bottom sheet. Once // dismissed the bottom sheet isn't shown again when focusing on other login // fields, as long as the page isn't reloaded. - TypeTextOnField(username, "single_un", dismissBottomSheetOnUsername); + if (dismissBottomSheetOnUsername) { + [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()] + performAction:chrome_test_util::TapWebElementWithId("single_un")]; + WaitForBottomSheetAndOpenKeyboard(username); + } + TypeTextOnField(username, "single_un"); TypeTextOnField(password, "single_pw"); } @@ -844,8 +853,7 @@ // Simulate login. TypeTextOnField(@"test-username@test-domain.com", kFormUsername); TypeTextOnField(@"test-password", kFormPassword); - [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()] - performAction:chrome_test_util::TapWebElementWithId("submit_button")]; + [ChromeEarlGrey tapWebStateElementWithID:@"submit_button"]; // Wait for report to upload. [self waitForEnterpriseReports:1];
diff --git a/ios/chrome/browser/price_insights/ui/price_insights_cell_unittest.mm b/ios/chrome/browser/price_insights/ui/price_insights_cell_unittest.mm index a2b46d5..935c4382 100644 --- a/ios/chrome/browser/price_insights/ui/price_insights_cell_unittest.mm +++ b/ios/chrome/browser/price_insights/ui/price_insights_cell_unittest.mm
@@ -20,8 +20,8 @@ const char kUrl[] = "https://www.merchant.com/price_drop_product"; -NSString* kTitle = @"Product title"; -NSString* kVariant = @"Product variant"; +NSString* const kTitle = @"Product title"; +NSString* const kVariant = @"Product variant"; std::string kCurrency = "USD"; std::string kCountryCode = "us";
diff --git a/ios/chrome/browser/price_notifications/ui_bundled/cells/price_notifications_table_view_item.mm b/ios/chrome/browser/price_notifications/ui_bundled/cells/price_notifications_table_view_item.mm index b3686b3e..9f81c218 100644 --- a/ios/chrome/browser/price_notifications/ui_bundled/cells/price_notifications_table_view_item.mm +++ b/ios/chrome/browser/price_notifications/ui_bundled/cells/price_notifications_table_view_item.mm
@@ -41,7 +41,7 @@ const CGFloat kTrackButtonPlaceholderHeight = 28; const CGFloat kTrackButtonPlaceholderWidth = 70; // Identifier for the stop price tracking action item. -NSString* kActionMenuIdentifier = @"priceTrackingActionMenu"; +NSString* const kActionMenuIdentifier = @"priceTrackingActionMenu"; // A container for the UIView elements that will be added to the UIStackView. struct TableViewItemStackContent {
diff --git a/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm b/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm index 24779a3..68cdc578 100644 --- a/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm +++ b/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm
@@ -49,9 +49,9 @@ NSString* const kReadTitle = @"foobar"; NSString* const kReadURL = @"http://readfoobar.com"; -NSString* kPage1Title = @"Page 1 Title"; +NSString* const kPage1Title = @"Page 1 Title"; const char kPage1URL[] = "/page1"; -NSString* kPage2Title = @"Page 2 Title"; +NSString* const kPage2Title = @"Page 2 Title"; const char kPage2URL[] = "/page2"; constexpr base::TimeDelta kLongPressDuration = base::Seconds(1); constexpr base::TimeDelta kSyncActiveTimeout = base::Seconds(5);
diff --git a/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm b/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm index ea4de76e9..c379dbc 100644 --- a/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm +++ b/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm
@@ -82,10 +82,10 @@ // Error message logged when the wrong number of Enterprise Reports were // received. -NSString* kWrongNumberOfReportsErrorMessage = @"Wrong number of reports."; +NSString* const kWrongNumberOfReportsErrorMessage = @"Wrong number of reports."; // Id of the primary button in the security interstitial pages. -NSString* kPrimaryButtonID = @"primary-button"; +NSString* const kPrimaryButtonID = @"primary-button"; // Duration to wait for an enterprise security event report. constexpr base::TimeDelta kReportUploadTimeout = base::Seconds(15);
diff --git a/ios/chrome/browser/search_engines/model/search_engine_js_unittest.mm b/ios/chrome/browser/search_engines/model/search_engine_js_unittest.mm index ae1621b..024464d 100644 --- a/ios/chrome/browser/search_engines/model/search_engine_js_unittest.mm +++ b/ios/chrome/browser/search_engines/model/search_engine_js_unittest.mm
@@ -29,7 +29,7 @@ // This is for cases where no message should be sent back from Js. constexpr base::TimeDelta kWaitForJsNotReturnTimeout = base::Milliseconds(500); -NSString* kSearchableForm = +NSString* const kSearchableForm = @"<html>" @" <form id='f' action='index.html' method='get'>" @" <input type='search' name='q'>"
diff --git a/ios/chrome/browser/send_tab_to_self/model/ios_send_tab_to_self_infobar_delegate.mm b/ios/chrome/browser/send_tab_to_self/model/ios_send_tab_to_self_infobar_delegate.mm index 49c7b579..b88e72d 100644 --- a/ios/chrome/browser/send_tab_to_self/model/ios_send_tab_to_self_infobar_delegate.mm +++ b/ios/chrome/browser/send_tab_to_self/model/ios_send_tab_to_self_infobar_delegate.mm
@@ -20,7 +20,7 @@ namespace { -NSString* kSendTabToSendConclusionNotification = +NSString* const kSendTabToSendConclusionNotification = @"SendTabToSendConclusionNotification"; } // namespace
diff --git a/ios/chrome/browser/send_tab_to_self/ui/send_tab_to_self_table_view_controller.mm b/ios/chrome/browser/send_tab_to_self/ui/send_tab_to_self_table_view_controller.mm index 1c81a9e..1b2ed95 100644 --- a/ios/chrome/browser/send_tab_to_self/ui/send_tab_to_self_table_view_controller.mm +++ b/ios/chrome/browser/send_tab_to_self/ui/send_tab_to_self_table_view_controller.mm
@@ -41,7 +41,7 @@ NSString* const kSendTabToSelfModalSendButton = @"kSendTabToSelfModalSendButton"; -CGFloat kSymbolSize = 22; +constexpr CGFloat kSymbolSize = 22; } // namespace
diff --git a/ios/chrome/browser/settings/ui_bundled/content_settings/block_popups_egtest.mm b/ios/chrome/browser/settings/ui_bundled/content_settings/block_popups_egtest.mm index d54452f..91d63916 100644 --- a/ios/chrome/browser/settings/ui_bundled/content_settings/block_popups_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/content_settings/block_popups_egtest.mm
@@ -36,13 +36,14 @@ const char* kOpenedWindowUrl = "http://openedwindow"; // Page with a button that opens a new window after a short delay. -NSString* kBlockPopupsResponseTemplate = +NSString* const kBlockPopupsResponseTemplate = @"<input type=\"button\" onclick=\"setTimeout(function() {" "window.open('%@')}, 1)\" " "id=\"open-window\" " "value=\"openWindow\">"; // JavaScript that clicks that button. -NSString* kOpenPopupScript = @"document.getElementById('open-window').click()"; +NSString* const kOpenPopupScript = + @"document.getElementById('open-window').click()"; const std::string kOpenedWindowResponse = "Opened window"; // Returns matcher for the block popups settings menu button.
diff --git a/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller.mm index b8d7919..90ad3373 100644 --- a/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller.mm
@@ -39,7 +39,7 @@ BOOL openedMailTo = NO; // Notification name of changes to openedMailTo state. -NSString* kMailToInstanceChanged = @"MailToInstanceChanged"; +NSString* const kMailToInstanceChanged = @"MailToInstanceChanged"; typedef NS_ENUM(NSInteger, SectionIdentifier) { SectionIdentifierSettings = kSectionIdentifierEnumZero,
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm index 20d79ef4..32f37a5 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm
@@ -25,12 +25,12 @@ namespace { // Table view customized header heights. -CGFloat kAdvancedSettingsSectionHeaderHeightPointSize = 26.; -CGFloat kSignOutSectionHeaderHeightPointSize = 26.; -CGFloat kDefaultSectionHeaderHeightPointSize = 10.; +constexpr CGFloat kAdvancedSettingsSectionHeaderHeightPointSize = 26.; +constexpr CGFloat kSignOutSectionHeaderHeightPointSize = 26.; +constexpr CGFloat kDefaultSectionHeaderHeightPointSize = 10.; // Table view customized footer heights. -CGFloat kDefaultSectionFooterHeightPointSize = 10.; +constexpr CGFloat kDefaultSectionFooterHeightPointSize = 10.; } // namespace
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_details/password_details_table_view_controller_unittest.mm b/ios/chrome/browser/settings/ui_bundled/password/password_details/password_details_table_view_controller_unittest.mm index b3bb0fd..22f2b65 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_details/password_details_table_view_controller_unittest.mm +++ b/ios/chrome/browser/settings/ui_bundled/password/password_details/password_details_table_view_controller_unittest.mm
@@ -877,17 +877,20 @@ PasskeyCredential::Source::kGooglePasswordManager; PasskeyCredential::RpId rp_id("www.example.com"); base::Time creation_time = base::Time::Now(); + base::Time last_used_time = base::Time::Now(); PasskeyCredential hidden_passkey_credential( source, rp_id, PasskeyCredential::CredentialId({'c', 'r', 'e', 'd', '1'}), PasskeyCredential::UserId({'u', 's', 'e', 'r', '1'}), PasskeyCredential::Username("username1"), PasskeyCredential::DisplayName("display_name1"), creation_time, + last_used_time, /*hidden=*/true); PasskeyCredential passkey_credential( source, rp_id, PasskeyCredential::CredentialId({'c', 'r', 'e', 'd', '2'}), PasskeyCredential::UserId({'u', 's', 'e', 'r', '2'}), PasskeyCredential::Username("username2"), PasskeyCredential::DisplayName("display_name2"), creation_time, + last_used_time, /*hidden=*/false); NSArray<CredentialDetails*>* passkeys = @[
diff --git a/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_mediator.mm b/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_mediator.mm index 64205a5..b457fdc 100644 --- a/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_mediator.mm +++ b/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_mediator.mm
@@ -42,7 +42,7 @@ namespace { // The size of the symbol image. -CGFloat kSymbolImagePointSize = 17.; +constexpr CGFloat kSymbolImagePointSize = 17.; // List of item types. typedef NS_ENUM(NSInteger, ItemType) {
diff --git a/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_mediator_unittest.mm b/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_mediator_unittest.mm index 13cd44e7..48027db 100644 --- a/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_mediator_unittest.mm +++ b/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_mediator_unittest.mm
@@ -77,7 +77,7 @@ using password_manager::TestPasswordStore; // The size of trailing symbol icons. -NSInteger kTrailingSymbolImagePointSize = 22; +constexpr NSInteger kTrailingSymbolImagePointSize = 22; // Registers account preference that will be used for Safe Browsing. PrefService* SetPrefService() {
diff --git a/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm index 20f393cc..c5b9e75 100644 --- a/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm
@@ -165,7 +165,7 @@ const base::TimeDelta kFreshInstallTimeDelta = base::Days(1); #if BUILDFLAG(CHROMIUM_BRANDING) && !defined(NDEBUG) -NSString* kDevViewSourceKey = @"DevViewSource"; +NSString* const kDevViewSourceKey = @"DevViewSource"; #endif // BUILDFLAG(CHROMIUM_BRANDING) && !defined(NDEBUG) // Returns the branded version of the Google Services symbol.
diff --git a/ios/chrome/browser/shared/coordinator/scene/scene_state.mm b/ios/chrome/browser/shared/coordinator/scene/scene_state.mm index 1bcfda7..025313a 100644 --- a/ios/chrome/browser/shared/coordinator/scene/scene_state.mm +++ b/ios/chrome/browser/shared/coordinator/scene/scene_state.mm
@@ -20,7 +20,7 @@ namespace { // Preference key used to store which profile is current. -NSString* kIncognitoCurrentKey = @"IncognitoActive"; +NSString* const kIncognitoCurrentKey = @"IncognitoActive"; // Represents the state of the -[SceneState incognitoContentVisible] property // that is saved in session storage (and thus unknown during app startup and
diff --git a/ios/chrome/browser/shared/model/utils/first_run_test_util.mm b/ios/chrome/browser/shared/model/utils/first_run_test_util.mm index bb23ce9..a8e9e63b 100644 --- a/ios/chrome/browser/shared/model/utils/first_run_test_util.mm +++ b/ios/chrome/browser/shared/model/utils/first_run_test_util.mm
@@ -9,7 +9,7 @@ namespace { /// FirstRunRecency key, should match the one in `system_flags`. -NSString* kFirstRunRecencyKey = @"FirstRunRecency"; +NSString* const kFirstRunRecencyKey = @"FirstRunRecency"; } // namespace
diff --git a/ios/chrome/browser/shared/ui/util/image/image_util.mm b/ios/chrome/browser/shared/ui/util/image/image_util.mm index aeb74cef..f21c46a 100644 --- a/ios/chrome/browser/shared/ui/util/image/image_util.mm +++ b/ios/chrome/browser/shared/ui/util/image/image_util.mm
@@ -13,13 +13,13 @@ namespace { -NSString* kImageExtensionJPG = @"jpg"; -NSString* kImageExtensionPNG = @"png"; -NSString* kImageExtensionTIF = @"tif"; -NSString* kImageExtensionBMP = @"bmp"; -NSString* kImageExtensionGIF = @"gif"; -NSString* kImageExtensionICO = @"ico"; -NSString* kImageExtensionWebP = @"webp"; +NSString* const kImageExtensionJPG = @"jpg"; +NSString* const kImageExtensionPNG = @"png"; +NSString* const kImageExtensionTIF = @"tif"; +NSString* const kImageExtensionBMP = @"bmp"; +NSString* const kImageExtensionGIF = @"gif"; +NSString* const kImageExtensionICO = @"ico"; +NSString* const kImageExtensionWebP = @"webp"; // Returns whether `span` starts with `prefix`. template <typename T, size_t E>
diff --git a/ios/chrome/browser/sharing/ui_bundled/share_file_download_egtest.mm b/ios/chrome/browser/sharing/ui_bundled/share_file_download_egtest.mm index 1e02413..89ebbdd 100644 --- a/ios/chrome/browser/sharing/ui_bundled/share_file_download_egtest.mm +++ b/ios/chrome/browser/sharing/ui_bundled/share_file_download_egtest.mm
@@ -12,7 +12,7 @@ #import "ios/testing/earl_grey/earl_grey_test.h" #import "net/test/embedded_test_server/embedded_test_server.h" -NSString* kPNGFilename = @"chromium_logo"; +NSString* const kPNGFilename = @"chromium_logo"; namespace {
diff --git a/ios/chrome/browser/start_surface/ui_bundled/start_surface_util.mm b/ios/chrome/browser/start_surface/ui_bundled/start_surface_util.mm index 58eb11b..bb5c55db 100644 --- a/ios/chrome/browser/start_surface/ui_bundled/start_surface_util.mm +++ b/ios/chrome/browser/start_surface/ui_bundled/start_surface_util.mm
@@ -17,7 +17,7 @@ namespace { // The key to store the timestamp when the scene enters into background. -NSString* kStartSurfaceSceneEnterIntoBackgroundTime = +NSString* const kStartSurfaceSceneEnterIntoBackgroundTime = @"StartSurfaceSceneEnterIntoBackgroundTime"; } // namespace
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm b/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm index edf79e34..8c000f5 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm +++ b/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm
@@ -38,7 +38,7 @@ namespace { const char kTestEmail[] = "test@gmail.com"; -NSString* kExampleURL = @"http://example.com"; +NSString* const kExampleURL = @"http://example.com"; } // namespace
diff --git a/ios/chrome/browser/tab_switcher/tab_grid/base_grid/ui/base_grid_view_controller.mm b/ios/chrome/browser/tab_switcher/tab_grid/base_grid/ui/base_grid_view_controller.mm index 2168c55..ca998e3 100644 --- a/ios/chrome/browser/tab_switcher/tab_grid/base_grid/ui/base_grid_view_controller.mm +++ b/ios/chrome/browser/tab_switcher/tab_grid/base_grid/ui/base_grid_view_controller.mm
@@ -85,7 +85,7 @@ // create/add to a group. // TODO(crbug.com/450613202): Define a fixed point margin for different device // size support. -CGFloat kDragReorderMargin = 0.2; +constexpr CGFloat kDragReorderMargin = 0.2; // Returns the accessibility identifier to set on a GroupGridCell when // positioned at the given index.
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/grid_cell.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/grid_cell.mm index 828cb264..f35cb87 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/grid_cell.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/grid_cell.mm
@@ -28,7 +28,7 @@ namespace { // The size of symbol icons. -NSInteger kIconSymbolPointSize = 13; +constexpr NSInteger kIconSymbolPointSize = 13; // Scale of activity indicator replacing fav icon when active. const CGFloat kIndicatorScale = 0.75;
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm index 4ea56fc..4e5bf7c2 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm
@@ -34,7 +34,7 @@ namespace { // The number of sections for the pinned collection view. -NSInteger kNumberOfSectionsInPinnedCollection = 1; +constexpr NSInteger kNumberOfSectionsInPinnedCollection = 1; // Pinned cell identifier. NSString* const kCellIdentifier = @"PinnedCellIdentifier";
diff --git a/ios/chrome/browser/tabs/ui_bundled/background_tab_animation_view.mm b/ios/chrome/browser/tabs/ui_bundled/background_tab_animation_view.mm index f8da7ff..db07773 100644 --- a/ios/chrome/browser/tabs/ui_bundled/background_tab_animation_view.mm +++ b/ios/chrome/browser/tabs/ui_bundled/background_tab_animation_view.mm
@@ -17,7 +17,7 @@ const CGFloat kImageSize = 28; const CGFloat kMaxScale = 1.3; const CGFloat kMinScale = 0.7; -CGFloat kRotationAngleInRadians = 20.0 / 180 * M_PI; +constexpr CGFloat kRotationAngleInRadians = 20.0 / 180 * M_PI; } // namespace @interface BackgroundTabAnimationView ()
diff --git a/ios/chrome/browser/toolbar/ui_bundled/adaptive_toolbar_egtest.mm b/ios/chrome/browser/toolbar/ui_bundled/adaptive_toolbar_egtest.mm index a571431..02e2dc7 100644 --- a/ios/chrome/browser/toolbar/ui_bundled/adaptive_toolbar_egtest.mm +++ b/ios/chrome/browser/toolbar/ui_bundled/adaptive_toolbar_egtest.mm
@@ -45,7 +45,7 @@ const char kPageLoadedString[] = "Page loaded!"; // The title of the test infobar. -NSString* kTestInfoBarTitle = @"TestInfoBar"; +NSString* const kTestInfoBarTitle = @"TestInfoBar"; // Defines the visibility of an element, in relation to the toolbar. typedef NS_ENUM(NSInteger, ButtonVisibility) {
diff --git a/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm b/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm index d9103415..407aa6cf 100644 --- a/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm +++ b/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm
@@ -28,9 +28,9 @@ // Try to address a crash related to UIMenu and UIAction handling by UIKit // (see http://crbug.com/424069384). The fix ensures UIMenu objects have // non-empty titles and unique identifiers. -NSString* kSharedActionsMenuIdentifier = @"kSharedActionsMenuIdentifier"; -NSString* kEditActionsMenuIdentifier = @"kEditActionsMenuIdentifier"; -NSString* kDestructiveActionsMenuIdentifier = +NSString* const kSharedActionsMenuIdentifier = @"kSharedActionsMenuIdentifier"; +NSString* const kEditActionsMenuIdentifier = @"kEditActionsMenuIdentifier"; +NSString* const kDestructiveActionsMenuIdentifier = @"kDestructiveActionsMenuIdentifier"; } // namespace
diff --git a/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_mediator_unittest.mm b/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_mediator_unittest.mm index fc1a09e7..e59e036 100644 --- a/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_mediator_unittest.mm +++ b/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_mediator_unittest.mm
@@ -22,11 +22,11 @@ const double kExpectedDefaultValue = 0; // Source and target units value fields in valid format. -NSString* kValidSourceUnitValueField = @"1"; -NSString* kValidTargetUnitValueField = @"1000"; +NSString* const kValidSourceUnitValueField = @"1"; +NSString* const kValidTargetUnitValueField = @"1000"; // Source/Target unit value field in invalid format. -NSString* kInvalidUnitValueField = @"&1"; +NSString* const kInvalidUnitValueField = @"&1"; } // namespace
diff --git a/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_view_controller.mm b/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_view_controller.mm index 4ff3f7a..35eee06 100644 --- a/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_view_controller.mm +++ b/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_view_controller.mm
@@ -50,8 +50,8 @@ const CGFloat kUnitTitlePadding = 4; // Cells identifiers. -NSString* kUnitTypeCellIdentifier = @"UnitTypeCell"; -NSString* kUnitTypeFieldCellIdentifier = @"UnitTypeValueFieldCell"; +NSString* const kUnitTypeCellIdentifier = @"UnitTypeCell"; +NSString* const kUnitTypeFieldCellIdentifier = @"UnitTypeValueFieldCell"; // Source and target sections indexes. const NSInteger kSourceSection = 0;
diff --git a/ios/chrome/browser/web/model/child_window_open_by_dom_egtest.mm b/ios/chrome/browser/web/model/child_window_open_by_dom_egtest.mm index dab1727..2067a033 100644 --- a/ios/chrome/browser/web/model/child_window_open_by_dom_egtest.mm +++ b/ios/chrome/browser/web/model/child_window_open_by_dom_egtest.mm
@@ -20,8 +20,8 @@ namespace { // Test link text and ids. -NSString* kNamedWindowLink = @"openWindowWithName"; -NSString* kUnnamedWindowLink = @"openWindowNoName"; +NSString* const kNamedWindowLink = @"openWindowWithName"; +NSString* const kUnnamedWindowLink = @"openWindowNoName"; // Web view text that indicates window's closed state. const char kWindow2NeverOpen[] = "window2.closed: never opened";
diff --git a/ios/chrome/browser/web/model/error_page_util_unittest.mm b/ios/chrome/browser/web/model/error_page_util_unittest.mm index 8809a209..cc77a4fd 100644 --- a/ios/chrome/browser/web/model/error_page_util_unittest.mm +++ b/ios/chrome/browser/web/model/error_page_util_unittest.mm
@@ -21,7 +21,7 @@ // URL string passed from ios/web layer to ios/chrome and rendered on the error // page. -NSString* kTestUrl = @"https://chromium.test/"; +NSString* const kTestUrl = @"https://chromium.test/"; // Returns string for the given error code. NSString* ErrorAsString(int net_error) {
diff --git a/ios/chrome/browser/web/model/forms_egtest.mm b/ios/chrome/browser/web/model/forms_egtest.mm index 310a9f8..20984186 100644 --- a/ios/chrome/browser/web/model/forms_egtest.mm +++ b/ios/chrome/browser/web/model/forms_egtest.mm
@@ -42,7 +42,7 @@ constexpr char kGenericText[] = "A generic page"; // Label for the button in the form. -NSString* kSubmitButtonLabel = @"submit"; +NSString* const kSubmitButtonLabel = @"submit"; // Html form template with a submission button named "submit". constexpr char kFormHtmlTemplate[] =
diff --git a/ios/chrome/browser/web/model/navigation_egtest.mm b/ios/chrome/browser/web/model/navigation_egtest.mm index 7c3ee58..4ca1052 100644 --- a/ios/chrome/browser/web/model/navigation_egtest.mm +++ b/ios/chrome/browser/web/model/navigation_egtest.mm
@@ -55,8 +55,8 @@ NSString* const kGoBackTwoID = @"go-back-2"; // URLs and labels for testWindowLocation* tests. -NSString* kHashChangeWithHistoryLabel = @"hashChangedWithHistory"; -NSString* kHashChangeWithoutHistoryLabel = @"hashChangedWithoutHistory"; +NSString* const kHashChangeWithHistoryLabel = @"hashChangedWithHistory"; +NSString* const kHashChangeWithoutHistoryLabel = @"hashChangedWithoutHistory"; const char kPage1URL[] = "/page1/"; const char kHashChangedWithHistoryURL[] = "/page1/#hashChangedWithHistory"; const char kHashChangedWithoutHistoryURL[] =
diff --git a/ios/chrome/browser/web_selection/model/web_selection_java_script_feature_unittest.mm b/ios/chrome/browser/web_selection/model/web_selection_java_script_feature_unittest.mm index e1a6c33..3ef9a03 100644 --- a/ios/chrome/browser/web_selection/model/web_selection_java_script_feature_unittest.mm +++ b/ios/chrome/browser/web_selection/model/web_selection_java_script_feature_unittest.mm
@@ -23,7 +23,7 @@ #import "testing/platform_test.h" namespace { -NSString* kPageHTML = +NSString* const kPageHTML = @"<html>" " <body>" " This text contains a <span id='selectid'>selection</span>."
diff --git a/ios/chrome/browser/web_selection/model/web_selection_tab_helper_unittest.mm b/ios/chrome/browser/web_selection/model/web_selection_tab_helper_unittest.mm index dea83bf..7764ebfb 100644 --- a/ios/chrome/browser/web_selection/model/web_selection_tab_helper_unittest.mm +++ b/ios/chrome/browser/web_selection/model/web_selection_tab_helper_unittest.mm
@@ -23,7 +23,7 @@ #import "testing/platform_test.h" namespace { -NSString* kPageHTML = +NSString* const kPageHTML = @"<html>" " <body>" " This text contains a <span id='selectid'>selection</span>." @@ -38,7 +38,7 @@ " </body>" "</html>"; -NSString* kPage2HTML = +NSString* const kPage2HTML = @"<html>" " <body>" " This text contains a <span id='selectid'>selection2</span>."
diff --git a/ios/chrome/browser/welcome_back/coordinator/BUILD.gn b/ios/chrome/browser/welcome_back/coordinator/BUILD.gn index 4b35cb3..960634e5 100644 --- a/ios/chrome/browser/welcome_back/coordinator/BUILD.gn +++ b/ios/chrome/browser/welcome_back/coordinator/BUILD.gn
@@ -16,11 +16,12 @@ deps = [ "//base", "//components/feature_engagement/public", - "//components/password_manager/core/browser", "//ios/chrome/app/strings:ios_strings_grit", "//ios/chrome/browser/feature_engagement/model", "//ios/chrome/browser/first_run/public:best_features_item", "//ios/chrome/browser/first_run/ui_bundled:features", + "//ios/chrome/browser/first_run/ui_bundled:screen_delegate", + "//ios/chrome/browser/first_run/ui_bundled/best_features/coordinator", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/profile",
diff --git a/ios/chrome/browser/welcome_back/coordinator/DEPS b/ios/chrome/browser/welcome_back/coordinator/DEPS index f476486..22cc9f60 100644 --- a/ios/chrome/browser/welcome_back/coordinator/DEPS +++ b/ios/chrome/browser/welcome_back/coordinator/DEPS
@@ -4,4 +4,5 @@ "+ios/chrome/browser/first_run/ui_bundled/best_features", "+ios/chrome/browser/first_run/ui_bundled/features.h", "+ios/chrome/browser/signin/model", + "+ios/chrome/browser/first_run/ui_bundled/first_run_screen_delegate.h", ]
diff --git a/ios/chrome/browser/welcome_back/coordinator/welcome_back_coordinator.mm b/ios/chrome/browser/welcome_back/coordinator/welcome_back_coordinator.mm index 7f9f292..66ca011 100644 --- a/ios/chrome/browser/welcome_back/coordinator/welcome_back_coordinator.mm +++ b/ios/chrome/browser/welcome_back/coordinator/welcome_back_coordinator.mm
@@ -4,38 +4,44 @@ #import "ios/chrome/browser/welcome_back/coordinator/welcome_back_coordinator.h" +#import <UIKit/UIKit.h> + #import "components/feature_engagement/public/event_constants.h" #import "components/feature_engagement/public/tracker.h" -#import "components/password_manager/core/browser/password_manager_util.h" #import "ios/chrome/browser/feature_engagement/model/tracker_factory.h" #import "ios/chrome/browser/first_run/public/best_features_item.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" +#import "ios/chrome/browser/first_run/ui_bundled/best_features/coordinator/best_features_screen_detail_coordinator.h" +#import "ios/chrome/browser/first_run/ui_bundled/first_run_screen_delegate.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" #import "ios/chrome/browser/shared/public/commands/welcome_back_promo_commands.h" +#import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/authentication_service_factory.h" +#import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/welcome_back/coordinator/welcome_back_mediator.h" #import "ios/chrome/browser/welcome_back/model/features.h" -#import "ios/chrome/browser/welcome_back/model/welcome_back_prefs.h" #import "ios/chrome/browser/welcome_back/ui/welcome_back_action_handler.h" +#import "ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.h" #import "ios/chrome/common/ui/confirmation_alert/confirmation_alert_action_handler.h" -#import "ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_coordinator.h" @interface WelcomeBackCoordinator () <ConfirmationAlertActionHandler, - WelcomeBackActionHandler> + WelcomeBackActionHandler, + FirstRunScreenDelegate, + UINavigationControllerDelegate, + UIAdaptivePresentationControllerDelegate> @end @implementation WelcomeBackCoordinator { // Welcome Back mediator. WelcomeBackMediator* _mediator; + // Welcome Back view controller. + WelcomeBackViewController* _viewController; // Base navigation controller. UINavigationController* _navigationController; - // The InstructionsBottomSheetCoordinator. - InstructionsBottomSheetCoordinator* _detailScreenCoordinator; - // Whether the user has tapped one of the Welcome Back items. - BOOL _itemTapped; + // The BestFeaturesScreenDetail coordinator. + BestFeaturesScreenDetailCoordinator* _detailScreenCoordinator; } #pragma mark - ChromeCoordinator @@ -44,32 +50,51 @@ ProfileIOS* profile = self.profile->GetOriginalProfile(); AuthenticationService* authenticationService = AuthenticationServiceFactory::GetForProfile(profile); - - _navigationController = - [[UINavigationController alloc] initWithNavigationBarClass:nil - toolbarClass:nil]; + ChromeAccountManagerService* accountManagerService = + ChromeAccountManagerServiceFactory::GetForProfile(profile); _mediator = [[WelcomeBackMediator alloc] initWithAuthenticationService:authenticationService - accountManagerService:ChromeAccountManagerServiceFactory:: - GetForProfile(profile)]; + accountManagerService:accountManagerService]; - // `kAutofillPasswordsInOtherApps` has been used if CPE is enabled on startup, - // so remove the feature from the eligible features. - PrefService* localState = GetApplicationContext()->GetLocalState(); - if (password_manager_util::IsCredentialProviderEnabledOnStartup(localState)) { - MarkWelcomeBackFeatureUsed( - BestFeaturesItemType::kAutofillPasswordsInOtherApps); - } + _viewController = [[WelcomeBackViewController alloc] init]; + _viewController.actionHandler = self; + _viewController.welcomeBackActionHandler = self; - if (GetWelcomeBackEligibleItems().size() < 2) { - [self hidePromo]; - } else { - // TODO(crbug.com/407963758): Implement the Welcome Back Half Sheet view. - } + _mediator.consumer = _viewController; + + _navigationController = [[UINavigationController alloc] + initWithRootViewController:_viewController]; + _navigationController.navigationBarHidden = YES; + _navigationController.delegate = self; + _navigationController.presentationController.delegate = self; + + UISheetPresentationController* sheetController = + _navigationController.sheetPresentationController; + + // Set both possible detents from the start. + sheetController.detents = @[ + _viewController.preferredHeightDetent, + [UISheetPresentationControllerDetent largeDetent] + ]; + + [self.baseViewController presentViewController:_navigationController + animated:YES + completion:nil]; } - (void)stop { + // Dismiss the presented view controller. + if (_navigationController.presentingViewController && + !_navigationController.isBeingDismissed) { + [_navigationController.presentingViewController + dismissViewControllerAnimated:YES + completion:nil]; + } + + // Clean up references. + _viewController = nil; + _navigationController = nil; [_mediator disconnect]; _mediator = nil; } @@ -85,24 +110,63 @@ - (void)didTapBestFeatureItem:(BestFeaturesItem*)item { feature_engagement::TrackerFactory::GetForProfile(self.profile) ->NotifyEvent(feature_engagement::events::kIOSWelcomeBackPromoUsed); - _itemTapped = YES; - _detailScreenCoordinator = [[InstructionsBottomSheetCoordinator alloc] - initWithBaseViewController:_navigationController - browser:self.browser - title:item.title - steps:item.instructionSteps]; + // Ensure the sheet is at the large detent. + [_navigationController.sheetPresentationController animateChanges:^{ + _navigationController.sheetPresentationController.selectedDetentIdentifier = + UISheetPresentationControllerDetentIdentifierLarge; + }]; + _detailScreenCoordinator = [[BestFeaturesScreenDetailCoordinator alloc] + initWithBaseNavigationViewController:_navigationController + browser:self.browser + bestFeaturesItem:item]; + _detailScreenCoordinator.delegate = self; [_detailScreenCoordinator start]; } +#pragma mark - FirstRunScreenDelegate + +- (void)screenWillFinishPresenting { + // First dismiss the best feature detail view. + [_navigationController.presentingViewController + dismissViewControllerAnimated:YES + completion:nil]; + [_detailScreenCoordinator stop]; + _detailScreenCoordinator = nil; + // Clean the promo. + [self hidePromo]; +} + +#pragma mark - UINavigationControllerDelegate + +- (void)navigationController:(UINavigationController*)navigationController + willShowViewController:(UIViewController*)viewController + animated:(BOOL)animated { + BOOL isWelcomeBackViewController = + [viewController isKindOfClass:[WelcomeBackViewController class]]; + // When navigating back to the welcome back screen from a feature detail + // screen. + if (isWelcomeBackViewController && _detailScreenCoordinator) { + _navigationController.navigationBarHidden = YES; + [_detailScreenCoordinator stop]; + _detailScreenCoordinator = nil; + } +} + +#pragma mark - UIAdaptivePresentationControllerDelegate + +- (void)presentationControllerDidDismiss: + (UIPresentationController*)presentationController { + [self hidePromo]; +} + #pragma mark - Private -// Dismisses the feature. +// Dismisses the promo by sending a command. - (void)hidePromo { id<WelcomeBackPromoCommands> handler = HandlerForProtocol( self.browser->GetCommandDispatcher(), WelcomeBackPromoCommands); - [handler hideWelcomeBackPromo]; }
diff --git a/ios/chrome/browser/welcome_back/ui/BUILD.gn b/ios/chrome/browser/welcome_back/ui/BUILD.gn index e5b5768..a96b6ff4 100644 --- a/ios/chrome/browser/welcome_back/ui/BUILD.gn +++ b/ios/chrome/browser/welcome_back/ui/BUILD.gn
@@ -8,6 +8,8 @@ "welcome_back_display_handler.h", "welcome_back_display_handler.mm", "welcome_back_screen_consumer.h", + "welcome_back_view_controller.h", + "welcome_back_view_controller.mm", ] public_deps = [ "//ios/chrome/browser/promos_manager/ui_bundled:promos", @@ -15,8 +17,17 @@ ] deps = [ "//components/feature_engagement/public", + "//ios/chrome/app/strings", + "//ios/chrome/browser/first_run/public:best_features_item", + "//ios/chrome/browser/first_run/ui_bundled/best_features/ui", "//ios/chrome/browser/promos_manager/model:types", + "//ios/chrome/browser/shared/ui/list_model", + "//ios/chrome/browser/shared/ui/symbols", + "//ios/chrome/browser/shared/ui/table_view:utils", "//ios/chrome/browser/welcome_back/resources", + "//ios/chrome/common/ui/button_stack", + "//ios/chrome/common/ui/colors", + "//ios/chrome/common/ui/table_view:cells_constants", ] frameworks = [ "Foundation.framework",
diff --git a/ios/chrome/browser/welcome_back/ui/DEPS b/ios/chrome/browser/welcome_back/ui/DEPS index 87143a57d..51c395a 100644 --- a/ios/chrome/browser/welcome_back/ui/DEPS +++ b/ios/chrome/browser/welcome_back/ui/DEPS
@@ -1,3 +1,5 @@ include_rules = [ "+ios/chrome/browser/promos_manager/model", + "+ios/chrome/browser/first_run/public/best_features_item.h", + "+ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.h", ]
diff --git a/ios/chrome/browser/welcome_back/ui/welcome_back_screen_consumer.h b/ios/chrome/browser/welcome_back/ui/welcome_back_screen_consumer.h index 897f717..23a1a6cb 100644 --- a/ios/chrome/browser/welcome_back/ui/welcome_back_screen_consumer.h +++ b/ios/chrome/browser/welcome_back/ui/welcome_back_screen_consumer.h
@@ -6,6 +6,7 @@ #define IOS_CHROME_BROWSER_WELCOME_BACK_UI_WELCOME_BACK_SCREEN_CONSUMER_H_ #import <Foundation/Foundation.h> +#import <UIKit/UIKit.h> @class BestFeaturesItem;
diff --git a/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.h b/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.h new file mode 100644 index 0000000..532d888e --- /dev/null +++ b/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.h
@@ -0,0 +1,23 @@ +// 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 IOS_CHROME_BROWSER_WELCOME_BACK_UI_WELCOME_BACK_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_WELCOME_BACK_UI_WELCOME_BACK_VIEW_CONTROLLER_H_ + +#import "ios/chrome/browser/welcome_back/ui/welcome_back_screen_consumer.h" +#import "ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h" + +@protocol WelcomeBackActionHandler; + +// View controller that presents a half-sheet UI displaying the Welcome Back +// promo. +@interface WelcomeBackViewController + : ConfirmationAlertViewController <WelcomeBackScreenConsumer> + +@property(nonatomic, weak) id<WelcomeBackActionHandler> + welcomeBackActionHandler; + +@end + +#endif // IOS_CHROME_BROWSER_WELCOME_BACK_UI_WELCOME_BACK_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.mm b/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.mm new file mode 100644 index 0000000..18034cf --- /dev/null +++ b/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.mm
@@ -0,0 +1,309 @@ +// 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. + +#import "ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.h" + +#import <UIKit/UIKit.h> + +#import "ios/chrome/browser/first_run/public/best_features_item.h" +#import "ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.h" +#import "ios/chrome/browser/shared/ui/list_model/list_model.h" +#import "ios/chrome/browser/shared/ui/symbols/symbols.h" +#import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" +#import "ios/chrome/browser/welcome_back/ui/welcome_back_action_handler.h" +#import "ios/chrome/common/ui/button_stack/button_stack_configuration.h" +#import "ios/chrome/common/ui/colors/semantic_color_names.h" +#import "ios/chrome/common/ui/table_view/table_view_cells_constants.h" +#import "ios/chrome/grit/ios_strings.h" +#import "ui/base/l10n/l10n_util.h" + +namespace { + +typedef NS_ENUM(NSInteger, SectionIdentifier) { + SectionIdentifierFeatures, + // Add other features here if needed. +}; + +// Size of the icon image view. +constexpr CGFloat kIconSize = 45.0f; +// Side length for the custom favicon. +constexpr CGFloat kCustomFaviconSideLength = 52.0f; + +// Spacing Constants +constexpr CGFloat kSpacingBeforeImageNoNav = 24.0f; +constexpr CGFloat kSpacingAfterImage = 16.0f; +constexpr CGFloat kTableViewHorizontalPadding = 6.0f; + +} // namespace + +@interface WelcomeBackViewController () <UITableViewDelegate> +@end + +@implementation WelcomeBackViewController { + // List of items to display. + NSArray<BestFeaturesItem*>* _welcomeBackItems; + // Table view displaying a Welcome Back Item in each row. + UITableView* _tableView; + // Data source for the table view. + UITableViewDiffableDataSource<NSNumber*, BestFeaturesItem*>* _dataSource; + // Height constraint for the table view. + NSLayoutConstraint* _tableViewHeightConstraint; + // The title string. + NSString* _title; + // The user's avatar. + UIImage* _userAvatar; + // Reference to the subtitle view to apply correct constraints. + UITextView* _subtitleView; +} + +#pragma mark - UIViewController + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + // Ensure the sheet is at the correct custom detent. + if (self.navigationController.sheetPresentationController) { + [self.navigationController.sheetPresentationController animateChanges:^{ + self.navigationController.sheetPresentationController + .selectedDetentIdentifier = @"preferred_height"; + }]; + } +} + +- (void)viewDidLoad { + // Configure the strings and layout. + self.titleString = _title; + self.subtitleString = l10n_util::GetNSString(IDS_IOS_WELCOME_BACK_SUBTITLE); + + // Create the table view. + _tableView = [self createTableView]; + _dataSource = [self createAndFillDataSource]; + _tableView.dataSource = _dataSource; + self.underTitleView = _tableView; + + // Set up the action button. + self.configuration.primaryActionString = + l10n_util::GetNSString(IDS_IOS_WELCOME_BACK_KEEP_BROWSING_BUTTON); + + // Configure the title style. + self.titleTextStyle = UIFontTextStyleTitle2; + + // Configure image. + if (_userAvatar) { + self.aboveTitleView = [self createCompositeAvatarImage]; + } else { +#if BUILDFLAG(IOS_USE_BRANDED_SYMBOLS) + UIImage* logo = MakeSymbolMulticolor( + CustomSymbolWithPointSize(kMulticolorChromeballSymbol, kIconSize)); +#else + UIImage* logo = CustomSymbolWithPointSize(kChromeProductSymbol, kIconSize); +#endif // BUILDFLAG(IOS_USE_BRANDED_SYMBOLS) + self.image = logo; + self.imageBackgroundColor = [UIColor colorNamed:kBackgroundColor]; + self.imageEnclosedWithShadowWithoutBadge = YES; + self.customFaviconSideLength = kCustomFaviconSideLength; + self.customSpacingAfterImage = kSpacingAfterImage; + self.imageEnclosedWithShadowAndBadge = NO; + } + + self.imageHasFixedSize = YES; + self.customSpacingBeforeImageIfNoNavigationBar = kSpacingBeforeImageNoNav; + + // Configure layout preferences. + self.showDismissBarButton = NO; + self.topAlignedLayout = YES; + self.scrollEnabled = YES; + + [super viewDidLoad]; + + _tableViewHeightConstraint = + [_tableView.heightAnchor constraintEqualToConstant:0]; + + [NSLayoutConstraint activateConstraints:@[ + _tableViewHeightConstraint, + [_tableView.leadingAnchor + constraintEqualToAnchor:self.contentView.leadingAnchor + constant:kTableViewHorizontalPadding], + [_tableView.trailingAnchor + constraintEqualToAnchor:self.contentView.trailingAnchor + constant:-kTableViewHorizontalPadding], + ]]; + + // Initial height update. + [self.view layoutIfNeeded]; + [self updateTableViewHeightConstraint]; +} + +- (void)viewWillLayoutSubviews { + [super viewWillLayoutSubviews]; + [self updateTableViewHeightConstraint]; + __weak __typeof(self) weakSelf = self; + [weakSelf.sheetPresentationController animateChanges:^{ + [weakSelf.sheetPresentationController invalidateDetents]; + }]; +} + +#pragma mark - ConfirmationAlertViewController + +- (void)customizeSubtitle:(UITextView*)subtitle { + [super customizeSubtitle:subtitle]; + // Keep a reference to the subtitle view to apply custom layout. + _subtitleView = subtitle; + _subtitleView.translatesAutoresizingMaskIntoConstraints = NO; + self.subtitleTextStyle = UIFontTextStyleSubheadline; +} + +#pragma mark - WelcomeBackScreenConsumer + +- (void)setWelcomeBackItems:(NSArray<BestFeaturesItem*>*)items { + _welcomeBackItems = [items copy]; +} + +- (void)setTitle:(NSString*)title { + _title = [title copy]; +} + +- (void)setAvatar:(UIImage*)userAvatar { + _userAvatar = userAvatar; +} + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView*)tableView + didSelectRowAtIndexPath:(NSIndexPath*)indexPath { + [_tableView deselectRowAtIndexPath:indexPath animated:YES]; +} + +- (void)tableView:(UITableView*)tableView + performPrimaryActionForRowAtIndexPath:(NSIndexPath*)indexPath { + BestFeaturesItem* item = [_dataSource itemIdentifierForIndexPath:indexPath]; + if (!item) { + return; + } + + [self.welcomeBackActionHandler didTapBestFeatureItem:item]; +} + +#pragma mark - Private + +// Creates a composite image with the user's avatar centered over the confetti +// background. +- (UIView*)createCompositeAvatarImage { + UIImage* confettiImage = [UIImage imageNamed:@"confetti_burst_frame"]; + + UIImageView* compositeImageView = + [[UIImageView alloc] initWithImage:confettiImage]; + compositeImageView.translatesAutoresizingMaskIntoConstraints = NO; + + UIImageView* avatarImageView = + [[UIImageView alloc] initWithImage:_userAvatar]; + + avatarImageView.frame = CGRectMake( + (confettiImage.size.width - kIconSize) / 2.0, + (confettiImage.size.height - kIconSize) / 2.0, kIconSize, kIconSize); + + avatarImageView.layer.cornerRadius = kIconSize / 2.0f; + avatarImageView.clipsToBounds = YES; + avatarImageView.contentMode = UIViewContentModeScaleAspectFill; + + [compositeImageView addSubview:avatarImageView]; + + UIView* containerView = [[UIView alloc] init]; + containerView.translatesAutoresizingMaskIntoConstraints = NO; + + [containerView addSubview:compositeImageView]; + + [NSLayoutConstraint activateConstraints:@[ + [compositeImageView.leadingAnchor + constraintEqualToAnchor:containerView.leadingAnchor], + [compositeImageView.trailingAnchor + constraintEqualToAnchor:containerView.trailingAnchor], + [compositeImageView.topAnchor + constraintEqualToAnchor:containerView.topAnchor + constant:kSpacingBeforeImageNoNav], + [compositeImageView.bottomAnchor + constraintEqualToAnchor:containerView.bottomAnchor + constant:-kSpacingAfterImage] + ]]; + + return containerView; +} + +// Creates the table view. +- (UITableView*)createTableView { + UITableView* tableView = + [[UITableView alloc] initWithFrame:CGRectZero + style:UITableViewStylePlain]; + tableView.translatesAutoresizingMaskIntoConstraints = NO; + tableView.delegate = self; + tableView.separatorInsetReference = UITableViewSeparatorInsetFromCellEdges; + tableView.showsVerticalScrollIndicator = NO; + tableView.scrollEnabled = NO; + + // Remove separators for all but the last cell. + tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; + tableView.accessibilityIdentifier = + @"WelcomeBackTableViewAccessibilityIdentifier"; + + RegisterTableViewCell<BestFeaturesCell>(tableView); + + return tableView; +} + +// Creates the data source for the table view. +- (UITableViewDiffableDataSource<NSNumber*, BestFeaturesItem*>*) + createAndFillDataSource { + CHECK(_welcomeBackItems); + __weak __typeof(self) weakSelf = self; + UITableViewDiffableDataSource<NSNumber*, BestFeaturesItem*>* dataSource = + [[UITableViewDiffableDataSource alloc] + initWithTableView:_tableView + cellProvider:^UITableViewCell*( + UITableView* view, NSIndexPath* indexPath, + BestFeaturesItem* itemIdentifier) { + return [weakSelf cellForTableView:view + indexPath:indexPath + itemIdentifier:itemIdentifier]; + }]; + + NSDiffableDataSourceSnapshot<NSNumber*, BestFeaturesItem*>* snapshot = + [[NSDiffableDataSourceSnapshot alloc] init]; + [snapshot appendSectionsWithIdentifiers:@[ @(SectionIdentifierFeatures) ]]; + [snapshot appendItemsWithIdentifiers:_welcomeBackItems + intoSectionWithIdentifier:@(SectionIdentifierFeatures)]; + + [dataSource applySnapshot:snapshot animatingDifferences:NO]; + + return dataSource; +} + +// Configures the table view cells. +- (UITableViewCell*)cellForTableView:(UITableView*)tableView + indexPath:(NSIndexPath*)indexPath + itemIdentifier:(BestFeaturesItem*)itemIdentifier { + BestFeaturesCell* cell = DequeueTableViewCell<BestFeaturesCell>(tableView); + [cell setBestFeaturesItem:itemIdentifier]; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + + // Removes the last cell separator. + NSInteger lastSectionIndex = [tableView numberOfSections] - 1; + NSInteger lastRowIndex = + [tableView numberOfRowsInSection:lastSectionIndex] - 1; + if (indexPath.section == lastSectionIndex && indexPath.row == lastRowIndex) { + cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, CGFLOAT_MAX); + } + + return cell; +} + +// Updates the tableView's height constraint based on its content size. +// This is necessary because scrolling is disabled. +- (void)updateTableViewHeightConstraint { + [_tableView layoutIfNeeded]; + CGFloat newHeight = _tableView.contentSize.height; + if (_tableViewHeightConstraint.constant != newHeight) { + _tableViewHeightConstraint.constant = newHeight; + } +} + +@end
diff --git a/ios/chrome/common/ntp_tile/ntp_tile.mm b/ios/chrome/common/ntp_tile/ntp_tile.mm index ba64f63..e90d8a6 100644 --- a/ios/chrome/common/ntp_tile/ntp_tile.mm +++ b/ios/chrome/common/ntp_tile/ntp_tile.mm
@@ -5,15 +5,15 @@ #import "ios/chrome/common/ntp_tile/ntp_tile.h" namespace { -NSString* kTitleKey = @"title"; -NSString* kURLKey = @"URL"; -NSString* kfaviconFileNameKey = @"faviconFileName"; -NSString* kFallbackTextColorKey = @"fallbackTextColor"; -NSString* kFallbackBackgroundColorKey = @"fallbackBackgroundColor"; -NSString* kFallbackIsDefaultColorKey = @"fallbackIsDefaultColor"; -NSString* kFallbackMonogram = @"fallbackMonogram"; -NSString* kFaviconFetched = @"faviconFetched"; -NSString* kPosition = @"position"; +NSString* const kTitleKey = @"title"; +NSString* const kURLKey = @"URL"; +NSString* const kfaviconFileNameKey = @"faviconFileName"; +NSString* const kFallbackTextColorKey = @"fallbackTextColor"; +NSString* const kFallbackBackgroundColorKey = @"fallbackBackgroundColor"; +NSString* const kFallbackIsDefaultColorKey = @"fallbackIsDefaultColor"; +NSString* const kFallbackMonogram = @"fallbackMonogram"; +NSString* const kFaviconFetched = @"faviconFetched"; +NSString* const kPosition = @"position"; } // namespace @implementation NTPTile
diff --git a/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h b/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h index 26f5b99d..dd381f6 100644 --- a/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h +++ b/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h
@@ -50,10 +50,6 @@ // the view is loaded. @property(nonatomic, copy) UIColor* mainBackgroundColor; -// The navigation bar title view. Nil if not needed. If needed, must be set -// before the view is loaded. -@property(nonatomic, strong) UIView* titleView; - // The view displayed above titles and subtitles, but under the navigation bar // and the image view. Nil if not needed. If needed, must be set before the view // is loaded.
diff --git a/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.mm b/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.mm index b53701a..22420b10 100644 --- a/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.mm +++ b/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.mm
@@ -380,10 +380,6 @@ UINavigationItem* navigationItem = [[UINavigationItem alloc] init]; - if (self.titleView) { - navigationItem.titleView = self.titleView; - } - if (self.showDismissBarButton) { UIBarButtonItem* dismissButton; if (self.customDismissBarButtonImage) { @@ -570,7 +566,7 @@ } - (BOOL)hasNavigationBar { - return self.showDismissBarButton || self.titleView; + return self.showDismissBarButton; } // Helper to create the stack view.
diff --git a/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_coordinator.mm b/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_coordinator.mm index 52ef459f3..641a9bf 100644 --- a/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_coordinator.mm +++ b/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_coordinator.mm
@@ -15,6 +15,8 @@ @implementation InstructionsBottomSheetCoordinator { // The view controller for this coordinator. InstructionsBottomSheetViewController* _viewController; + // The navigation controller containing the instructions. + UINavigationController* _navigationController; // The title of the bottom sheet. NSString* _title; // The instruction steps to be displayed. @@ -36,24 +38,31 @@ #pragma mark - Chrome Coordinator - (void)start { - [super start]; - _viewController = [[InstructionsBottomSheetViewController alloc] initWithTitle:_title instructions:_steps]; _viewController.actionHandler = self; + _navigationController = [[UINavigationController alloc] + initWithRootViewController:_viewController]; + + _viewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemClose + target:self + action:@selector(stop)]; + self.baseViewController.presentationController.delegate = self; - [self.baseViewController presentViewController:_viewController + [self.baseViewController presentViewController:_navigationController animated:YES completion:nil]; } - (void)stop { - [self.baseViewController dismissViewControllerAnimated:YES completion:nil]; + [_navigationController.presentingViewController + dismissViewControllerAnimated:YES + completion:nil]; _viewController = nil; - - [super stop]; + _navigationController = nil; } #pragma mark - UIAdaptivePresentationControllerDelegate @@ -69,8 +78,4 @@ // No primary action. } -- (void)confirmationAlertDismissAction { - [self stop]; -} - @end
diff --git a/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_view_controller.mm b/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_view_controller.mm index 54009211..7785826 100644 --- a/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_view_controller.mm +++ b/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_view_controller.mm
@@ -28,32 +28,16 @@ - (void)viewDidLoad { self.topAlignedLayout = YES; - self.scrollEnabled = NO; - self.dismissBarButtonSystemItem = UIBarButtonSystemItemClose; - self.titleView = [self createTitleLabel]; + self.title = _titleString; + self.showDismissBarButton = NO; self.underTitleView = [self createInstructionView]; [super viewDidLoad]; [self setUpBottomSheetDetents]; - [self expandBottomSheet]; } #pragma mark - Private -// Returns a label to use as the title of the instructions view. -- (UILabel*)createTitleLabel { - UILabel* label = [[UILabel alloc] init]; - label.translatesAutoresizingMaskIntoConstraints = NO; - label.numberOfLines = 0; - label.text = _titleString; - label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; - label.adjustsFontForContentSizeCategory = YES; - label.textAlignment = NSTextAlignmentCenter; - label.accessibilityTraits |= UIAccessibilityTraitHeader; - - return label; -} - // Returns a view containing instructions to enable Enhanced Safe Browsing. - (InstructionView*)createInstructionView { InstructionView* view = [[InstructionView alloc] initWithList:_steps];
diff --git a/ios/chrome/credential_provider_extension/metrics_util_unittest.mm b/ios/chrome/credential_provider_extension/metrics_util_unittest.mm index 6f41832..06ab12fa 100644 --- a/ios/chrome/credential_provider_extension/metrics_util_unittest.mm +++ b/ios/chrome/credential_provider_extension/metrics_util_unittest.mm
@@ -14,8 +14,8 @@ namespace credential_provider_extension { -NSString* kMetric1 = @"CpeMetricTest1"; -NSString* kMetric2 = @"CpeMetricTest2"; +NSString* const kMetric1 = @"CpeMetricTest1"; +NSString* const kMetric2 = @"CpeMetricTest2"; void RemoveMetricForKey(NSString* key) { NSUserDefaults* sharedDefaults = app_group::GetGroupUserDefaults();
diff --git a/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm index 829398b6..21098fcb 100644 --- a/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm +++ b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm
@@ -24,7 +24,7 @@ // view. const CGFloat kTableViewTopSpace = 14; -NSString* kCellIdentifier = @"cdvcCell"; +NSString* const kCellIdentifier = @"cdvcCell"; NSString* const kMaskedPassword = @"••••••••";
diff --git a/ios/chrome/credential_provider_extension/ui/credential_list_view_controller.mm b/ios/chrome/credential_provider_extension/ui/credential_list_view_controller.mm index 0d87dfd1..9858f8a 100644 --- a/ios/chrome/credential_provider_extension/ui/credential_list_view_controller.mm +++ b/ios/chrome/credential_provider_extension/ui/credential_list_view_controller.mm
@@ -24,9 +24,9 @@ namespace { // Reuse Identifiers for table views. -NSString* kHeaderIdentifier = @"clvcHeader"; -NSString* kCredentialCellIdentifier = @"clvcCredentialCell"; -NSString* kNewPasswordCellIdentifier = @"clvcNewPasswordCell"; +NSString* const kHeaderIdentifier = @"clvcHeader"; +NSString* const kCredentialCellIdentifier = @"clvcCredentialCell"; +NSString* const kNewPasswordCellIdentifier = @"clvcNewPasswordCell"; const CGFloat kNewCredentialHeaderHeight = 35; // Add extra space to offset the top of the table view from the search bar.
diff --git a/ios/chrome/credential_provider_extension/ui/tooltip_view.mm b/ios/chrome/credential_provider_extension/ui/tooltip_view.mm index c750762e..b03998b 100644 --- a/ios/chrome/credential_provider_extension/ui/tooltip_view.mm +++ b/ios/chrome/credential_provider_extension/ui/tooltip_view.mm
@@ -9,12 +9,12 @@ namespace { -CGFloat kTooltipTailHeight = 8; -CGFloat kTooltipTailWidth = 16; -CGFloat kTooltipHorizontalPadding = 16.0f; -CGFloat kTooltipVerticalPadding = 10.0f; -CGFloat kTooltipCornerRadius = 8.0f; -CGFloat kTooltipFadeInTime = 0.2f; +constexpr CGFloat kTooltipTailHeight = 8; +constexpr CGFloat kTooltipTailWidth = 16; +constexpr CGFloat kTooltipHorizontalPadding = 16.0f; +constexpr CGFloat kTooltipVerticalPadding = 10.0f; +constexpr CGFloat kTooltipCornerRadius = 8.0f; +constexpr CGFloat kTooltipFadeInTime = 0.2f; } // namespace
diff --git a/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm b/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm index 8f6fd56..17d1535 100644 --- a/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm +++ b/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm
@@ -68,7 +68,7 @@ return touch_path; } -NSString* kChromeActionsErrorDomain = @"ChromeActionsError"; +NSString* const kChromeActionsErrorDomain = @"ChromeActionsError"; } // namespace
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey.mm b/ios/chrome/test/earl_grey/chrome_earl_grey.mm index 3f8b9b2..5a28dfd 100644 --- a/ios/chrome/test/earl_grey/chrome_earl_grey.mm +++ b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
@@ -43,7 +43,7 @@ namespace { // Accessibility ID of the Activity menu. -NSString* kActivityMenuIdentifier = @"ActivityListView"; +NSString* const kActivityMenuIdentifier = @"ActivityListView"; NSString* const kWaitForPageToStartLoadingError = @"Page did not start to load"; NSString* const kWaitForPageToFinishLoadingError =
diff --git a/ios/components/credential_provider_extension/password_util_unittest.mm b/ios/components/credential_provider_extension/password_util_unittest.mm index f276508da..cd39d4a 100644 --- a/ios/components/credential_provider_extension/password_util_unittest.mm +++ b/ios/components/credential_provider_extension/password_util_unittest.mm
@@ -15,17 +15,17 @@ namespace credential_provider_extension { -NSString* kCredentialKey1 = @"key1"; -NSString* kCredentialKey2 = @"key2"; +NSString* const kCredentialKey1 = @"key1"; +NSString* const kCredentialKey2 = @"key2"; -NSString* kAccountInfoEmail1 = @"peter.parker@gmail.com"; -NSString* kAccountInfoEmail2 = @"mary.jane@gmail.com"; -NSString* kAccountInfoGaia1 = @"123456789"; -NSString* kAccountInfoGaia2 = @"987654321"; -NSString* kCredentialPassword1 = @"pa55word1"; -NSString* kCredentialPassword2 = @"p4ssw0rd2"; +NSString* const kAccountInfoEmail1 = @"peter.parker@gmail.com"; +NSString* const kAccountInfoEmail2 = @"mary.jane@gmail.com"; +NSString* const kAccountInfoGaia1 = @"123456789"; +NSString* const kAccountInfoGaia2 = @"987654321"; +NSString* const kCredentialPassword1 = @"pa55word1"; +NSString* const kCredentialPassword2 = @"p4ssw0rd2"; -NSString* kTestPrefix = @"com.google.common.SSO.KeychainTest."; +NSString* const kTestPrefix = @"com.google.common.SSO.KeychainTest."; NSString* KeyWithPrefix(NSString* key) { return [NSString stringWithFormat:@"%@%@", kTestPrefix, key];
diff --git a/ios/web/js_image_transcoder/java_script_image_transcoder.mm b/ios/web/js_image_transcoder/java_script_image_transcoder.mm index b04b3728..ecb935b 100644 --- a/ios/web/js_image_transcoder/java_script_image_transcoder.mm +++ b/ios/web/js_image_transcoder/java_script_image_transcoder.mm
@@ -15,7 +15,7 @@ namespace { // Filename of the script to transcode images. -NSString* kTranscodeImageScriptFileName = @"transcode_image"; +NSString* const kTranscodeImageScriptFileName = @"transcode_image"; } // namespace
diff --git a/ios/web/public/js_messaging/utils_javascript_test.mm b/ios/web/public/js_messaging/utils_javascript_test.mm index cd1904cd..da17a868 100644 --- a/ios/web/public/js_messaging/utils_javascript_test.mm +++ b/ios/web/public/js_messaging/utils_javascript_test.mm
@@ -12,7 +12,8 @@ #import "testing/gtest_mac.h" #import "url/gurl.h" -NSString* kUtilsSampleMessageHandlerName = @"UtilsSampleMessageHandlerName"; +NSString* const kUtilsSampleMessageHandlerName = + @"UtilsSampleMessageHandlerName"; // A WKScriptMessageHandler which stores the last received WKScriptMessage; @interface FakeScriptMessageHandler : NSObject <WKScriptMessageHandler>
diff --git a/ios/web/public/session/BUILD.gn b/ios/web/public/session/BUILD.gn index 56c8bd3..a6554a0 100644 --- a/ios/web/public/session/BUILD.gn +++ b/ios/web/public/session/BUILD.gn
@@ -14,7 +14,6 @@ "//url", ] sources = [ - "crw_session_certificate_policy_cache_storage.h", "crw_session_user_data.h", "serializable_user_data_manager.h", "session_certificate_policy_cache.h",
diff --git a/ios/web/public/session/crw_session_certificate_policy_cache_storage.h b/ios/web/public/session/crw_session_certificate_policy_cache_storage.h deleted file mode 100644 index 4517ddc..0000000 --- a/ios/web/public/session/crw_session_certificate_policy_cache_storage.h +++ /dev/null
@@ -1,86 +0,0 @@ -// Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_WEB_PUBLIC_SESSION_CRW_SESSION_CERTIFICATE_POLICY_CACHE_STORAGE_H_ -#define IOS_WEB_PUBLIC_SESSION_CRW_SESSION_CERTIFICATE_POLICY_CACHE_STORAGE_H_ - -#import <Foundation/Foundation.h> - -#include "base/memory/scoped_refptr.h" -#include "net/cert/cert_status_flags.h" - -namespace net { -class X509Certificate; -} - -#pragma mark - CRWSessionCertificateStorage - -namespace web { -namespace proto { -class CertificateStorage; -class CertificatesCacheStorage; -} // namespace proto - -// Serialization keys used in CRWSessionCertificateStorage's NSCoding -// implementation. -extern NSString* const kCertificateSerializationKey; -extern NSString* const kHostSerializationKey; -extern NSString* const kStatusSerializationKey; - -// Total bytes serialized during CRWSessionCertificateStorage encoding since the -// uptime. -size_t GetCertPolicyBytesEncoded(); - -} // namespace web - -// A serializable representation of a certificate. -@interface CRWSessionCertificateStorage : NSObject <NSCoding> - -// Designated initializer. -- (instancetype)initWithCertificate:(scoped_refptr<net::X509Certificate>)cert - host:(const std::string&)host - status:(net::CertStatus)status - NS_DESIGNATED_INITIALIZER; -- (instancetype)init NS_UNAVAILABLE; - -// Convenience initializer that creates an instance from proto representation. -- (instancetype)initWithProto:(const web::proto::CertificateStorage&)storage; - -// Serializes the CRWSessionCertificateStorage into `storage`. -- (void)serializeToProto:(web::proto::CertificateStorage&)storage; - -// The certificate represented by this storage. -@property(nonatomic, readonly) net::X509Certificate* certificate; -// The hostname of the page that issued `certificate`. -@property(nonatomic, readonly) std::string& host; -// The allowance chosen for the certificate. -@property(nonatomic, readonly) net::CertStatus status; - -@end - -#pragma mark - CRWSessionCertificatePolicyCacheStorage - -namespace web { -// Serialization key used in CRWSessionCertificatePolicyCacheStorage's NSCoding -// implementation. -extern NSString* const kCertificateStoragesKey; -} // namespace web - -// A serializable representation of a list of allowed certificates. -@interface CRWSessionCertificatePolicyCacheStorage : NSObject <NSCoding> - -// Convenience initializer that creates an instance from proto representation. -- (instancetype)initWithProto: - (const web::proto::CertificatesCacheStorage&)storage; - -// Serializes the CRWSessionCertificatePolicyCacheStorage into `storage`. -- (void)serializeToProto:(web::proto::CertificatesCacheStorage&)storage; - -// The certificate policy storages for this session. -@property(nonatomic, strong) - NSSet<CRWSessionCertificateStorage*>* certificateStorages; - -@end - -#endif // IOS_WEB_PUBLIC_SESSION_CRW_SESSION_CERTIFICATE_POLICY_CACHE_STORAGE_H_
diff --git a/ios/web/session/BUILD.gn b/ios/web/session/BUILD.gn index 8b0cbe7e..badd325 100644 --- a/ios/web/session/BUILD.gn +++ b/ios/web/session/BUILD.gn
@@ -15,7 +15,6 @@ "//net", ] sources = [ - "crw_session_certificate_policy_cache_storage.mm", "crw_session_user_data.mm", "session_certificate.cc", "session_certificate.h", @@ -48,7 +47,6 @@ "//testing/gtest", ] sources = [ - "crw_session_certificate_policy_cache_storage_unittest.mm", "serializable_user_data_manager_unittest.mm", "session_certificate_policy_cache_impl_unittest.mm", ]
diff --git a/ios/web/session/crw_session_certificate_policy_cache_storage.mm b/ios/web/session/crw_session_certificate_policy_cache_storage.mm deleted file mode 100644 index 1816519..0000000 --- a/ios/web/session/crw_session_certificate_policy_cache_storage.mm +++ /dev/null
@@ -1,299 +0,0 @@ -// Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifdef UNSAFE_BUFFERS_BUILD -// TODO(crbug.com/40285824): Remove this and convert code to safer constructs. -#pragma allow_unsafe_buffers -#endif - -#import "ios/web/public/session/crw_session_certificate_policy_cache_storage.h" - -#import <string_view> - -#import "base/apple/foundation_util.h" -#import "base/strings/sys_string_conversions.h" -#import "ios/web/public/session/proto/session.pb.h" -#import "ios/web/session/hash_util.h" -#import "net/base/hash_value.h" -#import "net/cert/x509_certificate.h" -#import "net/cert/x509_util.h" - -namespace { - -// Total bytes serialized during CRWSessionCertificateStorage encoding since the -// uptime. -static size_t gBytesEncoded = 0; - -// The deprecated serialization technique serialized each certificate policy as -// an NSArray, where the necessary information is stored at the following -// indices. -typedef NS_ENUM(NSInteger, DeprecatedSerializationIndices) { - CertificateDataIndex = 0, - HostStringIndex, - StatusIndex, - DeprecatedSerializationIndexCount, -}; - -// Converts `certificate` to NSData for serialization. -NSData* CertificateToNSData(net::X509Certificate* certificate) { - std::string_view cert_string = - net::x509_util::CryptoBufferAsStringPiece(certificate->cert_buffer()); - return [NSData dataWithBytes:cert_string.data() length:cert_string.length()]; -} - -// Converts serialized NSData to a certificate. -scoped_refptr<net::X509Certificate> NSDataToCertificate(NSData* data) { - return net::X509Certificate::CreateFromBytes( - base::span(static_cast<const uint8_t*>(data.bytes), size_t{data.length})); -} - -} // namespace - -namespace web { - -// CRWSessionCertificateStorage serialization keys. -NSString* const kCertificateSerializationKey = @"CertificateSerializationKey"; -NSString* const kHostSerializationKey = @"HostSerializationKey"; -NSString* const kStatusSerializationKey = @"StatusSerializationKey"; - -// CRWSessionCertificatePolicyCacheStorage serialization keys. -NSString* const kCertificateStoragesKey = @"kCertificateStoragesKey"; -NSString* const kCertificateStoragesDeprecatedKey = @"allowedCertificates"; - -size_t GetCertPolicyBytesEncoded() { - return gBytesEncoded; -} - -} // namespace web - -#pragma mark - CRWSessionCertificateStorage - -@interface CRWSessionCertificateStorage () { - // Backing objects for properties of the same name. - scoped_refptr<net::X509Certificate> _certificate; - std::string _host; -} - -// Initializes the CRWSessionCertificateStorage using decoded values. Can -// return nil if the parameters cannot be converted correctly to a cert storage. -- (instancetype)initWithCertData:(NSData*)certData - hostName:(NSString*)hostName - certStatus:(NSNumber*)certStatus; - -// Initializes the CRWSessionCertificateStorage using the deprecated -// serialization technique. See DeprecatedSerializationIndices above for more -// details. -- (instancetype)initWithDeprecatedSerialization:(NSArray*)serialization; - -@end - -@implementation CRWSessionCertificateStorage - -@synthesize host = _host; -@synthesize status = _status; - -- (instancetype)initWithCertificate:(scoped_refptr<net::X509Certificate>)cert - host:(const std::string&)host - status:(net::CertStatus)status { - DCHECK(cert); - DCHECK(host.length()); - if ((self = [super init])) { - _certificate = cert; - _host = host; - _status = status; - } - return self; -} - -- (instancetype)initWithProto:(const web::proto::CertificateStorage&)storage { - const std::string& certString = storage.certificate(); - scoped_refptr<net::X509Certificate> cert = - net::X509Certificate::CreateFromBytes(base::as_byte_span(certString)); - - // Return nil if the cert cannot be decoded or the host is empty. - if (!cert || storage.host().empty()) { - return nil; - } - - return [self initWithCertificate:cert - host:storage.host() - status:storage.status()]; -} - -- (void)serializeToProto:(web::proto::CertificateStorage&)storage { - const std::string_view certString = - net::x509_util::CryptoBufferAsStringPiece(_certificate->cert_buffer()); - - storage.set_certificate(certString.data(), certString.size()); - storage.set_host(_host); - storage.set_status(_status); -} - -#pragma mark NSObject - -- (NSUInteger)hash { - return web::session::ComputeHash(_certificate, _host, _status); -} - -- (BOOL)isEqual:(NSObject*)object { - CRWSessionCertificateStorage* other = - base::apple::ObjCCast<CRWSessionCertificateStorage>(object); - - return [other cr_isEqualSameClass:self]; -} - -#pragma mark Accessors - -- (net::X509Certificate*)certificate { - return _certificate.get(); -} - -#pragma mark NSCoding - -- (instancetype)initWithCoder:(NSCoder*)aDecoder { - NSData* certData = - [aDecoder decodeObjectForKey:web::kCertificateSerializationKey]; - NSString* hostName = [aDecoder decodeObjectForKey:web::kHostSerializationKey]; - NSNumber* certStatus = - [aDecoder decodeObjectForKey:web::kStatusSerializationKey]; - return [self initWithCertData:certData - hostName:hostName - certStatus:certStatus]; -} - -- (void)encodeWithCoder:(NSCoder*)aCoder { - NSData* certData = CertificateToNSData(_certificate.get()); - [aCoder encodeObject:certData forKey:web::kCertificateSerializationKey]; - [aCoder encodeObject:base::SysUTF8ToNSString(_host) - forKey:web::kHostSerializationKey]; - [aCoder encodeObject:@(_status) forKey:web::kStatusSerializationKey]; - - gBytesEncoded += certData.length + _host.size() + sizeof(_status); -} - -#pragma mark Private - -- (instancetype)initWithCertData:(NSData*)certData - hostName:(NSString*)hostName - certStatus:(NSNumber*)certStatus { - scoped_refptr<net::X509Certificate> cert = NSDataToCertificate(certData); - std::string host = base::SysNSStringToUTF8(hostName); - if (!cert || !host.length() || !certStatus) { - return nil; - } - net::CertStatus status = certStatus.unsignedIntegerValue; - return [self initWithCertificate:cert host:host status:status]; -} - -- (instancetype)initWithDeprecatedSerialization:(NSArray*)serialization { - if (serialization.count != DeprecatedSerializationIndexCount) { - return nil; - } - return [self initWithCertData:serialization[CertificateDataIndex] - hostName:serialization[HostStringIndex] - certStatus:serialization[StatusIndex]]; -} - -- (BOOL)cr_isEqualSameClass:(CRWSessionCertificateStorage*)other { - if (_host != other.host) { - return NO; - } - - if (_status != other.status) { - return NO; - } - - return net::x509_util::CryptoBufferEqual(_certificate->cert_buffer(), - other.certificate->cert_buffer()); -} - -@end - -#pragma mark - CRWSessionCertificatePolicyCacheStorage - -@implementation CRWSessionCertificatePolicyCacheStorage - -@synthesize certificateStorages = _certificateStorages; - -- (instancetype)initWithProto: - (const web::proto::CertificatesCacheStorage&)storage { - if ((self = [super init])) { - NSMutableSet<CRWSessionCertificateStorage*>* certificates = - [[NSMutableSet alloc] initWithCapacity:storage.certs_size()]; - for (const web::proto::CertificateStorage& certStorage : storage.certs()) { - CRWSessionCertificateStorage* cert = - [[CRWSessionCertificateStorage alloc] initWithProto:certStorage]; - - if (cert) { - [certificates addObject:cert]; - } - } - _certificateStorages = [certificates copy]; - } - return self; -} - -- (void)serializeToProto:(web::proto::CertificatesCacheStorage&)storage { - for (CRWSessionCertificateStorage* cert in _certificateStorages) { - [cert serializeToProto:*storage.add_certs()]; - } -} - -#pragma mark NSObject - -- (BOOL)isEqual:(NSObject*)object { - CRWSessionCertificatePolicyCacheStorage* other = - base::apple::ObjCCast<CRWSessionCertificatePolicyCacheStorage>(object); - - return [other cr_isEqualSameClass:self]; -} - -#pragma mark NSCoding - -- (instancetype)initWithCoder:(NSCoder*)aDecoder { - if ((self = [super init])) { - _certificateStorages = - [aDecoder decodeObjectForKey:web::kCertificateStoragesKey]; - if (!_certificateStorages.count) { - // Attempt to use the deprecated serialization if none were decoded. - NSMutableSet* deprecatedSerializations = - [aDecoder decodeObjectForKey:web::kCertificateStoragesDeprecatedKey]; - NSMutableSet* certificateStorages = [[NSMutableSet alloc] - initWithCapacity:deprecatedSerializations.count]; - for (NSArray* serialiazation in deprecatedSerializations) { - CRWSessionCertificateStorage* certificatePolicyStorage = - [[CRWSessionCertificateStorage alloc] - initWithDeprecatedSerialization:serialiazation]; - if (certificatePolicyStorage) { - [certificateStorages addObject:certificatePolicyStorage]; - } - } - _certificateStorages = certificateStorages; - } - } - return self; -} - -- (void)encodeWithCoder:(NSCoder*)aCoder { - [aCoder encodeObject:self.certificateStorages - forKey:web::kCertificateStoragesKey]; -} - -#pragma mark Private - -- (BOOL)cr_isEqualSameClass:(CRWSessionCertificatePolicyCacheStorage*)other { - if (_certificateStorages.count != other.certificateStorages.count) { - return NO; - } - - for (CRWSessionCertificateStorage* cert in other.certificateStorages) { - if (![_certificateStorages containsObject:cert]) { - return NO; - } - } - - return YES; -} - -@end
diff --git a/ios/web/session/crw_session_certificate_policy_cache_storage_unittest.mm b/ios/web/session/crw_session_certificate_policy_cache_storage_unittest.mm deleted file mode 100644 index c34170b..0000000 --- a/ios/web/session/crw_session_certificate_policy_cache_storage_unittest.mm +++ /dev/null
@@ -1,93 +0,0 @@ -// Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "ios/web/public/session/crw_session_certificate_policy_cache_storage.h" - -#import "ios/web/public/session/proto/session.pb.h" -#import "net/cert/x509_certificate.h" -#import "net/cert/x509_util.h" -#import "net/test/cert_test_util.h" -#import "net/test/test_data_directory.h" -#import "testing/gtest/include/gtest/gtest.h" -#import "testing/gtest_mac.h" -#import "testing/platform_test.h" - -class CRWSessionCertificatePolicyCacheStorageTest : public PlatformTest { - protected: - CRWSessionCertificatePolicyCacheStorageTest() - : cache_storage_([[CRWSessionCertificatePolicyCacheStorage alloc] init]) { - // Set up `cache_storage_`. - scoped_refptr<net::X509Certificate> cert = - net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); - NSMutableSet* certs = [[NSMutableSet alloc] init]; - [certs addObject:[[CRWSessionCertificateStorage alloc] - initWithCertificate:cert - host:"test1.com" - status:net::CERT_STATUS_REVOKED]]; - [cache_storage_ setCertificateStorages:certs]; - } - - protected: - CRWSessionCertificatePolicyCacheStorage* cache_storage_; -}; - -// Tests that unarchiving CRWSessionCertificatePolicyCacheStorage data results -// in an equivalent storage. -TEST_F(CRWSessionCertificatePolicyCacheStorageTest, EncodeDecode) { - NSData* data = [NSKeyedArchiver archivedDataWithRootObject:cache_storage_ - requiringSecureCoding:NO - error:nil]; - NSKeyedUnarchiver* unarchiver = - [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:nil]; - unarchiver.requiresSecureCoding = NO; - id decoded = [unarchiver decodeObjectForKey:NSKeyedArchiveRootObjectKey]; - EXPECT_NSEQ(cache_storage_, decoded); -} - -// Tests that converting CRWSessionCertificatePolicyCacheStorage to proto and -// back results in an equivalent storage. -TEST_F(CRWSessionCertificatePolicyCacheStorageTest, EncodeDecodeToProto) { - web::proto::CertificatesCacheStorage storage; - [cache_storage_ serializeToProto:storage]; - - CRWSessionCertificatePolicyCacheStorage* decoded = - [[CRWSessionCertificatePolicyCacheStorage alloc] initWithProto:storage]; - - EXPECT_NSEQ(cache_storage_, decoded); -} - -using CRWSessionCertificateStorageTest = PlatformTest; - -// Tests that unarchiving a CRWSessionCertificateStorage returns nil if the -// certificate data does not correctly decode to a certificate. -TEST_F(CRWSessionCertificateStorageTest, InvalidCertData) { - NSKeyedArchiver* archiver = - [[NSKeyedArchiver alloc] initRequiringSecureCoding:NO]; - [archiver encodeObject:[@"not a cert" dataUsingEncoding:NSUTF8StringEncoding] - forKey:web::kCertificateSerializationKey]; - [archiver encodeObject:@"host" forKey:web::kHostSerializationKey]; - [archiver encodeObject:@(net::CERT_STATUS_INVALID) - forKey:web::kStatusSerializationKey]; - [archiver finishEncoding]; - NSData* data = [archiver encodedData]; - - NSKeyedUnarchiver* unarchiver = - [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:nil]; - unarchiver.requiresSecureCoding = NO; - id decoded = [unarchiver decodeObjectForKey:NSKeyedArchiveRootObjectKey]; - EXPECT_FALSE(decoded); -} - -// Tests that unarchiving a CRWSessionCertificateStorage from proto returns nil -// if the certificate data does not correctly decode to a certificate. -TEST_F(CRWSessionCertificateStorageTest, InvalidCertDataFromProto) { - web::proto::CertificateStorage storage; - storage.set_certificate("not a cert"); - storage.set_host("host"); - storage.set_status(net::CERT_STATUS_INVALID); - - CRWSessionCertificateStorage* decoded = - [[CRWSessionCertificateStorage alloc] initWithProto:storage]; - EXPECT_FALSE(decoded); -}
diff --git a/ios/web/web_state/bad_ssl_response_inttest.mm b/ios/web/web_state/bad_ssl_response_inttest.mm index 337499e..35063a7 100644 --- a/ios/web/web_state/bad_ssl_response_inttest.mm +++ b/ios/web/web_state/bad_ssl_response_inttest.mm
@@ -11,7 +11,6 @@ #import "ios/web/public/security/certificate_policy_cache.h" #import "ios/web/public/security/security_style.h" #import "ios/web/public/security/ssl_status.h" -#import "ios/web/public/session/crw_session_certificate_policy_cache_storage.h" #import "ios/web/public/session/session_certificate_policy_cache.h" #import "ios/web/public/test/error_test_util.h" #import "ios/web/public/test/fakes/fake_web_client.h"
diff --git a/ios/web/webui/url_data_manager_ios_backend.mm b/ios/web/webui/url_data_manager_ios_backend.mm index a844947..d439536 100644 --- a/ios/web/webui/url_data_manager_ios_backend.mm +++ b/ios/web/webui/url_data_manager_ios_backend.mm
@@ -113,7 +113,7 @@ // Returns a span that cover at most `count` bytes. base::span<uint8_t> span(size_t count) { CHECK(is_valid()); - return buf_->span().first(std::min(buf_size_, count)); + return buf_->first(std::min(buf_size_, count)); } private:
diff --git a/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.h b/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.h index e5b135f6..9a4ec22c 100644 --- a/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.h +++ b/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.h
@@ -143,6 +143,7 @@ base::OnceClosure cancel_mandatory_reauth_callback, base::RepeatingClosure close_mandatory_reauth_callback) override; void ShowMandatoryReauthOptInConfirmation() override; + bool IsAutofillPaymentMethodsEnabled() const final; IbanManager* GetIbanManager() override; IbanAccessManager* GetIbanAccessManager() override; MerchantPromoCodeManager* GetMerchantPromoCodeManager() override;
diff --git a/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.mm b/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.mm index b2f58fc..70c6b6c 100644 --- a/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.mm +++ b/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.mm
@@ -25,6 +25,7 @@ #import "components/autofill/core/browser/ui/payments/bnpl_tos_controller.h" #import "components/autofill/core/browser/ui/payments/card_unmask_otp_input_dialog_controller.h" #import "components/autofill/core/browser/ui/payments/card_unmask_prompt_controller.h" +#import "components/autofill/core/common/autofill_prefs.h" #import "components/prefs/pref_service.h" #import "ios/web/public/web_state.h" #import "ios/web_view/internal/autofill/cwv_autofill_prefs.h" @@ -332,6 +333,10 @@ void IOSWebViewPaymentsAutofillClient::ShowMandatoryReauthOptInConfirmation() {} +bool IOSWebViewPaymentsAutofillClient::IsAutofillPaymentMethodsEnabled() const { + return autofill::prefs::IsAutofillPaymentMethodsEnabled(GetPrefService()); +} + IbanManager* IOSWebViewPaymentsAutofillClient::GetIbanManager() { return nullptr; }
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h index d311d97..879079a3 100644 --- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h +++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
@@ -136,7 +136,6 @@ void HideAutofillSuggestions(SuggestionHidingReason reason) override; bool IsAutofillEnabled() const override; bool IsAutofillProfileEnabled() const override; - bool IsAutofillPaymentMethodsEnabled() const override; bool IsWalletStorageEnabled() const override; bool IsAutocompleteEnabled() const override; bool IsPasswordManagerEnabled() const override;
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm index 573ced9..25ae968 100644 --- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm +++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
@@ -249,17 +249,15 @@ } bool WebViewAutofillClientIOS::IsAutofillEnabled() const { - return IsAutofillProfileEnabled() || IsAutofillPaymentMethodsEnabled(); + return IsAutofillProfileEnabled() || + AutofillClient::GetPaymentsAutofillClient() + ->IsAutofillPaymentMethodsEnabled(); } bool WebViewAutofillClientIOS::IsAutofillProfileEnabled() const { return prefs::IsAutofillProfileEnabled(GetPrefs()); } -bool WebViewAutofillClientIOS::IsAutofillPaymentMethodsEnabled() const { - return prefs::IsAutofillPaymentMethodsEnabled(GetPrefs()); -} - bool WebViewAutofillClientIOS::IsWalletStorageEnabled() const { return false; }
diff --git a/ios/web_view/internal/web_view_web_main_delegate.mm b/ios/web_view/internal/web_view_web_main_delegate.mm index 830b529..7c57ab2f 100644 --- a/ios/web_view/internal/web_view_web_main_delegate.mm +++ b/ios/web_view/internal/web_view_web_main_delegate.mm
@@ -7,6 +7,7 @@ #import "base/apple/bundle_locations.h" #import "base/base_paths.h" #import "base/logging.h" +#import "base/logging/logging_settings.h" #import "components/component_updater/component_updater_paths.h" // Dummy class used to locate the containing NSBundle.
diff --git a/ios_internal b/ios_internal index 239ab09d..f357f16 160000 --- a/ios_internal +++ b/ios_internal
@@ -1 +1 @@ -Subproject commit 239ab09d80330295888bb4697c92aeba6f8b92a1 +Subproject commit f357f16bf16badcca979a7e0165fac286835dd5e
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc index 550a697b..7cb2003 100644 --- a/media/audio/mac/audio_manager_mac.cc +++ b/media/audio/mac/audio_manager_mac.cc
@@ -469,9 +469,6 @@ return true; } -// TODO(crbug.com/447640763): Remove after M145 if nothing explodes. -BASE_FEATURE(kAudioPowerMonitoring, base::FEATURE_DISABLED_BY_DEFAULT); - class AudioManagerMac::AudioPowerObserver : public base::PowerSuspendObserver { public: AudioPowerObserver() @@ -507,10 +504,6 @@ bool ShouldDeferStreamStart() const { DCHECK(thread_checker_.CalledOnValidThread()); - if (!base::FeatureList::IsEnabled(kAudioPowerMonitoring)) { - return false; - } - // Start() should be deferred if the system is in the middle of a suspend or // has recently started the process of resuming. return is_suspending_ || base::TimeTicks::Now() < earliest_start_time_;
diff --git a/media/audio/mac/audio_manager_mac.h b/media/audio/mac/audio_manager_mac.h index a232140..cc7d700 100644 --- a/media/audio/mac/audio_manager_mac.h +++ b/media/audio/mac/audio_manager_mac.h
@@ -144,8 +144,8 @@ // Streams should consult ShouldDeferStreamStart() and if true check the value // again after |kStartDelayInSecsForPowerEvents| has elapsed. If false, the // stream may be started immediately. - // TODO(henrika): track UMA statistics related to defer start to come up with - // a suitable delay value. + // + // As of Nov 2025, this is still helpful, see https://crbug.com/447640763. enum { kStartDelayInSecsForPowerEvents = 5 }; bool ShouldDeferStreamStart() const override;
diff --git a/media/base/audio_latency.cc b/media/base/audio_latency.cc index d0c1ec84..ba1d436 100644 --- a/media/base/audio_latency.cc +++ b/media/base/audio_latency.cc
@@ -7,7 +7,9 @@ #include <stdint.h> #include <algorithm> +#include <bit> #include <cmath> +#include <numeric> #include "base/check_op.h" #include "base/logging.h" @@ -26,43 +28,6 @@ namespace media { -namespace { - -#if !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_FUCHSIA) -// Taken from "Bit Twiddling Hacks" -// http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 -uint32_t RoundUpToPowerOfTwo(uint32_t v) { - v--; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v++; - return v; -} -#endif - -#if BUILDFLAG(IS_ANDROID) -// WebAudio renderer's quantum size (frames per callback) that is used for -// calculating the "interactive" buffer size. -// TODO(crbug.com/40637820): This number needs to be passed down from Blink when -// user-selectable render quantum size is implemented. -const int kWebAudioRenderQuantumSize = 128; - -// From media/renderers/paint_canvas_video_renderer.cc. To calculate the optimum -// buffer size for Pixel 3/4/5 devices, which has a HW buffer size of 96 frames. -int GCD(int a, int b) { - return a == 0 ? b : GCD(b % a, a); -} - -int LCM(int a, int b) { - return a / GCD(a, b) * b; -} -#endif - -} // namespace - // static bool AudioLatency::IsResamplingPassthroughSupported(Type type) { #if BUILDFLAG(IS_CHROMEOS) @@ -88,7 +53,8 @@ #if BUILDFLAG(USE_CRAS) // Use 80ms rounded to a power of 2. const double eighty_ms_size = 8.0 * sample_rate / 100; - const int high_latency_buffer_size = RoundUpToPowerOfTwo(eighty_ms_size); + const int high_latency_buffer_size = + std::bit_ceil(static_cast<uint32_t>(std::round(eighty_ms_size))); #elif BUILDFLAG(IS_FUCHSIA) // Use 80ms buffers. Doesn't need to be aligned to power of 2, but it should // be a multiple of the scheduling period used for audio threads. @@ -120,7 +86,8 @@ // On Linux, the minimum hardware buffer size is 512, so the lower calculated // values are unused. OSX may have a value as low as 128. const double twenty_ms_size = 2.0 * sample_rate / 100; - const int high_latency_buffer_size = RoundUpToPowerOfTwo(twenty_ms_size); + const int high_latency_buffer_size = + std::bit_ceil(static_cast<uint32_t>(std::round(twenty_ms_size))); #endif return std::max(preferred_buffer_size, high_latency_buffer_size); @@ -174,6 +141,12 @@ // information out. LOG(INFO) << "audioHardwareBufferSize = " << hardware_buffer_size; + // WebAudio renderer's quantum size (frames per callback) that is used for + // calculating the "interactive" buffer size. + // TODO(crbug.com/40637820): This number needs to be passed down from Blink + // when user-selectable render quantum size is implemented. + const int kWebAudioRenderQuantumSize = 128; + if (hardware_buffer_size >= kWebAudioRenderQuantumSize) return hardware_buffer_size; @@ -181,9 +154,9 @@ // compute LCM to avoid glitches and regulate the workload per callback. // (e.g. 96 vs 128 -> 384) Also cap the buffer size to 4 render quanta // (512 frames ~= 10ms at 48K) if LCM goes beyond interactive latency range. - int sensible_buffer_size = std::min( - LCM(hardware_buffer_size, kWebAudioRenderQuantumSize), - kWebAudioRenderQuantumSize * 4); + int sensible_buffer_size = + std::min(std::lcm(hardware_buffer_size, kWebAudioRenderQuantumSize), + kWebAudioRenderQuantumSize * 4); return sensible_buffer_size; #else
diff --git a/media/gpu/test/video_test_environment.cc b/media/gpu/test/video_test_environment.cc index 7a36662..47ea0f8 100644 --- a/media/gpu/test/video_test_environment.cc +++ b/media/gpu/test/video_test_environment.cc
@@ -4,6 +4,7 @@ #include "media/gpu/test/video_test_environment.h" +#include "base/logging/logging_settings.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/test/task_environment.h"
diff --git a/media/gpu/v4l2/test/v4l2_stateless_decoder.cc b/media/gpu/v4l2/test/v4l2_stateless_decoder.cc index 14da4fd54..e6022fb 100644 --- a/media/gpu/v4l2/test/v4l2_stateless_decoder.cc +++ b/media/gpu/v4l2/test/v4l2_stateless_decoder.cc
@@ -16,6 +16,7 @@ #include "base/files/file_util.h" #include "base/files/memory_mapped_file.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h"
diff --git a/media/gpu/vaapi/test/decode.cc b/media/gpu/vaapi/test/decode.cc index 3903447c..e271156 100644 --- a/media/gpu/vaapi/test/decode.cc +++ b/media/gpu/vaapi/test/decode.cc
@@ -13,6 +13,7 @@ #include "base/command_line.h" #include "base/files/memory_mapped_file.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h"
diff --git a/mojo/proxy/main.cc b/mojo/proxy/main.cc index 201ad30..b9c2dcf 100644 --- a/mojo/proxy/main.cc +++ b/mojo/proxy/main.cc
@@ -11,6 +11,7 @@ #include "base/command_line.h" #include "base/files/scoped_file.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h"
diff --git a/mojo/public/cpp/base/BUILD.gn b/mojo/public/cpp/base/BUILD.gn index 0e2b2fc..6d937efd 100644 --- a/mojo/public/cpp/base/BUILD.gn +++ b/mojo/public/cpp/base/BUILD.gn
@@ -120,6 +120,8 @@ "big_buffer_mojom_traits.h", "byte_count_mojom_traits.cc", "byte_count_mojom_traits.h", + "byte_size_mojom_traits.cc", + "byte_size_mojom_traits.h", "byte_string_mojom_traits.cc", "byte_string_mojom_traits.h", "file_info_mojom_traits.cc", @@ -203,6 +205,7 @@ sources = [ "big_buffer_unittest.cc", "big_string_unittest.cc", + "byte_size_unittest.cc", "byte_string_unittest.cc", "file_path_unittest.cc", "file_unittest.cc",
diff --git a/mojo/public/cpp/base/byte_size_mojom_traits.cc b/mojo/public/cpp/base/byte_size_mojom_traits.cc new file mode 100644 index 0000000..3587ab2 --- /dev/null +++ b/mojo/public/cpp/base/byte_size_mojom_traits.cc
@@ -0,0 +1,34 @@ +// 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 "mojo/public/cpp/base/byte_size_mojom_traits.h" + +#include "base/byte_size.h" + +namespace mojo { + +// static +bool StructTraits<mojo_base::mojom::ByteSizeDataView, base::ByteSize>::Read( + mojo_base::mojom::ByteSizeDataView data, + base::ByteSize* byte_size) { + // ByteSize holds a uint64_t, but any value over max(int64_t) is invalid, so + // that every valid ByteSize can convert to ByteSizeDelta. The ByteSize + // constructor will CHECK if given an out-of-range value. + if (data.size() > base::ByteSize::Max().InBytes()) { + return false; + } + *byte_size = base::ByteSize(data.size()); + return true; +} + +// static +bool StructTraits< + mojo_base::mojom::ByteSizeDeltaDataView, + base::ByteSizeDelta>::Read(mojo_base::mojom::ByteSizeDeltaDataView data, + base::ByteSizeDelta* byte_size_delta) { + *byte_size_delta = base::ByteSizeDelta(data.delta()); + return true; +} + +} // namespace mojo
diff --git a/mojo/public/cpp/base/byte_size_mojom_traits.h b/mojo/public/cpp/base/byte_size_mojom_traits.h new file mode 100644 index 0000000..33fc700 --- /dev/null +++ b/mojo/public/cpp/base/byte_size_mojom_traits.h
@@ -0,0 +1,36 @@ +// 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 MOJO_PUBLIC_CPP_BASE_BYTE_SIZE_MOJOM_TRAITS_H_ +#define MOJO_PUBLIC_CPP_BASE_BYTE_SIZE_MOJOM_TRAITS_H_ + +#include "base/byte_size.h" +#include "base/component_export.h" +#include "mojo/public/mojom/base/byte_size.mojom-shared.h" + +namespace mojo { + +template <> +struct COMPONENT_EXPORT(MOJO_BASE_SHARED_TRAITS) + StructTraits<mojo_base::mojom::ByteSizeDataView, base::ByteSize> { + static uint64_t size(const base::ByteSize& byte_size) { + return byte_size.InBytes(); + } + static bool Read(mojo_base::mojom::ByteSizeDataView data, + base::ByteSize* byte_size); +}; + +template <> +struct COMPONENT_EXPORT(MOJO_BASE_SHARED_TRAITS) + StructTraits<mojo_base::mojom::ByteSizeDeltaDataView, base::ByteSizeDelta> { + static int64_t delta(const base::ByteSizeDelta& byte_size_delta) { + return byte_size_delta.InBytes(); + } + static bool Read(mojo_base::mojom::ByteSizeDeltaDataView data, + base::ByteSizeDelta* byte_size_delta); +}; + +} // namespace mojo + +#endif // MOJO_PUBLIC_CPP_BASE_BYTE_SIZE_MOJOM_TRAITS_H_
diff --git a/mojo/public/cpp/base/byte_size_unittest.cc b/mojo/public/cpp/base/byte_size_unittest.cc new file mode 100644 index 0000000..a8bd3e9 --- /dev/null +++ b/mojo/public/cpp/base/byte_size_unittest.cc
@@ -0,0 +1,70 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/byte_size.h" + +#include <array> +#include <limits> + +#include "mojo/public/cpp/base/byte_size_mojom_traits.h" +#include "mojo/public/cpp/test_support/test_utils.h" +#include "mojo/public/mojom/base/byte_size.mojom.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace mojo_base { + +constexpr auto kMinInt64 = std::numeric_limits<int64_t>::min(); +constexpr auto kMaxInt64 = std::numeric_limits<int64_t>::max(); + +TEST(ByteSizeTest, ValidByteSize) { + const auto kTestCases = std::to_array<uint64_t>({ + 0u, + 1u, + static_cast<uint64_t>(kMaxInt64) - 1, + static_cast<uint64_t>(kMaxInt64), + }); + for (uint64_t bytes : kTestCases) { + SCOPED_TRACE(::testing::Message() << bytes << " bytes"); + const base::ByteSize in(bytes); + base::ByteSize out; + ASSERT_TRUE(mojo::test::SerializeAndDeserialize<mojom::ByteSize>(in, out)); + EXPECT_EQ(in, out); + } +} + +TEST(ByteSizeTest, InvalidByteSize) { + const auto kTestCases = std::to_array<uint64_t>({ + static_cast<uint64_t>(kMaxInt64) + 1, + std::numeric_limits<uint64_t>::max(), + }); + for (uint64_t bytes : kTestCases) { + SCOPED_TRACE(::testing::Message() << bytes << " bytes"); + auto in = mojom::ByteSize::New(); + in->size = bytes; + base::ByteSize out; + EXPECT_FALSE(mojo::test::SerializeAndDeserialize<mojom::ByteSize>(in, out)); + } +} + +TEST(ByteSizeTest, ByteSizeDelta) { + const auto kTestCases = std::to_array<int64_t>({ + kMinInt64, + kMinInt64 + 1, + -1, + 0, + 1, + kMaxInt64 - 1, + kMaxInt64, + }); + for (int64_t bytes : kTestCases) { + SCOPED_TRACE(::testing::Message() << bytes << " bytes"); + const base::ByteSizeDelta in(bytes); + base::ByteSizeDelta out; + ASSERT_TRUE( + mojo::test::SerializeAndDeserialize<mojom::ByteSizeDelta>(in, out)); + EXPECT_EQ(in, out); + } +} + +} // namespace mojo_base
diff --git a/mojo/public/mojom/base/BUILD.gn b/mojo/public/mojom/base/BUILD.gn index fddb3ca3..4b4772d 100644 --- a/mojo/public/mojom/base/BUILD.gn +++ b/mojo/public/mojom/base/BUILD.gn
@@ -15,6 +15,7 @@ "big_string.mojom", "binder.mojom", "byte_count.mojom", + "byte_size.mojom", "byte_string.mojom", "empty.mojom", "error.mojom", @@ -116,6 +117,34 @@ { types = [ { + mojom = "mojo_base.mojom.ByteSize" + cpp = "::base::ByteSize" + copyable_pass_by_value = true + }, + ] + traits_headers = [ "//mojo/public/cpp/base/byte_size_mojom_traits.h" ] + traits_public_deps = [ + "//base", + "//mojo/public/cpp/base:shared_typemap_traits", + ] + }, + { + types = [ + { + mojom = "mojo_base.mojom.ByteSizeDelta" + cpp = "::base::ByteSizeDelta" + copyable_pass_by_value = true + }, + ] + traits_headers = [ "//mojo/public/cpp/base/byte_size_mojom_traits.h" ] + traits_public_deps = [ + "//base", + "//mojo/public/cpp/base:shared_typemap_traits", + ] + }, + { + types = [ + { mojom = "mojo_base.mojom.ByteString" cpp = "std::string" },
diff --git a/mojo/public/mojom/base/byte_count.mojom b/mojo/public/mojom/base/byte_count.mojom index cccec16..d2faaa4d 100644 --- a/mojo/public/mojom/base/byte_count.mojom +++ b/mojo/public/mojom/base/byte_count.mojom
@@ -5,6 +5,8 @@ module mojo_base.mojom; // Corresponds to `base::ByteCount` in base/byte_count.h. +// +// DEPRECATED: use ByteSize for unsigned values and ByteSizeDelta for signed. struct ByteCount { int64 count; };
diff --git a/mojo/public/mojom/base/byte_size.mojom b/mojo/public/mojom/base/byte_size.mojom new file mode 100644 index 0000000..e1ad006 --- /dev/null +++ b/mojo/public/mojom/base/byte_size.mojom
@@ -0,0 +1,15 @@ +// 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. + +module mojo_base.mojom; + +// Corresponds to `base::ByteSize` in base/byte_size.h. +struct ByteSize { + uint64 size; +}; + +// Corresponds to `base::ByteSizeDelta` in base/byte_size.h. +struct ByteSizeDelta { + int64 delta; +};
diff --git a/net/disk_cache/sql/sql_backend_impl.cc b/net/disk_cache/sql/sql_backend_impl.cc index bc76151..870fd9d 100644 --- a/net/disk_cache/sql/sql_backend_impl.cc +++ b/net/disk_cache/sql/sql_backend_impl.cc
@@ -1097,7 +1097,7 @@ if (buffer) { // Note: `buffer` can be nullptr. buffer = base::MakeRefCounted<net::VectorIOBuffer>( - buffer->span().first(static_cast<size_t>(buf_len))); + buffer->first(static_cast<size_t>(buf_len))); } // Callback to set an error on `res_id_or_error` when an error occurs or // the backend is deleted.
diff --git a/net/disk_cache/sql/sql_backend_impl_unittest.cc b/net/disk_cache/sql/sql_backend_impl_unittest.cc index 28595bc7..a42e859 100644 --- a/net/disk_cache/sql/sql_backend_impl_unittest.cc +++ b/net/disk_cache/sql/sql_backend_impl_unittest.cc
@@ -919,8 +919,7 @@ ASSERT_EQ( entry->ReadData(0, 0, buffer.get(), buffer->size(), base::DoNothing()), kHeadData.size()); - EXPECT_EQ(buffer->span().first(kHeadData.size()), - base::as_byte_span(kHeadData)); + EXPECT_EQ(buffer->first(kHeadData.size()), base::as_byte_span(kHeadData)); entry->Close(); }
diff --git a/net/disk_cache/sql/sql_persistent_store_backend.cc b/net/disk_cache/sql/sql_persistent_store_backend.cc index 04a5349..380749f 100644 --- a/net/disk_cache/sql/sql_persistent_store_backend.cc +++ b/net/disk_cache/sql/sql_persistent_store_backend.cc
@@ -1578,8 +1578,7 @@ statement.BindInt64(0, res_id.value()); statement.BindInt64(1, start); statement.BindInt64(2, end); - const auto new_blob = - buffer->span().first(base::checked_cast<size_t>(buf_len)); + const auto new_blob = buffer->first(base::checked_cast<size_t>(buf_len)); statement.BindInt(3, CalculateCheckSum(new_blob, key.hash())); statement.BindBlob(4, new_blob); if (!statement.Run()) {
diff --git a/net/dns/dns_record_fuzzer.cc b/net/dns/dns_record_fuzzer.cc index 68421bf4..386d329 100644 --- a/net/dns/dns_record_fuzzer.cc +++ b/net/dns/dns_record_fuzzer.cc
@@ -12,6 +12,7 @@ #include "base/containers/span.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/time/time.h" #include "net/dns/dns_response.h" #include "net/dns/record_parsed.h"
diff --git a/net/filter/gzip_source_stream.cc b/net/filter/gzip_source_stream.cc index f25eed8..08a12e7a 100644 --- a/net/filter/gzip_source_stream.cc +++ b/net/filter/gzip_source_stream.cc
@@ -99,8 +99,7 @@ // Span that tracks the portion of `input_buffer` that has not yet been // process. The data isn't const because the zlib API doesn't use consts for // input, but it should not be modified in practice. - base::span<uint8_t> input_data = - input_buffer->span().first(input_buffer_size); + base::span<uint8_t> input_data = input_buffer->first(input_buffer_size); size_t bytes_out = 0; bool state_compressed_entered = false;
diff --git a/net/filter/zstd_source_stream_unittest.cc b/net/filter/zstd_source_stream_unittest.cc index 64bd4c133..05af6a3 100644 --- a/net/filter/zstd_source_stream_unittest.cc +++ b/net/filter/zstd_source_stream_unittest.cc
@@ -295,7 +295,7 @@ callback.callback()); EXPECT_EQ(static_cast<int>(source_data_len()), bytes_read); - EXPECT_EQ(base::as_string_view(out_buffer->span().first(source_data_len())), + EXPECT_EQ(base::as_string_view(out_buffer->first(source_data_len())), source_data()); }
diff --git a/net/third_party/quiche/overrides/quiche_platform_impl/quiche_command_line_flags_impl.cc b/net/third_party/quiche/overrides/quiche_platform_impl/quiche_command_line_flags_impl.cc index c1322b6b..50201d0 100644 --- a/net/third_party/quiche/overrides/quiche_platform_impl/quiche_command_line_flags_impl.cc +++ b/net/third_party/quiche/overrides/quiche_platform_impl/quiche_command_line_flags_impl.cc
@@ -13,6 +13,7 @@ #include "base/command_line.h" #include "base/export_template.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h"
diff --git a/net/tools/cert_verify_tool/cert_verify_tool.cc b/net/tools/cert_verify_tool/cert_verify_tool.cc index 63e8bc7..153673a 100644 --- a/net/tools/cert_verify_tool/cert_verify_tool.cc +++ b/net/tools/cert_verify_tool/cert_verify_tool.cc
@@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/strings/string_split.h" #include "base/synchronization/waitable_event.h"
diff --git a/net/tools/net_watcher/net_watcher.cc b/net/tools/net_watcher/net_watcher.cc index 35a1407b..21e9905 100644 --- a/net/tools/net_watcher/net_watcher.cc +++ b/net/tools/net_watcher/net_watcher.cc
@@ -19,6 +19,7 @@ #include "base/compiler_specific.h" #include "base/json/json_writer.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/run_loop.h" #include "base/strings/string_split.h"
diff --git a/net/tools/root_store_tool/root_store_tool.cc b/net/tools/root_store_tool/root_store_tool.cc index 0fa67bcd..9ddf89d7 100644 --- a/net/tools/root_store_tool/root_store_tool.cc +++ b/net/tools/root_store_tool/root_store_tool.cc
@@ -19,6 +19,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/numerics/safe_conversions.h" #include "base/path_service.h" #include "base/strings/strcat.h"
diff --git a/net/tools/stress_cache/stress_cache.cc b/net/tools/stress_cache/stress_cache.cc index 6f14a15..8c1b28f 100644 --- a/net/tools/stress_cache/stress_cache.cc +++ b/net/tools/stress_cache/stress_cache.cc
@@ -27,6 +27,7 @@ #include "base/functional/callback_helpers.h" #include "base/location.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/path_service.h" #include "base/process/launch.h"
diff --git a/net/tools/testserver/run_testserver.cc b/net/tools/testserver/run_testserver.cc index 45508e6..7b9506e 100644 --- a/net/tools/testserver/run_testserver.cc +++ b/net/tools/testserver/run_testserver.cc
@@ -11,6 +11,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h"
diff --git a/net/tools/tld_cleanup/tld_cleanup.cc b/net/tools/tld_cleanup/tld_cleanup.cc index 5482dcb..daa9be06 100644 --- a/net/tools/tld_cleanup/tld_cleanup.cc +++ b/net/tools/tld_cleanup/tld_cleanup.cc
@@ -31,6 +31,7 @@ #include "base/files/file_path.h" #include "base/i18n/icu_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/path_service.h" #include "base/process/memory.h" #include "net/tools/tld_cleanup/tld_cleanup_util.h"
diff --git a/net/tools/transport_security_state_generator/transport_security_state_generator.cc b/net/tools/transport_security_state_generator/transport_security_state_generator.cc index 114273c8..e985542f 100644 --- a/net/tools/transport_security_state_generator/transport_security_state_generator.cc +++ b/net/tools/transport_security_state_generator/transport_security_state_generator.cc
@@ -13,6 +13,7 @@ #include "base/compiler_specific.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/path_service.h" #include "base/strings/string_view_util.h" #include "base/strings/utf_string_conversions.h"
diff --git a/pdf/BUILD.gn b/pdf/BUILD.gn index e893d6fe6..a6cdc56 100644 --- a/pdf/BUILD.gn +++ b/pdf/BUILD.gn
@@ -437,6 +437,8 @@ sources = [ "test/fake_annotation_agent_host.cc", "test/fake_annotation_agent_host.h", + "test/input_event_util.cc", + "test/input_event_util.h", "test/mock_pdf_caret_client.cc", "test/mock_pdf_caret_client.h", "test/mock_web_associated_url_loader.cc",
diff --git a/pdf/pdf_ink_module_unittest.cc b/pdf/pdf_ink_module_unittest.cc index bc7b638..1ee6e26 100644 --- a/pdf/pdf_ink_module_unittest.cc +++ b/pdf/pdf_ink_module_unittest.cc
@@ -34,6 +34,7 @@ #include "pdf/pdf_ink_module_client.h" #include "pdf/pdf_ink_transform.h" #include "pdf/pdfium/pdfium_ink_reader.h" +#include "pdf/test/input_event_util.h" #include "pdf/test/mock_pdf_caret_client.h" #include "pdf/test/mouse_event_builder.h" #include "pdf/test/pdf_ink_test_helpers.h" @@ -220,22 +221,6 @@ return true; } -blink::WebMouseEvent CreateMouseMoveEventAtPoint(const gfx::PointF& point) { - return MouseEventBuilder() - .SetType(blink::WebInputEvent::Type::kMouseMove) - .SetPosition(point) - .Build(); -} - -blink::WebMouseEvent CreateMouseMoveWithLeftButtonEventAtPoint( - const gfx::PointF& point) { - return MouseEventBuilder() - .SetType(blink::WebInputEvent::Type::kMouseMove) - .SetPosition(point) - .SetButton(blink::WebPointerProperties::Button::kLeft) - .Build(); -} - base::Value::Dict CreateGetAnnotationBrushMessage( const std::string& brush_type) { auto message = base::Value::Dict() @@ -1103,9 +1088,7 @@ { // Start a drawing or erase action. blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kMouseDownPoint) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); // Simulate scenario where another view has taken the focus and consumed @@ -1113,11 +1096,7 @@ // left mouse button being pressed. This should be handled, as it treats // it as a signal to terminate the prior stroke. blink::WebMouseEvent mouse_move_event = - MouseEventBuilder() - .SetType(blink::WebInputEvent::Type::kMouseMove) - .SetPosition(kMouseMovePoint) - .SetButton(blink::WebPointerProperties::Button::kNoButton) - .Build(); + CreateMoveWebMouseEventToPosition(kMouseMovePoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); } @@ -1126,26 +1105,18 @@ // since there is no longer any active drawing or erasing. constexpr gfx::PointF kMouseMovePoint2 = gfx::PointF(21.0f, 26.0f); blink::WebMouseEvent mouse_move_event = - MouseEventBuilder() - .SetType(blink::WebInputEvent::Type::kMouseMove) - .SetPosition(kMouseMovePoint2) - .SetButton(blink::WebPointerProperties::Button::kNoButton) - .Build(); + CreateMoveWebMouseEventToPosition(kMouseMovePoint2); EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event)); } { // Start another stroke with a new mouse down event, which is handled. blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kMouseDownPoint) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kMouseUpPoint) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kMouseUpPoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); } } @@ -1363,19 +1334,19 @@ const gfx::PointF& mouse_up_point, bool expect_mouse_events_handled) { blink::WebMouseEvent mouse_down_event = - MouseEventBuilder().CreateLeftClickAtPosition(mouse_down_point).Build(); + CreateLeftClickWebMouseEventAtPosition(mouse_down_point); EXPECT_EQ(expect_mouse_events_handled, ink_module().HandleInputEvent(mouse_down_event)); for (const gfx::PointF& mouse_move_point : mouse_move_points) { blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(mouse_move_point); + CreateLeftClickWebMouseMoveEventAtPosition(mouse_move_point); EXPECT_EQ(expect_mouse_events_handled, ink_module().HandleInputEvent(mouse_move_event)); } blink::WebMouseEvent mouse_up_event = - MouseEventBuilder().CreateLeftMouseUpAtPosition(mouse_up_point).Build(); + CreateLeftClickWebMouseUpEventAtPosition(mouse_up_point); EXPECT_EQ(expect_mouse_events_handled, ink_module().HandleInputEvent(mouse_up_event)); } @@ -1589,20 +1560,17 @@ InitializeSimpleSinglePageBasicLayout(); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder().CreateLeftClickAtPosition(kMouseDownPoint).Build(); + CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kMouseMovePoint); + CreateLeftClickWebMouseMoveEventAtPosition(kMouseMovePoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); // Per manual testing on a Windows laptop, pen input causes mouse events to // lose their left-button down state while the pen is active. blink::WebMouseEvent mouse_move_no_left_button_event = - MouseEventBuilder() - .SetType(blink::WebInputEvent::Type::kMouseMove) - .SetPosition(kMouseMovePoint) - .Build(); + CreateMoveWebMouseEventToPosition(kMouseMovePoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_no_left_button_event)); const std::vector<base::span<const gfx::PointF>> all_move_points{ @@ -1618,7 +1586,7 @@ EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event)); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder().CreateLeftMouseUpAtPosition(kMouseUpPoint).Build(); + CreateLeftClickWebMouseUpEventAtPosition(kMouseUpPoint); EXPECT_FALSE(ink_module().HandleInputEvent(mouse_up_event)); ExpectStrokeCounts(/*started=*/2, /*modified_finished=*/2, @@ -1641,7 +1609,7 @@ EXPECT_TRUE(ink_module().HandleInputEvent(pen_start_event)); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kMouseMovePoint); + CreateLeftClickWebMouseMoveEventAtPosition(kMouseMovePoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); blink::WebTouchEvent pen_end_event = @@ -2187,11 +2155,11 @@ InitializeSimpleSinglePageBasicLayout(); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder().CreateLeftClickAtPosition(kMouseDownPoint).Build(); + CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kMouseMovePoint); + CreateLeftClickWebMouseMoveEventAtPosition(kMouseMovePoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); // If the mouse up event went missing during stroking, the next mouse down @@ -2223,11 +2191,11 @@ InitializeSimpleSinglePageBasicLayout(); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder().CreateLeftClickAtPosition(kMouseDownPoint).Build(); + CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kMouseMovePoint); + CreateLeftClickWebMouseMoveEventAtPosition(kMouseMovePoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); // If the mouse up event has yet to happen, the next touch start event @@ -2250,9 +2218,7 @@ SelectBrushTool(PdfInkBrush::Type::kPen, black_pen_message_params); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kLeftVerticalStrokePoint1) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kLeftVerticalStrokePoint1); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); // While the stroke is still in progress, change the pen color. This has no @@ -2269,12 +2235,10 @@ EXPECT_CALL(client(), StrokeAdded(kPageIndex, InkStrokeId(0), InkStrokeBrushColorEq(SK_ColorBLACK))); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kLeftVerticalStrokePoint2); + CreateLeftClickWebMouseMoveEventAtPosition(kLeftVerticalStrokePoint2); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kLeftVerticalStrokePoint2) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kLeftVerticalStrokePoint2); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); VerifyAndClearExpectations(); @@ -2304,9 +2268,7 @@ SelectBrushTool(PdfInkBrush::Type::kPen, message_params); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kLeftVerticalStrokePoint1) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kLeftVerticalStrokePoint1); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); // While the stroke is still in progress, change the pen size. This has no @@ -2328,12 +2290,10 @@ UpdateInkCursor(CursorBitmapImageSizeEq(SkISize(8, 8)))); } blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kLeftVerticalStrokePoint2); + CreateLeftClickWebMouseMoveEventAtPosition(kLeftVerticalStrokePoint2); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kLeftVerticalStrokePoint2) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kLeftVerticalStrokePoint2); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); VerifyAndClearExpectations(); @@ -2356,9 +2316,7 @@ EXPECT_CALL(client(), StrokeAdded(kPageIndex, InkStrokeId(1), _)); EXPECT_CALL(client(), UpdateStrokeActive(_, _, _)).Times(0); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kRightVerticalStrokePoint1) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kRightVerticalStrokePoint1); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); // While the stroke is still in progress, change to the eraser tool. This @@ -2373,12 +2331,10 @@ EXPECT_CALL(client(), StrokeAdded(_, _, _)).Times(0); EXPECT_CALL(client(), UpdateStrokeActive(_, _, _)).Times(0); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kRightVerticalStrokePoint2); + CreateLeftClickWebMouseMoveEventAtPosition(kRightVerticalStrokePoint2); EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event)); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kRightVerticalStrokePoint2) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kRightVerticalStrokePoint2); EXPECT_FALSE(ink_module().HandleInputEvent(mouse_up_event)); VerifyAndClearExpectations(); @@ -2418,9 +2374,7 @@ EXPECT_CALL(client(), StrokeAdded(_, _, _)).Times(0); EXPECT_CALL(client(), UpdateStrokeActive(kPageIndex, InkStrokeId(0), _)); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kLeftVerticalStrokePoint1) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kLeftVerticalStrokePoint1); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); // While the stroke is still in progress, change the input tool type to a @@ -2439,12 +2393,10 @@ EXPECT_CALL(client(), StrokeAdded(_, _, _)).Times(0); EXPECT_CALL(client(), UpdateStrokeActive(_, _, _)).Times(0); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kRightVerticalStrokePoint2); + CreateLeftClickWebMouseMoveEventAtPosition(kRightVerticalStrokePoint2); EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event)); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kRightVerticalStrokePoint1) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kRightVerticalStrokePoint1); EXPECT_FALSE(ink_module().HandleInputEvent(mouse_up_event)); VerifyAndClearExpectations(); @@ -2472,9 +2424,7 @@ SelectBrushTool(PdfInkBrush::Type::kPen, pen_message_params); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kLeftVerticalStrokePoint1) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kLeftVerticalStrokePoint1); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); // While the stroke is still in progress, change the input tool type to a @@ -2500,12 +2450,10 @@ UpdateInkCursor(CursorBitmapImageSizeEq(SkISize(10, 10)))); } blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kLeftVerticalStrokePoint2); + CreateLeftClickWebMouseMoveEventAtPosition(kLeftVerticalStrokePoint2); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kLeftVerticalStrokePoint2) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kLeftVerticalStrokePoint2); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); VerifyAndClearExpectations(); @@ -2523,11 +2471,11 @@ InitializeSimpleSinglePageBasicLayout(); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder().CreateLeftClickAtPosition(kMouseDownPoint).Build(); + CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kMouseMovePoint); + CreateLeftClickWebMouseMoveEventAtPosition(kMouseMovePoint); // Simulate a condition from https://crbug.com/421120183 where the event time // stamp goes backwards in time. This should not crash. mouse_move_event.SetTimeStamp(mouse_move_event.TimeStamp() - @@ -2535,7 +2483,7 @@ EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder().CreateLeftMouseUpAtPosition(kMouseUpPoint).Build(); + CreateLeftClickWebMouseUpEventAtPosition(kMouseUpPoint); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); EXPECT_EQ(2, GetInputOfTypeCountForPage( @@ -3813,11 +3761,9 @@ // Mousemove and mouseup events will be handled but will not result in any // additional strokes. EXPECT_TRUE(ink_module().HandleInputEvent( - CreateMouseMoveWithLeftButtonEventAtPoint(kStartPointInsidePage0))); + CreateLeftClickWebMouseMoveEventAtPosition(kStartPointInsidePage0))); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kStartPointInsidePage0) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kStartPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); ExpectStrokeCounts(/*started=*/2, /*modified_finished=*/1, @@ -3876,11 +3822,9 @@ // Mousemove and mouseup events will be handled but will not result in any // additional strokes. EXPECT_TRUE(ink_module().HandleInputEvent( - CreateMouseMoveWithLeftButtonEventAtPoint(kStartPointInsidePage0))); + CreateLeftClickWebMouseMoveEventAtPosition(kStartPointInsidePage0))); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kStartPointInsidePage0) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kStartPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); ExpectStrokeCounts(/*started=*/3, /*modified_finished=*/2, @@ -3900,9 +3844,7 @@ /*click_count=*/1)); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kStartPointInsidePage0) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); VerifyAndClearExpectations(); @@ -3914,13 +3856,11 @@ EXPECT_CALL(client(), ExtendSelectionByPoint(kEndPointInsidePage0)); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kEndPointInsidePage0); + CreateLeftClickWebMouseMoveEventAtPosition(kEndPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kEndPointInsidePage0) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kEndPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); ExpectStrokeCounts(/*started=*/1, /*modified_finished=*/1, @@ -3955,9 +3895,7 @@ /*click_count=*/1)); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kStartPointInsidePage0) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); // Move to page 1. Select rects from both pages. @@ -3975,14 +3913,13 @@ ExtendSelectionByPoint(kTwoPageVerticalLayoutPoint1InsidePage1)); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint( + CreateLeftClickWebMouseMoveEventAtPosition( kTwoPageVerticalLayoutPoint1InsidePage1); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kTwoPageVerticalLayoutPoint1InsidePage1) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition( + kTwoPageVerticalLayoutPoint1InsidePage1); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); // All the selection strokes are considered one stroke. @@ -4145,7 +4082,7 @@ // Move to a text position. The cursor should remain as the custom pen cursor. blink::WebMouseEvent mouse_move_event = - CreateMouseMoveEventAtPoint(kEndPointInsidePage0); + CreateMoveWebMouseEventToPosition(kEndPointInsidePage0); // The event will be considered not handled, but the cursor will still update. EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event)); @@ -4163,7 +4100,7 @@ // Move to a text position. The cursor should be an I-beam. EXPECT_CALL(client(), UpdateInkCursor(ui::Cursor(ui::mojom::CursorType::kIBeam))); - mouse_move_event = CreateMouseMoveEventAtPoint(kStartPointInsidePage0); + mouse_move_event = CreateMoveWebMouseEventToPosition(kStartPointInsidePage0); EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event)); VerifyAndClearExpectations(); @@ -4177,7 +4114,7 @@ EXPECT_CALL(client(), UpdateInkCursor(CursorBitmapImageSizeEq(SkISize(10, 10)))); } - mouse_move_event = CreateMouseMoveEventAtPoint(kEndPointInsidePage0); + mouse_move_event = CreateMoveWebMouseEventToPosition(kEndPointInsidePage0); EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event)); } @@ -4199,7 +4136,7 @@ EXPECT_CALL(client(), UpdateInkCursor(ui::Cursor(ui::mojom::CursorType::kIBeam))); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveEventAtPoint(kStartPointInsidePage0); + CreateMoveWebMouseEventToPosition(kStartPointInsidePage0); EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event)); VerifyAndClearExpectations(); @@ -4208,12 +4145,10 @@ // remain as an I-beam. EXPECT_CALL(client(), UpdateInkCursor(_)).Times(0); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kStartPointInsidePage0) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kEndPointInsidePage0); + CreateLeftClickWebMouseMoveEventAtPosition(kEndPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); VerifyAndClearExpectations(); @@ -4223,9 +4158,7 @@ EXPECT_CALL(client(), UpdateInkCursor(CursorBitmapImageSizeEq(SkISize(8, 8)))); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kEndPointInsidePage0) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kEndPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); } @@ -4247,7 +4180,7 @@ // highlighter cursor. EXPECT_CALL(client(), UpdateInkCursor(_)).Times(0); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveEventAtPoint(kStartPointInsidePage0); + CreateMoveWebMouseEventToPosition(kStartPointInsidePage0); EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event)); VerifyAndClearExpectations(); @@ -4256,12 +4189,10 @@ // custom highlighter cursor. EXPECT_CALL(client(), UpdateInkCursor(_)).Times(0); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kStartPointInsidePage0) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kEndPointInsidePage0); + CreateLeftClickWebMouseMoveEventAtPosition(kEndPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); VerifyAndClearExpectations(); @@ -4270,9 +4201,7 @@ EXPECT_CALL(client(), UpdateInkCursor(ui::Cursor(ui::mojom::CursorType::kIBeam))); blink::WebMouseEvent mouse_up_event = - MouseEventBuilder() - .CreateLeftMouseUpAtPosition(kEndPointInsidePage0) - .Build(); + CreateLeftClickWebMouseUpEventAtPosition(kEndPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event)); } @@ -4317,13 +4246,11 @@ EXPECT_CALL(client(), ExtendSelectionByPoint(kEndPointInsidePage0)); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kStartPointInsidePage0) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kEndPointInsidePage0); + CreateLeftClickWebMouseMoveEventAtPosition(kEndPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); // If the mouse up event went missing during stroking, the next mouse down @@ -4350,13 +4277,11 @@ EXPECT_CALL(client(), ExtendSelectionByPoint(kEndPointInsidePage0)); blink::WebMouseEvent mouse_down_event = - MouseEventBuilder() - .CreateLeftClickAtPosition(kStartPointInsidePage0) - .Build(); + CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event)); blink::WebMouseEvent mouse_move_event = - CreateMouseMoveWithLeftButtonEventAtPoint(kEndPointInsidePage0); + CreateLeftClickWebMouseMoveEventAtPosition(kEndPointInsidePage0); EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event)); // If the mouse up event has yet to happen, the next touch start event @@ -4653,7 +4578,7 @@ // `click_count` clicks. void MouseMoveAndUpAtPoint(const gfx::PointF& point, int click_count) { EXPECT_TRUE(ink_module().HandleInputEvent( - CreateMouseMoveWithLeftButtonEventAtPoint(point))); + CreateLeftClickWebMouseMoveEventAtPosition(point))); blink::WebMouseEvent mouse_up_event = MouseEventBuilder()
diff --git a/pdf/pdf_view_web_plugin_unittest.cc b/pdf/pdf_view_web_plugin_unittest.cc index 1718bd6..aaf84aff 100644 --- a/pdf/pdf_view_web_plugin_unittest.cc +++ b/pdf/pdf_view_web_plugin_unittest.cc
@@ -43,6 +43,7 @@ #include "pdf/pdf_features.h" #include "pdf/pdf_ink_annotation_mode.h" #include "pdf/test/fake_annotation_agent_host.h" +#include "pdf/test/input_event_util.h" #include "pdf/test/mock_web_associated_url_loader.h" #include "pdf/test/mouse_event_builder.h" #include "pdf/test/test_helpers.h" @@ -2963,12 +2964,10 @@ // Draw some trivial strokes. plugin_->OnMessage( CreateSetAnnotationModeMessageForTesting(InkAnnotationMode::kDraw)); - TestSendInputEvent( - MouseEventBuilder().CreateLeftClickAtPosition({10, 10}).Build(), - blink::WebInputEventResult::kHandledApplication); - TestSendInputEvent( - MouseEventBuilder().CreateLeftMouseUpAtPosition({20, 20}).Build(), - blink::WebInputEventResult::kHandledApplication); + TestSendInputEvent(CreateLeftClickWebMouseEventAtPosition({10, 10}), + blink::WebInputEventResult::kHandledApplication); + TestSendInputEvent(CreateLeftClickWebMouseUpEventAtPosition({20, 20}), + blink::WebInputEventResult::kHandledApplication); } void SendThumbnail(std::string_view message_id, const gfx::SizeF& page_size) { @@ -2994,9 +2993,11 @@ ink_module_client->VisiblePageIndexFromPoint(point)); } - void TestInProgressDraw(base::FilePath::StringViewType expected_filename, - const gfx::PointF& start_position, - const gfx::PointF& end_position) { + void TestInProgressDraw( + base::FilePath::StringViewType expected_filename, + const blink::WebInputEvent& down_event, + base::span<const blink::WebInputEvent* const> move_events, + const blink::WebInputEvent& up_event) { plugin_->set_in_paint_for_testing(true); constexpr gfx::Rect kScreenRect(kCanvasSize); constexpr gfx::SizeF kPageSizeInPoints( @@ -3025,16 +3026,12 @@ EXPECT_CALL(*engine_ptr_, ApplyStroke(_, _, _)).Times(0); // The final imaging for a stroke saved to a PDF should match what was final // drawn result when it was in-progress. - TestSendInputEvent( - MouseEventBuilder().CreateLeftClickAtPosition(start_position).Build(), - blink::WebInputEventResult::kHandledApplication); - TestSendInputEvent( - MouseEventBuilder() - .SetType(blink::WebInputEvent::Type::kMouseMove) - .SetPosition(end_position) - .SetButton(blink::WebPointerProperties::Button::kLeft) - .Build(), - blink::WebInputEventResult::kHandledApplication); + TestSendInputEvent(down_event, + blink::WebInputEventResult::kHandledApplication); + for (const auto* move_event : move_events) { + TestSendInputEvent(*move_event, + blink::WebInputEventResult::kHandledApplication); + } // Draw the canvas for the in-progress stroke. plugin_->Paint(canvas_.sk_canvas(), kScreenRect); @@ -3048,9 +3045,8 @@ // callback to be applied to a PDF page. testing::Mock::VerifyAndClearExpectations(engine_ptr_); EXPECT_CALL(*engine_ptr_, ApplyStroke(/*page_index=*/0, InkStrokeId(0), _)); - TestSendInputEvent( - MouseEventBuilder().CreateLeftMouseUpAtPosition(end_position).Build(), - blink::WebInputEventResult::kHandledApplication); + TestSendInputEvent(up_event, + blink::WebInputEventResult::kHandledApplication); // Updating of `PdfViewWebPlugin::snapshot_` does not happen automatically // on the invalidate call, but later after the tasks PaintManager posted @@ -3443,10 +3439,17 @@ TEST_P(PdfViewWebPluginInkTest, DrawInProgressStroke) { plugin_->OnMessage( CreateSetAnnotationModeMessageForTesting(InkAnnotationMode::kDraw)); + static constexpr gfx::PointF kStartPosition{95.0f, 85.0f}; + static constexpr gfx::PointF kEndPosition{50.0f, 45.0f}; + blink::WebMouseEvent start_event = + CreateLeftClickWebMouseEventAtPosition(kStartPosition); + blink::WebMouseEvent move_event = + CreateLeftClickWebMouseMoveEventAtPosition(kEndPosition); + blink::WebMouseEvent end_event = + CreateLeftClickWebMouseUpEventAtPosition(kEndPosition); TestInProgressDraw( /*expected_filename=*/FILE_PATH_LITERAL("diagonal_stroke.png"), - /*start_position=*/gfx::PointF(95, 85), - /*end_position=*/gfx::PointF(50, 45)); + start_event, {&move_event}, end_event); } class PdfViewWebPluginInkTextHighlightTest : public PdfViewWebPluginInkTest { @@ -3490,15 +3493,11 @@ "highlighter", &kLightGreenBrushParams)); SetUpMouseDownMoveTextTestExpectations(); - TestSendInputEvent( - MouseEventBuilder().CreateLeftClickAtPosition(kStartTextPosition).Build(), - blink::WebInputEventResult::kHandledApplication); - TestSendInputEvent(MouseEventBuilder() - .SetType(blink::WebInputEvent::Type::kMouseMove) - .SetPosition(kEndTextPosition) - .SetButton(blink::WebPointerProperties::Button::kLeft) - .Build(), + TestSendInputEvent(CreateLeftClickWebMouseEventAtPosition(kStartTextPosition), blink::WebInputEventResult::kHandledApplication); + TestSendInputEvent( + CreateLeftClickWebMouseMoveEventAtPosition(kEndTextPosition), + blink::WebInputEventResult::kHandledApplication); EXPECT_CALL(*client_ptr_, TextSelectionChanged(_, _, _)).Times(0); @@ -3519,10 +3518,17 @@ SetUpMouseDownMoveTextTestExpectations(); + static constexpr gfx::PointF kStartPosition{55.0f, 60.0f}; + static constexpr gfx::PointF kEndPosition{75.0f, 65.0f}; + blink::WebMouseEvent start_event = + CreateLeftClickWebMouseEventAtPosition(kStartPosition); + blink::WebMouseEvent move_event = + CreateLeftClickWebMouseMoveEventAtPosition(kEndPosition); + blink::WebMouseEvent end_event = + CreateLeftClickWebMouseUpEventAtPosition(kEndPosition); TestInProgressDraw( /*expected_filename=*/FILE_PATH_LITERAL("text_highlight_stroke.png"), - /*start_position=*/gfx::PointF(55.0f, 60.0f), - /*end_position=*/gfx::PointF(75.0f, 65.0f)); + start_event, {&move_event}, end_event); } class PdfViewWebPluginInk2SaveTest : public PdfViewWebPluginSaveTest {
diff --git a/pdf/pdfium/accessibility_unittest.cc b/pdf/pdfium/accessibility_unittest.cc index a20717e..b80a28811 100644 --- a/pdf/pdfium/accessibility_unittest.cc +++ b/pdf/pdfium/accessibility_unittest.cc
@@ -211,15 +211,14 @@ engine->GetStructureTree(); ASSERT_TRUE(doc_structure); - static constexpr char kExpectedStructureTree[] = - "/S /Document\n" - "++/S /Part\n" - "++++/S /Document /Lang (en-US)\n" - "++++++/S /Art AssociatedTextRunLens={ 9 }\n" - "++++++/S /BlockQuote AssociatedTextRunLens={ 12 }\n" - "++++++/S /P AssociatedTextRunLens={ 11 }\n" - "++++++/S /H1 AssociatedTextRunLens={ 10 }\n" - "++++++/S /H2 AssociatedTextRunLens={ 8 }"; + static constexpr char kExpectedStructureTree[] = R"(/S /Document +++/S /Part +++++/S /Document /Lang (en-US) +++++++/S /Art AssociatedTextRunLens={ 9 } +++++++/S /BlockQuote AssociatedTextRunLens={ 12 } +++++++/S /P AssociatedTextRunLens={ 11 } +++++++/S /H1 AssociatedTextRunLens={ 10 } +++++++/S /H2 AssociatedTextRunLens={ 8 })"; EXPECT_EQ(kExpectedStructureTree, AccessibilityStructureElementToString(*doc_structure)); @@ -239,17 +238,13 @@ engine->GetStructureTree(); ASSERT_TRUE(doc_structure); - static constexpr char kExpectedStructureTree[] = - "/S /Document\n" - "++/S /Part\n" - "++++/S /Document\n" - "++++++/S /P\n" - "++++++++/S /Figure /Alt (Image 1) " - "AssociatedImage={page_object_index=0 bounds=380,78 67x68}\n" - "++++++++/S /Figure /Alt (Image 2) " - "AssociatedImage={page_object_index=1 bounds=380,385 27x28}\n" - "++++++++/S /Figure /Alt (Image 3) " - "AssociatedImage={page_object_index=2 bounds=380,678 1x1}"; + static constexpr char kExpectedStructureTree[] = R"(/S /Document +++/S /Part +++++/S /Document +++++++/S /P +++++++++/S /Figure /Alt (Image 1) AssociatedImage={page_object_index=0 bounds=380,78 67x68} +++++++++/S /Figure /Alt (Image 2) AssociatedImage={page_object_index=1 bounds=380,385 27x28} +++++++++/S /Figure /Alt (Image 3) AssociatedImage={page_object_index=2 bounds=380,678 1x1})"; EXPECT_EQ(kExpectedStructureTree, AccessibilityStructureElementToString(*doc_structure));
diff --git a/pdf/pdfium/pdfium_engine_unittest.cc b/pdf/pdfium/pdfium_engine_unittest.cc index 84336ae8..74772f5 100644 --- a/pdf/pdfium/pdfium_engine_unittest.cc +++ b/pdf/pdfium/pdfium_engine_unittest.cc
@@ -37,6 +37,7 @@ #include "pdf/pdfium/pdfium_engine_client.h" #include "pdf/pdfium/pdfium_page.h" #include "pdf/pdfium/pdfium_test_base.h" +#include "pdf/test/input_event_util.h" #include "pdf/test/mouse_event_builder.h" #include "pdf/test/test_client.h" #include "pdf/test/test_document_loader.h" @@ -96,16 +97,6 @@ return arg.options() == options; } -blink::WebMouseEvent CreateLeftClickWebMouseEventAtPosition( - const gfx::PointF& position) { - return MouseEventBuilder().CreateLeftClickAtPosition(position).Build(); -} - -blink::WebMouseEvent CreateLeftClickWebMouseUpEventAtPosition( - const gfx::PointF& position) { - return MouseEventBuilder().CreateLeftMouseUpAtPosition(position).Build(); -} - blink::WebMouseEvent CreateRightClickWebMouseEventAtPosition( const gfx::PointF& position) { return MouseEventBuilder() @@ -116,14 +107,6 @@ .Build(); } -blink::WebMouseEvent CreateMoveWebMouseEventToPosition( - const gfx::PointF& position) { - return MouseEventBuilder() - .SetType(blink::WebInputEvent::Type::kMouseMove) - .SetPosition(position) - .Build(); -} - std::string GetPlatformTextExpectation(std::string expectation) { #if BUILDFLAG(IS_WIN) base::ReplaceSubstringsAfterOffset(&expectation, /*start_offset=*/0, "\n",
diff --git a/pdf/test/input_event_util.cc b/pdf/test/input_event_util.cc new file mode 100644 index 0000000..efd337ec --- /dev/null +++ b/pdf/test/input_event_util.cc
@@ -0,0 +1,41 @@ +// 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 "pdf/test/input_event_util.h" + +#include "pdf/test/mouse_event_builder.h" +#include "third_party/blink/public/common/input/web_input_event.h" +#include "third_party/blink/public/common/input/web_mouse_event.h" +#include "ui/gfx/geometry/point_f.h" + +namespace chrome_pdf { + +blink::WebMouseEvent CreateLeftClickWebMouseEventAtPosition( + const gfx::PointF& position) { + return MouseEventBuilder().CreateLeftClickAtPosition(position).Build(); +} + +blink::WebMouseEvent CreateLeftClickWebMouseMoveEventAtPosition( + const gfx::PointF& point) { + return MouseEventBuilder() + .SetType(blink::WebInputEvent::Type::kMouseMove) + .SetPosition(point) + .SetButton(blink::WebPointerProperties::Button::kLeft) + .Build(); +} + +blink::WebMouseEvent CreateLeftClickWebMouseUpEventAtPosition( + const gfx::PointF& position) { + return MouseEventBuilder().CreateLeftMouseUpAtPosition(position).Build(); +} + +blink::WebMouseEvent CreateMoveWebMouseEventToPosition( + const gfx::PointF& position) { + return MouseEventBuilder() + .SetType(blink::WebInputEvent::Type::kMouseMove) + .SetPosition(position) + .Build(); +} + +} // namespace chrome_pdf
diff --git a/pdf/test/input_event_util.h b/pdf/test/input_event_util.h new file mode 100644 index 0000000..78220c1 --- /dev/null +++ b/pdf/test/input_event_util.h
@@ -0,0 +1,38 @@ +// 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 PDF_TEST_INPUT_EVENT_UTIL_H_ +#define PDF_TEST_INPUT_EVENT_UTIL_H_ + +#include "third_party/blink/public/common/input/web_mouse_event.h" + +namespace gfx { +class PointF; +} + +namespace chrome_pdf { + +// A set of utility functions to create commonly used input events. +// To build custom events, use MouseEventBuilder or instantiate the event +// directly. + +// Left button down at `position`. +blink::WebMouseEvent CreateLeftClickWebMouseEventAtPosition( + const gfx::PointF& position); + +// Move to `position` with the left button down. +blink::WebMouseEvent CreateLeftClickWebMouseMoveEventAtPosition( + const gfx::PointF& position); + +// Left button up at `position`. +blink::WebMouseEvent CreateLeftClickWebMouseUpEventAtPosition( + const gfx::PointF& position); + +// Move to `position` with no associated button. +blink::WebMouseEvent CreateMoveWebMouseEventToPosition( + const gfx::PointF& position); + +} // namespace chrome_pdf + +#endif // PDF_TEST_INPUT_EVENT_UTIL_H_
diff --git a/remoting/base/logging_linux.cc b/remoting/base/logging_linux.cc index 1d1f0a1..ef24228f 100644 --- a/remoting/base/logging_linux.cc +++ b/remoting/base/logging_linux.cc
@@ -5,6 +5,7 @@ #include "remoting/base/logging_internal.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" namespace remoting {
diff --git a/remoting/base/logging_mac.cc b/remoting/base/logging_mac.cc index ec90654..2098ca29 100644 --- a/remoting/base/logging_mac.cc +++ b/remoting/base/logging_mac.cc
@@ -5,6 +5,7 @@ #include "remoting/base/logging_internal.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" namespace remoting {
diff --git a/remoting/base/logging_win.cc b/remoting/base/logging_win.cc index ec7c71e..c1a2d9e2 100644 --- a/remoting/base/logging_win.cc +++ b/remoting/base/logging_win.cc
@@ -7,6 +7,7 @@ #include <guiddef.h> #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/logging_win.h" #include "remoting/base/logging.h"
diff --git a/remoting/client/cli/remoting_client_main.cc b/remoting/client/cli/remoting_client_main.cc index 0e41d28..84d95d5 100644 --- a/remoting/client/cli/remoting_client_main.cc +++ b/remoting/client/cli/remoting_client_main.cc
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/linux_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/run_loop.h" #include "base/strings/string_split.h"
diff --git a/remoting/host/setup/start_host_main.cc b/remoting/host/setup/start_host_main.cc index d90bcb8..77effde 100644 --- a/remoting/host/setup/start_host_main.cc +++ b/remoting/host/setup/start_host_main.cc
@@ -11,6 +11,7 @@ #include "base/command_line.h" #include "base/compiler_specific.h" #include "base/functional/bind.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/notreached.h" #include "base/run_loop.h"
diff --git a/services/audio/input_controller.h b/services/audio/input_controller.h index 67690f7..c0321ce 100644 --- a/services/audio/input_controller.h +++ b/services/audio/input_controller.h
@@ -24,10 +24,6 @@ #include "media/base/audio_processing.h" #include "media/media_buildflags.h" #include "media/mojo/mojom/audio_processing.mojom.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" #include "services/audio/loopback_mixin.h" namespace media {
diff --git a/services/audio/test/mock_log.h b/services/audio/test/mock_log.h index f91ccb7e..19ba392 100644 --- a/services/audio/test/mock_log.h +++ b/services/audio/test/mock_log.h
@@ -11,7 +11,6 @@ #include "media/base/audio_parameters.h" #include "media/mojo/mojom/audio_logging.mojom.h" #include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" #include "testing/gmock/include/gmock/gmock.h" namespace audio {
diff --git a/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc b/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc index 3a2d5c0..26aa75c 100644 --- a/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc +++ b/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc
@@ -79,6 +79,7 @@ #include "base/time/time.h" #include "base/timer/timer.h" #include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/base/load_flags.h" #include "net/cert/cert_net_fetcher.h" #include "net/http/http_request_headers.h"
diff --git a/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h b/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h index ae79bb9..a6de71f 100644 --- a/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h +++ b/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h
@@ -8,7 +8,6 @@ #include "base/component_export.h" #include "base/functional/callback_forward.h" #include "base/memory/scoped_refptr.h" -#include "mojo/public/cpp/bindings/remote.h" #include "net/cert/cert_net_fetcher.h" #include "services/network/public/mojom/url_loader_factory.mojom.h"
diff --git a/services/data_decoder/public/cpp/data_decoder.h b/services/data_decoder/public/cpp/data_decoder.h index 373d961..9493249 100644 --- a/services/data_decoder/public/cpp/data_decoder.h +++ b/services/data_decoder/public/cpp/data_decoder.h
@@ -13,7 +13,6 @@ #include "base/time/time.h" #include "base/types/expected.h" #include "base/values.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/http/structured_headers.h" #include "services/data_decoder/public/cpp/service_provider.h"
diff --git a/services/data_decoder/public/cpp/decode_image.h b/services/data_decoder/public/cpp/decode_image.h index 314f971..b4f0557e1 100644 --- a/services/data_decoder/public/cpp/decode_image.h +++ b/services/data_decoder/public/cpp/decode_image.h
@@ -8,8 +8,6 @@ #include <stdint.h> #include "base/containers/span.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/remote.h" #include "services/data_decoder/public/mojom/data_decoder_service.mojom.h" #include "services/data_decoder/public/mojom/image_decoder.mojom.h"
diff --git a/services/data_decoder/public/cpp/safe_web_bundle_parser.h b/services/data_decoder/public/cpp/safe_web_bundle_parser.h index 9bc3fac1..6b56402 100644 --- a/services/data_decoder/public/cpp/safe_web_bundle_parser.h +++ b/services/data_decoder/public/cpp/safe_web_bundle_parser.h
@@ -12,7 +12,6 @@ #include "base/files/file.h" #include "base/functional/callback.h" #include "components/web_package/mojom/web_bundle_parser.mojom.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/data_decoder/public/cpp/data_decoder.h"
diff --git a/services/device/compute_pressure/pressure_manager_impl.h b/services/device/compute_pressure/pressure_manager_impl.h index 7973f3e..cd9f1b0 100644 --- a/services/device/compute_pressure/pressure_manager_impl.h +++ b/services/device/compute_pressure/pressure_manager_impl.h
@@ -15,7 +15,6 @@ #include "base/unguessable_token.h" #include "mojo/public/cpp/bindings/associated_receiver_set.h" #include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver_set.h" #include "mojo/public/cpp/bindings/remote_set.h" #include "services/device/public/mojom/pressure_manager.mojom.h"
diff --git a/services/device/public/cpp/test/scoped_pressure_manager_overrider.h b/services/device/public/cpp/test/scoped_pressure_manager_overrider.h index e13814e..f56e170a 100644 --- a/services/device/public/cpp/test/scoped_pressure_manager_overrider.h +++ b/services/device/public/cpp/test/scoped_pressure_manager_overrider.h
@@ -10,7 +10,6 @@ #include "base/time/time.h" #include "mojo/public/cpp/bindings/associated_remote.h" #include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver_set.h" #include "mojo/public/cpp/bindings/remote_set.h" #include "services/device/public/mojom/pressure_manager.mojom.h"
diff --git a/services/device/serial/serial_port_impl.h b/services/device/serial/serial_port_impl.h index d0ee611c..96fa3ee 100644 --- a/services/device/serial/serial_port_impl.h +++ b/services/device/serial/serial_port_impl.h
@@ -7,7 +7,6 @@ #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/services/media_session/media_session_service_impl.h b/services/media_session/media_session_service_impl.h index 1a5ec1fa..ef5ef96 100644 --- a/services/media_session/media_session_service_impl.h +++ b/services/media_session/media_session_service_impl.h
@@ -8,7 +8,6 @@ #include <memory> #include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/receiver.h" #include "services/media_session/public/cpp/media_session_service.h" namespace media_session {
diff --git a/services/metrics/public/cpp/mojo_ukm_recorder.h b/services/metrics/public/cpp/mojo_ukm_recorder.h index 3c54e581..bbbc547 100644 --- a/services/metrics/public/cpp/mojo_ukm_recorder.h +++ b/services/metrics/public/cpp/mojo_ukm_recorder.h
@@ -8,7 +8,6 @@ #include <memory> #include "base/memory/weak_ptr.h" -#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/metrics/public/cpp/metrics_export.h"
diff --git a/services/metrics/public/cpp/ukm_recorder_client_interface_registry.h b/services/metrics/public/cpp/ukm_recorder_client_interface_registry.h index b80246f..ca7f072 100644 --- a/services/metrics/public/cpp/ukm_recorder_client_interface_registry.h +++ b/services/metrics/public/cpp/ukm_recorder_client_interface_registry.h
@@ -6,7 +6,6 @@ #define SERVICES_METRICS_PUBLIC_CPP_UKM_RECORDER_CLIENT_INTERFACE_REGISTRY_H_ #include "base/memory/weak_ptr.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/remote_set.h" #include "services/metrics/public/cpp/metrics_export.h" #include "services/metrics/public/mojom/ukm_interface.mojom.h"
diff --git a/services/network/cors/preflight_controller.cc b/services/network/cors/preflight_controller.cc index c5e7690..1e42b59c 100644 --- a/services/network/cors/preflight_controller.cc +++ b/services/network/cors/preflight_controller.cc
@@ -6,6 +6,7 @@ #include <algorithm> #include <optional> +#include <string> #include <vector> #include "base/functional/bind.h" @@ -483,7 +484,7 @@ has_authorization_covered_by_wildcard); } - void HandleResponseBody(std::unique_ptr<std::string> response_body) { + void HandleResponseBody(std::optional<std::string> response_body) { const int error = loader_->NetError(); const std::optional<URLLoaderCompletionStatus>& status = loader_->CompletionStatus();
diff --git a/services/network/cors/preflight_controller.h b/services/network/cors/preflight_controller.h index be0934b5..ad131ada 100644 --- a/services/network/cors/preflight_controller.h +++ b/services/network/cors/preflight_controller.h
@@ -7,6 +7,7 @@ #include <memory> #include <optional> +#include <string> #include "base/component_export.h" #include "base/containers/unique_ptr_adapters.h" @@ -15,6 +16,7 @@ #include "base/memory/weak_ptr.h" #include "base/types/expected.h" #include "base/types/strong_alias.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/cors/preflight_cache.h" #include "services/network/cors/preflight_result.h"
diff --git a/services/network/mock_mojo_dhcp_wpad_url_client.h b/services/network/mock_mojo_dhcp_wpad_url_client.h index b163ed2..77db91e 100644 --- a/services/network/mock_mojo_dhcp_wpad_url_client.h +++ b/services/network/mock_mojo_dhcp_wpad_url_client.h
@@ -8,8 +8,6 @@ #include <memory> #include <string> -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" #include "services/network/public/mojom/dhcp_wpad_url_client.mojom.h" namespace network {
diff --git a/services/network/oblivious_http_request_handler.cc b/services/network/oblivious_http_request_handler.cc index 73a66f2..e2c66e4 100644 --- a/services/network/oblivious_http_request_handler.cc +++ b/services/network/oblivious_http_request_handler.cc
@@ -6,6 +6,8 @@ #include <algorithm> #include <array> +#include <optional> +#include <string> #include "base/i18n/time_formatting.h" #include "base/rand_util.h" @@ -431,7 +433,7 @@ void ObliviousHttpRequestHandler::OnRequestComplete( mojo::RemoteSetElementId id, - std::unique_ptr<std::string> response) { + std::optional<std::string> response) { auto state_iter = client_state_.find(id); CHECK(state_iter != client_state_.end()); @@ -449,7 +451,7 @@ } auto maybe_payload = - state->ohttp_client->DecryptResponse(std::move(*response)); + state->ohttp_client->DecryptResponse(std::move(response).value()); if (!maybe_payload) { RespondWithError(id, net::ERR_INVALID_RESPONSE, /*outer_response_error_code=*/std::nullopt);
diff --git a/services/network/oblivious_http_request_handler.h b/services/network/oblivious_http_request_handler.h index 678fa48c..f2946a9 100644 --- a/services/network/oblivious_http_request_handler.h +++ b/services/network/oblivious_http_request_handler.h
@@ -5,6 +5,9 @@ #ifndef SERVICES_NETWORK_OBLIVIOUS_HTTP_REQUEST_HANDLER_H_ #define SERVICES_NETWORK_OBLIVIOUS_HTTP_REQUEST_HANDLER_H_ +#include <optional> +#include <string> + #include "mojo/public/cpp/bindings/remote_set.h" #include "services/network/public/mojom/oblivious_http_request.mojom.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" @@ -86,7 +89,7 @@ // Called by the SimpleURLLoader when the outer request has completed. // Performs steps 5 and 6 of the OHTTP request procedure above. void OnRequestComplete(mojo::RemoteSetElementId id, - std::unique_ptr<std::string> response); + std::optional<std::string> response); // Callback from TrustTokenRequestHelper::Finalize. Checks that the trust // token operation completed successfully and calls the client with the
diff --git a/services/network/public/cpp/resource_request.cc b/services/network/public/cpp/resource_request.cc index 177aa95..dd0ebad1 100644 --- a/services/network/public/cpp/resource_request.cc +++ b/services/network/public/cpp/resource_request.cc
@@ -10,6 +10,7 @@ #include "base/trace_event/typed_macros.h" #include "base/types/optional_util.h" #include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/base/load_flags.h" #include "net/log/net_log_source.h" #include "services/network/public/cpp/permissions_policy/permissions_policy.h"
diff --git a/services/network/public/cpp/resource_request.h b/services/network/public/cpp/resource_request.h index 53143c10..3fa1c79 100644 --- a/services/network/public/cpp/resource_request.h +++ b/services/network/public/cpp/resource_request.h
@@ -14,7 +14,6 @@ #include "base/debug/crash_logging.h" #include "base/memory/scoped_refptr.h" #include "base/unguessable_token.h" -#include "mojo/public/cpp/bindings/remote.h" #include "net/base/isolation_info.h" #include "net/base/request_priority.h" #include "net/cookies/site_for_cookies.h"
diff --git a/services/network/public/cpp/self_deleting_url_loader_factory.h b/services/network/public/cpp/self_deleting_url_loader_factory.h index 0fa1e531..e935a063 100644 --- a/services/network/public/cpp/self_deleting_url_loader_factory.h +++ b/services/network/public/cpp/self_deleting_url_loader_factory.h
@@ -9,7 +9,6 @@ #include "base/component_export.h" #include "base/threading/thread_checker.h" #include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver_set.h" #include "services/network/public/mojom/url_loader_factory.mojom.h"
diff --git a/services/network/public/cpp/simple_url_loader_unittest.cc b/services/network/public/cpp/simple_url_loader_unittest.cc index 7fdeb96..98f8d39 100644 --- a/services/network/public/cpp/simple_url_loader_unittest.cc +++ b/services/network/public/cpp/simple_url_loader_unittest.cc
@@ -40,6 +40,7 @@ #include "base/test/test_timeouts.h" #include "base/threading/thread_restrictions.h" #include "base/time/time.h" +#include "base/types/optional_ref.h" #include "build/build_config.h" #include "mojo/public/c/system/types.h" #include "mojo/public/cpp/bindings/pending_receiver.h" @@ -340,9 +341,9 @@ // this is just the value passed to the callback. For DownloadType::TO_FILE, // it is nullptr if an empty FilePath was passed to the callback, or the // contents of the file, otherwise. - const std::string* response_body() const { + base::optional_ref<const std::string> response_body() const { EXPECT_TRUE(done_); - return response_body_.get(); + return response_body_; } // Returns true if the callback has been invoked. @@ -383,7 +384,7 @@ } private: - void DownloadedToString(std::unique_ptr<std::string> response_body) { + void DownloadedToString(std::optional<std::string> response_body) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); EXPECT_FALSE(done_); EXPECT_EQ(DownloadType::TO_STRING, download_type_); @@ -413,8 +414,8 @@ if (!file_path.empty()) { EXPECT_TRUE(base::PathExists(file_path)); - response_body_ = std::make_unique<std::string>(); - EXPECT_TRUE(base::ReadFileToString(file_path, response_body_.get())); + response_body_ = std::make_optional<std::string>(); + EXPECT_TRUE(base::ReadFileToString(file_path, &*response_body_)); } // Can do some additional checks in the TO_FILE case. Unfortunately, in the @@ -506,7 +507,7 @@ if (success || (allow_http_error_results_ && simple_url_loader_->ResponseInfo())) { response_body_ = - std::make_unique<std::string>(download_as_stream_response_body_); + std::make_optional<std::string>(download_as_stream_response_body_); } if (destroy_loader_on_complete_) @@ -549,8 +550,8 @@ base::RunLoop run_loop_; // Response body, regardless of DownloadType. Only populated on completion. - // Null on error. - std::unique_ptr<std::string> response_body_; + // Empty on error. + std::optional<std::string> response_body_; base::OnceClosure on_destruction_callback_;
diff --git a/services/network/public/cpp/url_request_mojom_traits_unittest.cc b/services/network/public/cpp/url_request_mojom_traits_unittest.cc index f66ba75..f502995 100644 --- a/services/network/public/cpp/url_request_mojom_traits_unittest.cc +++ b/services/network/public/cpp/url_request_mojom_traits_unittest.cc
@@ -9,6 +9,7 @@ #include "base/test/gtest_util.h" #include "base/test/task_environment.h" #include "mojo/public/cpp/base/unguessable_token_mojom_traits.h" +#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/test_support/test_utils.h" #include "net/base/isolation_info.h" #include "net/base/load_flags.h"
diff --git a/services/network/sct_auditing/sct_auditing_reporter.cc b/services/network/sct_auditing/sct_auditing_reporter.cc index d4c37c1..fd24f18 100644 --- a/services/network/sct_auditing/sct_auditing_reporter.cc +++ b/services/network/sct_auditing/sct_auditing_reporter.cc
@@ -4,6 +4,9 @@ #include "services/network/sct_auditing/sct_auditing_reporter.h" +#include <optional> +#include <string> + #include "base/base64.h" #include "base/containers/contains.h" #include "base/functional/bind.h" @@ -358,7 +361,7 @@ } void SCTAuditingReporter::OnSendLookupQueryComplete( - std::unique_ptr<std::string> response_body) { + std::optional<std::string> response_body) { int response_code = 0; if (url_loader_->ResponseInfo() && url_loader_->ResponseInfo()->headers) { response_code = url_loader_->ResponseInfo()->headers->response_code();
diff --git a/services/network/sct_auditing/sct_auditing_reporter.h b/services/network/sct_auditing/sct_auditing_reporter.h index bd0634c..5286fd74 100644 --- a/services/network/sct_auditing/sct_auditing_reporter.h +++ b/services/network/sct_auditing/sct_auditing_reporter.h
@@ -7,6 +7,7 @@ #include <memory> #include <optional> +#include <string> #include "base/component_export.h" #include "base/functional/callback_forward.h" @@ -170,7 +171,7 @@ void ScheduleRequestWithBackoff(base::OnceClosure request, base::TimeDelta minimum_delay); void SendLookupQuery(); - void OnSendLookupQueryComplete(std::unique_ptr<std::string> response_body); + void OnSendLookupQueryComplete(std::optional<std::string> response_body); void SendReport(); void OnSendReportComplete(scoped_refptr<net::HttpResponseHeaders> headers); void MaybeRetryRequest();
diff --git a/services/network/test/test_network_context_client.h b/services/network/test/test_network_context_client.h index 03d5978..d8d2349 100644 --- a/services/network/test/test_network_context_client.h +++ b/services/network/test/test_network_context_client.h
@@ -6,7 +6,6 @@ #define SERVICES_NETWORK_TEST_TEST_NETWORK_CONTEXT_CLIENT_H_ #include "build/build_config.h" -#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "services/network/public/cpp/network_service_buildflags.h" #include "services/network/public/mojom/network_context_client.mojom.h"
diff --git a/services/network/tls_client_socket.h b/services/network/tls_client_socket.h index 93b7a7d7..ec5c9f05 100644 --- a/services/network/tls_client_socket.h +++ b/services/network/tls_client_socket.h
@@ -8,7 +8,6 @@ #include <memory> #include "base/component_export.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/base/address_family.h"
diff --git a/services/network/trust_tokens/trust_token_key_commitment_controller.cc b/services/network/trust_tokens/trust_token_key_commitment_controller.cc index 9c55e913..c671fadc 100644 --- a/services/network/trust_tokens/trust_token_key_commitment_controller.cc +++ b/services/network/trust_tokens/trust_token_key_commitment_controller.cc
@@ -6,6 +6,7 @@ #include <memory> #include <optional> +#include <string> #include <vector> #include "base/functional/bind.h" @@ -115,7 +116,7 @@ } void TrustTokenKeyCommitmentController::HandleResponseBody( - std::unique_ptr<std::string> response_body) { + std::optional<std::string> response_body) { DCHECK(parser_); int error = url_loader_->NetError();
diff --git a/services/network/trust_tokens/trust_token_key_commitment_controller.h b/services/network/trust_tokens/trust_token_key_commitment_controller.h index 099f7465..3b41400 100644 --- a/services/network/trust_tokens/trust_token_key_commitment_controller.h +++ b/services/network/trust_tokens/trust_token_key_commitment_controller.h
@@ -6,6 +6,8 @@ #define SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_KEY_COMMITMENT_CONTROLLER_H_ #include <memory> +#include <optional> +#include <string> #include <string_view> #include <vector> @@ -131,7 +133,7 @@ // On completion, parses the given response (if the request was // successful). Calls |completion_callback_| with an error - void HandleResponseBody(std::unique_ptr<std::string> response_body); + void HandleResponseBody(std::optional<std::string> response_body); // |url_loader_| performs the actual key commitment request. std::unique_ptr<SimpleURLLoader> url_loader_;
diff --git a/services/on_device_model/ml/on_device_model_executor.h b/services/on_device_model/ml/on_device_model_executor.h index 0b19f53..7607173 100644 --- a/services/on_device_model/ml/on_device_model_executor.h +++ b/services/on_device_model/ml/on_device_model_executor.h
@@ -18,7 +18,6 @@ #include "base/native_library.h" #include "base/types/expected.h" #include "base/types/pass_key.h" -#include "mojo/public/cpp/bindings/remote.h" #include "services/on_device_model/backend.h" #include "services/on_device_model/backend_model.h" #include "services/on_device_model/backend_session.h"
diff --git a/services/on_device_model/public/cpp/text_safety_assets.h b/services/on_device_model/public/cpp/text_safety_assets.h index 69020bf..ec9a870 100644 --- a/services/on_device_model/public/cpp/text_safety_assets.h +++ b/services/on_device_model/public/cpp/text_safety_assets.h
@@ -8,8 +8,6 @@ #include "base/component_export.h" #include "base/files/file.h" #include "base/files/file_path.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" #include "services/on_device_model/public/mojom/on_device_model.mojom.h" #include "services/on_device_model/public/mojom/on_device_model_service.mojom.h"
diff --git a/services/service_manager/public/cpp/service_executable/main.cc b/services/service_manager/public/cpp/service_executable/main.cc index 01331b4..0118d69 100644 --- a/services/service_manager/public/cpp/service_executable/main.cc +++ b/services/service_manager/public/cpp/service_executable/main.cc
@@ -12,6 +12,7 @@ #include "base/files/file_path.h" #include "base/i18n/icu_util.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/metrics/field_trial.h" #include "base/process/launch.h" #include "base/strings/string_split.h"
diff --git a/services/tracing/perfetto/test_utils.h b/services/tracing/perfetto/test_utils.h index dbd002c..d9674a77 100644 --- a/services/tracing/perfetto/test_utils.h +++ b/services/tracing/perfetto/test_utils.h
@@ -12,7 +12,6 @@ #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/test/task_environment.h" -#include "mojo/public/cpp/bindings/receiver.h" #include "services/tracing/perfetto/perfetto_service.h" #include "services/tracing/public/cpp/perfetto/perfetto_traced_process.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc index 0ceab1a8..864f8d5 100644 --- a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc +++ b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc
@@ -20,6 +20,7 @@ #include "build/build_config.h" #include "components/tracing/common/tracing_switches.h" #include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/system/data_pipe_drainer.h" #include "services/tracing/public/cpp/perfetto/shared_memory.h" #include "services/tracing/public/cpp/perfetto/trace_packet_tokenizer.h"
diff --git a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h index 96c751d0..f33e788 100644 --- a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h +++ b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h
@@ -9,7 +9,7 @@ #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" #include "base/task/sequenced_task_runner.h" -#include "mojo/public/cpp/bindings/remote.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "third_party/perfetto/include/perfetto/tracing/tracing_backend.h" namespace tracing {
diff --git a/services/tracing/public/cpp/system_tracing_service.h b/services/tracing/public/cpp/system_tracing_service.h index cb37ad5..c0c3b39 100644 --- a/services/tracing/public/cpp/system_tracing_service.h +++ b/services/tracing/public/cpp/system_tracing_service.h
@@ -8,7 +8,6 @@ #include "base/component_export.h" #include "base/sequence_checker.h" #include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/shared_remote.h" #include "services/tracing/public/mojom/system_tracing_service.mojom.h" #include "third_party/perfetto/include/perfetto/ext/base/unix_socket.h"
diff --git a/services/video_capture/ash/video_capture_device_factory_ash.h b/services/video_capture/ash/video_capture_device_factory_ash.h index 2be768e..99251f30 100644 --- a/services/video_capture/ash/video_capture_device_factory_ash.h +++ b/services/video_capture/ash/video_capture_device_factory_ash.h
@@ -12,7 +12,6 @@ #include "chromeos/crosapi/mojom/video_capture.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver_set.h" -#include "mojo/public/cpp/bindings/remote.h" #include "services/video_capture/device_factory.h" namespace crosapi {
diff --git a/services/video_capture/device_factory_impl.h b/services/video_capture/device_factory_impl.h index a4fa892c..5fa36046 100644 --- a/services/video_capture/device_factory_impl.h +++ b/services/video_capture/device_factory_impl.h
@@ -13,7 +13,6 @@ #include "media/capture/video/video_capture_system.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver.h" #include "services/video_capture/device_factory.h" #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h"
diff --git a/services/video_capture/devices_changed_notifier.h b/services/video_capture/devices_changed_notifier.h index a6ff87b8..faca3d6 100644 --- a/services/video_capture/devices_changed_notifier.h +++ b/services/video_capture/devices_changed_notifier.h
@@ -6,7 +6,6 @@ #define SERVICES_VIDEO_CAPTURE_DEVICES_CHANGED_NOTIFIER_H_ #include "base/system/system_monitor.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/remote_set.h" #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h"
diff --git a/services/video_capture/push_video_stream_subscription_impl.h b/services/video_capture/push_video_stream_subscription_impl.h index a24928e..08167cf7 100644 --- a/services/video_capture/push_video_stream_subscription_impl.h +++ b/services/video_capture/push_video_stream_subscription_impl.h
@@ -8,7 +8,6 @@ #include "base/memory/raw_ptr.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" #include "services/video_capture/device.h" #include "services/video_capture/public/mojom/video_frame_handler.mojom.h" #include "services/video_capture/public/mojom/video_source.mojom.h"
diff --git a/services/video_capture/test/mock_video_capture_device_test.h b/services/video_capture/test/mock_video_capture_device_test.h index 05a59b6..4fe95f65 100644 --- a/services/video_capture/test/mock_video_capture_device_test.h +++ b/services/video_capture/test/mock_video_capture_device_test.h
@@ -11,8 +11,6 @@ #include "media/capture/video/mock_device_factory.h" #include "media/capture/video/video_capture_device.h" #include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" #include "services/video_capture/device_factory_impl.h" #include "services/video_capture/public/cpp/mock_video_frame_handler.h" #include "services/video_capture/public/mojom/device.mojom.h"
diff --git a/services/video_capture/video_source_impl.h b/services/video_capture/video_source_impl.h index 46a7a5c39..f78bd23 100644 --- a/services/video_capture/video_source_impl.h +++ b/services/video_capture/video_source_impl.h
@@ -16,7 +16,6 @@ #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver_set.h" -#include "mojo/public/cpp/bindings/remote.h" #include "services/video_capture/broadcasting_receiver.h" #include "services/video_capture/device_factory_impl.h" #include "services/video_capture/public/mojom/device.mojom.h"
diff --git a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc index 33176c0..61527d30 100644 --- a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc +++ b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc
@@ -1212,8 +1212,8 @@ EXPECT_EQ(rect5, out_texture_draw_quad->visible_rect); EXPECT_EQ(needs_blending, out_texture_draw_quad->needs_blending); EXPECT_EQ(resource_id5, out_texture_draw_quad->resource_id); - EXPECT_EQ(uv_top_left, out_texture_draw_quad->uv_top_left); - EXPECT_EQ(uv_bottom_right, out_texture_draw_quad->uv_bottom_right); + EXPECT_EQ(gfx::BoundingRect(uv_top_left, uv_bottom_right), + out_texture_draw_quad->GetNormalizedTexCoords(gfx::Size(1, 1))); EXPECT_EQ(background_color, out_texture_draw_quad->background_color); EXPECT_EQ(nearest_neighbor, out_texture_draw_quad->nearest_neighbor); EXPECT_EQ(secure_output_only, out_texture_draw_quad->secure_output_only); @@ -1224,8 +1224,9 @@ EXPECT_EQ(rect7, out_rounded_display_mask_quad->visible_rect); EXPECT_EQ(needs_blending7, out_rounded_display_mask_quad->needs_blending); EXPECT_EQ(resource_id7, out_rounded_display_mask_quad->resource_id); - EXPECT_EQ(uv_top_left, out_rounded_display_mask_quad->uv_top_left); - EXPECT_EQ(uv_bottom_right, out_rounded_display_mask_quad->uv_bottom_right); + EXPECT_EQ( + gfx::BoundingRect(uv_top_left, uv_bottom_right), + out_rounded_display_mask_quad->GetNormalizedTexCoords(gfx::Size(1, 1))); EXPECT_EQ(origin_rounded_display_mask_radius, out_rounded_display_mask_quad->rounded_display_masks_info .radii[TextureDrawQuad::RoundedDisplayMasksInfo::
diff --git a/services/viz/public/cpp/compositing/quads_mojom_traits.cc b/services/viz/public/cpp/compositing/quads_mojom_traits.cc index 7c5f1d34..13bfa36 100644 --- a/services/viz/public/cpp/compositing/quads_mojom_traits.cc +++ b/services/viz/public/cpp/compositing/quads_mojom_traits.cc
@@ -162,8 +162,7 @@ gfx::ProtectedVideoType protected_video_type = gfx::ProtectedVideoType::kClear; viz::OverlayPriority overlay_priority_hint = viz::OverlayPriority::kLow; - if (!data.ReadUvTopLeft(&quad->uv_top_left) || - !data.ReadUvBottomRight(&quad->uv_bottom_right) || + if (!data.ReadTexCoordRect(&quad->tex_coord_rect_) || !data.ReadProtectedVideoType(&protected_video_type) || !data.ReadOverlayPriorityHint(&overlay_priority_hint) || !data.ReadRoundedDisplayMasksInfo(&quad->rounded_display_masks_info) ||
diff --git a/services/viz/public/cpp/compositing/quads_mojom_traits.h b/services/viz/public/cpp/compositing/quads_mojom_traits.h index 6eb03697..19c7725 100644 --- a/services/viz/public/cpp/compositing/quads_mojom_traits.h +++ b/services/viz/public/cpp/compositing/quads_mojom_traits.h
@@ -35,6 +35,7 @@ #include "third_party/skia/include/core/SkColor.h" #include "ui/gfx/geometry/mojom/geometry_mojom_traits.h" #include "ui/gfx/geometry/rect.h" +#include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/hdr_metadata.h" #include "ui/gfx/mojom/hdr_metadata_mojom_traits.h" @@ -415,16 +416,10 @@ return quad->rounded_display_masks_info; } - static const gfx::PointF& uv_top_left(const viz::DrawQuad& input) { + static const gfx::RectF& tex_coord_rect(const viz::DrawQuad& input) { const viz::TextureDrawQuad* quad = viz::TextureDrawQuad::MaterialCast(&input); - return quad->uv_top_left; - } - - static const gfx::PointF& uv_bottom_right(const viz::DrawQuad& input) { - const viz::TextureDrawQuad* quad = - viz::TextureDrawQuad::MaterialCast(&input); - return quad->uv_bottom_right; + return quad->tex_coord_rect_; } static SkColor4f background_color(const viz::DrawQuad& input) {
diff --git a/services/viz/public/mojom/compositing/layer.mojom b/services/viz/public/mojom/compositing/layer.mojom index ec1a5ce..f9c1d248 100644 --- a/services/viz/public/mojom/compositing/layer.mojom +++ b/services/viz/public/mojom/compositing/layer.mojom
@@ -354,9 +354,9 @@ // Updates to a transform tree, not including the nodes themselves. These // correspond to data members of cc::TransformTree. struct TransformTreeUpdate { - float page_scale_factor; - float device_scale_factor; - float device_transform_scale_factor; + float page_scale_factor = 1.0; + float device_scale_factor = 1.0; + float device_transform_scale_factor = 1.0; array<int32> nodes_affected_by_outer_viewport_bounds_delta; array<int32> nodes_affected_by_safe_area_bottom; array<StickyPositionNodeData> sticky_position_data; @@ -526,7 +526,7 @@ FilterOperations filters; FilterOperations backdrop_filters; skia.mojom.SkPath? backdrop_filter_bounds; - float backdrop_filter_quality; + float backdrop_filter_quality = 1.0; // The element id corresponding to the mask to apply to the filtered backdrop // image.
diff --git a/services/viz/public/mojom/compositing/quads.mojom b/services/viz/public/mojom/compositing/quads.mojom index 43348f7..e97e25a 100644 --- a/services/viz/public/mojom/compositing/quads.mojom +++ b/services/viz/public/mojom/compositing/quads.mojom
@@ -88,8 +88,7 @@ struct TextureQuadState { ResourceId resource_id; - gfx.mojom.PointF uv_top_left; - gfx.mojom.PointF uv_bottom_right; + gfx.mojom.RectF tex_coord_rect; skia.mojom.SkColor4f background_color; cc.mojom.DynamicRangeLimit dynamic_range_limit; bool nearest_neighbor;
diff --git a/services/webnn/webnn_object_impl.h b/services/webnn/webnn_object_impl.h index b810744..3024ce8d 100644 --- a/services/webnn/webnn_object_impl.h +++ b/services/webnn/webnn_object_impl.h
@@ -11,8 +11,6 @@ #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" #include "base/task/bind_post_task.h" -#include "mojo/public/cpp/bindings/associated_receiver.h" -#include "mojo/public/cpp/bindings/receiver.h" #include "third_party/blink/public/common/tokens/tokens.h" namespace webnn {
diff --git a/sql/fuzzers/recovery_lpm_fuzzer.cc b/sql/fuzzers/recovery_lpm_fuzzer.cc index d2c6c07..1f2515e 100644 --- a/sql/fuzzers/recovery_lpm_fuzzer.cc +++ b/sql/fuzzers/recovery_lpm_fuzzer.cc
@@ -32,6 +32,7 @@ #include "base/files/scoped_temp_dir.h" #include "base/logging.h" #include "base/logging/log_severity.h" +#include "base/logging/logging_settings.h" #include "base/strings/cstring_view.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h"
diff --git a/testing/buildbot/chrome.gpu.fyi.json b/testing/buildbot/chrome.gpu.fyi.json index 690a813..2ab1652 100644 --- a/testing/buildbot/chrome.gpu.fyi.json +++ b/testing/buildbot/chrome.gpu.fyi.json
@@ -21,6 +21,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "context_lost_passthrough_tests JACUZZI_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -51,6 +52,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "expected_color_pixel_passthrough_test JACUZZI_RELEASE_LKGM", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -81,6 +83,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "gpu_process_launch_tests JACUZZI_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -106,6 +109,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "hardware_accelerated_feature_tests JACUZZI_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -135,6 +139,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --force_high_performance_gpu", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "info_collection_tests JACUZZI_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -165,6 +170,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "pixel_skia_gold_passthrough_test JACUZZI_RELEASE_LKGM", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -196,6 +202,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "screenshot_sync_passthrough_tests JACUZZI_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -221,6 +228,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "trace_test JACUZZI_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -246,6 +254,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webcodecs_tests JACUZZI_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -273,6 +282,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle --use-angle=gles --force_high_performance_gpu", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl2_conformance_gles_passthrough_tests JACUZZI_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -300,6 +310,7 @@ "cros_board": "jacuzzi", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-angle=gles --use-cmd-decoder=passthrough --use-gl=angle --force_high_performance_gpu", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl_conformance_gles_passthrough_tests JACUZZI_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -334,6 +345,7 @@ "dut_pool": "chrome-gpu", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "noop_sleep_tests GPU_BRYA_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -367,6 +379,7 @@ "dut_pool": "chrome-gpu", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "noop_sleep_tests GPU_CORSOLA_RELEASE_LKGM", "resultdb": { "result_format": "native" @@ -400,6 +413,7 @@ "dut_pool": "chrome-gpu", "extra_browser_args": "--log-level=0 --js-flags=--expose-gc", "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "noop_sleep_tests GPU_SKYRIM_RELEASE_LKGM", "resultdb": { "result_format": "native"
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json index 33bbc4fa..4d55b92 100644 --- a/testing/buildbot/chrome.json +++ b/testing/buildbot/chrome.json
@@ -35,6 +35,7 @@ ], "dut_pool": "vmlab", "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -66,6 +67,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -86,6 +88,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -101,6 +104,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -131,6 +135,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ui/aura:aura_unittests", + "module_scheme": "gtest", "name": "aura_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -146,6 +151,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -165,6 +171,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//media/capture:capture_unittests", + "module_scheme": "gtest", "name": "capture_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -180,6 +187,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//cc:cc_unittests", + "module_scheme": "gtest", "name": "cc_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -207,6 +215,7 @@ ], "dut_pool": "vmlab", "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -238,6 +247,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -258,6 +268,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -273,6 +284,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -288,6 +300,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//crypto:crypto_unittests", + "module_scheme": "gtest", "name": "crypto_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -303,6 +316,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ui/display:display_unittests", + "module_scheme": "gtest", "name": "display_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -327,6 +341,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest", + "module_scheme": "gtest", "name": "fake_libva_driver_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -341,6 +356,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//google_apis:google_apis_unittests", + "module_scheme": "gtest", "name": "google_apis_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -356,6 +372,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ipc:ipc_tests", + "module_scheme": "gtest", "name": "ipc_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -371,6 +388,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ui/latency:latency_unittests", + "module_scheme": "gtest", "name": "latency_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -389,6 +407,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//media:media_unittests", + "module_scheme": "gtest", "name": "media_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -404,6 +423,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//media/midi:midi_unittests", + "module_scheme": "gtest", "name": "midi_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -419,6 +439,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//mojo:mojo_unittests", + "module_scheme": "gtest", "name": "mojo_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -437,6 +458,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//net:net_unittests", + "module_scheme": "gtest", "name": "net_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -455,6 +477,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ui/ozone/gl:ozone_gl_unittests", + "module_scheme": "gtest", "name": "ozone_gl_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -470,6 +493,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ui/ozone:ozone_unittests", + "module_scheme": "gtest", "name": "ozone_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -485,6 +509,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//pdf:pdf_unittests", + "module_scheme": "gtest", "name": "pdf_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -500,6 +525,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//printing:printing_unittests", + "module_scheme": "gtest", "name": "printing_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -519,6 +545,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//chrome/browser/metrics/perf:profile_provider_unittest", + "module_scheme": "gtest", "name": "profile_provider_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -534,6 +561,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//testing/rust_gtest_interop:rust_gtest_interop_unittests", + "module_scheme": "gtest", "name": "rust_gtest_interop_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -549,6 +577,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//sql:sql_unittests", + "module_scheme": "gtest", "name": "sql_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -564,6 +593,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//url:url_unittests", + "module_scheme": "gtest", "name": "url_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -584,6 +614,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//media/gpu/vaapi:vaapi_unittest", + "module_scheme": "gtest", "name": "vaapi_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -611,6 +642,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_av1 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -637,6 +669,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_vp8 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -663,6 +696,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_vp9 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -685,6 +719,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ui/aura:aura_unittests", + "module_scheme": "gtest", "name": "aura_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -700,6 +735,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -719,6 +755,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//media/capture:capture_unittests", + "module_scheme": "gtest", "name": "capture_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -734,6 +771,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//cc:cc_unittests", + "module_scheme": "gtest", "name": "cc_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -761,6 +799,7 @@ ], "dut_pool": "vmlab", "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -792,6 +831,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -812,6 +852,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -827,6 +868,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -842,6 +884,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//crypto:crypto_unittests", + "module_scheme": "gtest", "name": "crypto_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -857,6 +900,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ui/display:display_unittests", + "module_scheme": "gtest", "name": "display_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -881,6 +925,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest", + "module_scheme": "gtest", "name": "fake_libva_driver_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -895,6 +940,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//google_apis:google_apis_unittests", + "module_scheme": "gtest", "name": "google_apis_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -910,6 +956,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ipc:ipc_tests", + "module_scheme": "gtest", "name": "ipc_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -925,6 +972,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ui/latency:latency_unittests", + "module_scheme": "gtest", "name": "latency_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -943,6 +991,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//media:media_unittests", + "module_scheme": "gtest", "name": "media_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -958,6 +1007,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//media/midi:midi_unittests", + "module_scheme": "gtest", "name": "midi_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -973,6 +1023,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//mojo:mojo_unittests", + "module_scheme": "gtest", "name": "mojo_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -991,6 +1042,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//net:net_unittests", + "module_scheme": "gtest", "name": "net_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1009,6 +1061,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ui/ozone/gl:ozone_gl_unittests", + "module_scheme": "gtest", "name": "ozone_gl_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1024,6 +1077,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//ui/ozone:ozone_unittests", + "module_scheme": "gtest", "name": "ozone_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1039,6 +1093,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//pdf:pdf_unittests", + "module_scheme": "gtest", "name": "pdf_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1054,6 +1109,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//printing:printing_unittests", + "module_scheme": "gtest", "name": "printing_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1073,6 +1129,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//chrome/browser/metrics/perf:profile_provider_unittest", + "module_scheme": "gtest", "name": "profile_provider_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1088,6 +1145,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//testing/rust_gtest_interop:rust_gtest_interop_unittests", + "module_scheme": "gtest", "name": "rust_gtest_interop_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1103,6 +1161,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//sql:sql_unittests", + "module_scheme": "gtest", "name": "sql_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1118,6 +1177,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//url:url_unittests", + "module_scheme": "gtest", "name": "url_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1138,6 +1198,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//media/gpu/vaapi:vaapi_unittest", + "module_scheme": "gtest", "name": "vaapi_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1165,6 +1226,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_av1 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1191,6 +1253,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_vp8 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1217,6 +1280,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_vp9 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1247,6 +1311,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/aura:aura_unittests", + "module_scheme": "gtest", "name": "aura_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1262,6 +1327,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1281,6 +1347,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/capture:capture_unittests", + "module_scheme": "gtest", "name": "capture_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1296,6 +1363,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//cc:cc_unittests", + "module_scheme": "gtest", "name": "cc_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1323,6 +1391,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -1354,6 +1423,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -1374,6 +1444,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -1389,6 +1460,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1404,6 +1476,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//crypto:crypto_unittests", + "module_scheme": "gtest", "name": "crypto_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1419,6 +1492,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/display:display_unittests", + "module_scheme": "gtest", "name": "display_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1443,6 +1517,7 @@ "cros_model": "kano", "experiment_percentage": 100, "module_name": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest", + "module_scheme": "gtest", "name": "fake_libva_driver_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1457,6 +1532,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//google_apis:google_apis_unittests", + "module_scheme": "gtest", "name": "google_apis_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1472,6 +1548,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ipc:ipc_tests", + "module_scheme": "gtest", "name": "ipc_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1487,6 +1564,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/latency:latency_unittests", + "module_scheme": "gtest", "name": "latency_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1505,6 +1583,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media:media_unittests", + "module_scheme": "gtest", "name": "media_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1520,6 +1599,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/midi:midi_unittests", + "module_scheme": "gtest", "name": "midi_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1535,6 +1615,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//mojo:mojo_unittests", + "module_scheme": "gtest", "name": "mojo_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1553,6 +1634,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/ozone/gl:ozone_gl_unittests", + "module_scheme": "gtest", "name": "ozone_gl_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1568,6 +1650,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/ozone:ozone_unittests", + "module_scheme": "gtest", "name": "ozone_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1583,6 +1666,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//pdf:pdf_unittests", + "module_scheme": "gtest", "name": "pdf_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1598,6 +1682,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//printing:printing_unittests", + "module_scheme": "gtest", "name": "printing_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1617,6 +1702,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//chrome/browser/metrics/perf:profile_provider_unittest", + "module_scheme": "gtest", "name": "profile_provider_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1632,6 +1718,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//testing/rust_gtest_interop:rust_gtest_interop_unittests", + "module_scheme": "gtest", "name": "rust_gtest_interop_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1647,6 +1734,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//sql:sql_unittests", + "module_scheme": "gtest", "name": "sql_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1662,6 +1750,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//url:url_unittests", + "module_scheme": "gtest", "name": "url_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1681,6 +1770,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/gpu/vaapi:vaapi_unittest", + "module_scheme": "gtest", "name": "vaapi_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1708,6 +1798,7 @@ "cros_model": "kano", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_av1 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1734,6 +1825,7 @@ "cros_model": "kano", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_vp8 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1759,6 +1851,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_vp9 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1781,6 +1874,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/aura:aura_unittests", + "module_scheme": "gtest", "name": "aura_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1796,6 +1890,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1815,6 +1910,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/capture:capture_unittests", + "module_scheme": "gtest", "name": "capture_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1830,6 +1926,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//cc:cc_unittests", + "module_scheme": "gtest", "name": "cc_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1857,6 +1954,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -1888,6 +1986,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -1908,6 +2007,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -1923,6 +2023,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1938,6 +2039,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//crypto:crypto_unittests", + "module_scheme": "gtest", "name": "crypto_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1953,6 +2055,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/display:display_unittests", + "module_scheme": "gtest", "name": "display_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1977,6 +2080,7 @@ "cros_model": "kano", "experiment_percentage": 100, "module_name": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest", + "module_scheme": "gtest", "name": "fake_libva_driver_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -1991,6 +2095,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//google_apis:google_apis_unittests", + "module_scheme": "gtest", "name": "google_apis_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2006,6 +2111,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ipc:ipc_tests", + "module_scheme": "gtest", "name": "ipc_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2021,6 +2127,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/latency:latency_unittests", + "module_scheme": "gtest", "name": "latency_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2039,6 +2146,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media:media_unittests", + "module_scheme": "gtest", "name": "media_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2054,6 +2162,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/midi:midi_unittests", + "module_scheme": "gtest", "name": "midi_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2069,6 +2178,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//mojo:mojo_unittests", + "module_scheme": "gtest", "name": "mojo_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2087,6 +2197,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/ozone/gl:ozone_gl_unittests", + "module_scheme": "gtest", "name": "ozone_gl_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2102,6 +2213,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/ozone:ozone_unittests", + "module_scheme": "gtest", "name": "ozone_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2117,6 +2229,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//pdf:pdf_unittests", + "module_scheme": "gtest", "name": "pdf_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2132,6 +2245,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//printing:printing_unittests", + "module_scheme": "gtest", "name": "printing_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2151,6 +2265,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//chrome/browser/metrics/perf:profile_provider_unittest", + "module_scheme": "gtest", "name": "profile_provider_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2166,6 +2281,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//testing/rust_gtest_interop:rust_gtest_interop_unittests", + "module_scheme": "gtest", "name": "rust_gtest_interop_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2181,6 +2297,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//sql:sql_unittests", + "module_scheme": "gtest", "name": "sql_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2196,6 +2313,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//url:url_unittests", + "module_scheme": "gtest", "name": "url_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2215,6 +2333,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/gpu/vaapi:vaapi_unittest", + "module_scheme": "gtest", "name": "vaapi_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2242,6 +2361,7 @@ "cros_model": "kano", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_av1 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2268,6 +2388,7 @@ "cros_model": "kano", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_vp8 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2293,6 +2414,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_vp9 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2316,6 +2438,7 @@ "autotest_name": "chromium", "cros_board": "jacuzzi", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2342,6 +2465,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2372,6 +2496,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2391,6 +2516,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2405,6 +2531,7 @@ "autotest_name": "chromium", "cros_board": "jacuzzi", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2428,6 +2555,7 @@ "autotest_name": "chromium", "cros_board": "octopus", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2454,6 +2582,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2491,6 +2620,7 @@ ], "dut_pool": "vmlab", "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2522,6 +2652,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2542,6 +2673,7 @@ "dut_pool": "vmlab", "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2560,6 +2692,7 @@ "cros_board": "reven-vmtest", "dut_pool": "vmlab", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2583,6 +2716,7 @@ "autotest_name": "chromium", "cros_board": "trogdor", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2609,6 +2743,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2639,6 +2774,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2658,6 +2794,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2672,6 +2809,7 @@ "autotest_name": "chromium", "cros_board": "trogdor", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2698,6 +2836,7 @@ "autotest_name": "chromium", "cros_board": "volteer", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2724,6 +2863,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2754,6 +2894,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2773,6 +2914,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2787,6 +2929,7 @@ "autotest_name": "chromium", "cros_board": "volteer", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2805,6 +2948,7 @@ "autotest_name": "chromium", "cros_board": "volteer", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2831,6 +2975,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2861,6 +3006,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2880,6 +3026,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -2894,6 +3041,7 @@ "autotest_name": "chromium", "cros_board": "volteer", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -2917,6 +3065,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests", "swarming": { "dimensions": { @@ -2935,6 +3084,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome:chrome_private_code_test", + "module_scheme": "single", "name": "chrome_private_code_test", "swarming": { "dimensions": { @@ -2954,6 +3104,7 @@ "script": "//tools/perf/process_perf_results.py" }, "module_name": "//chrome/test:chrome_sizes", + "module_scheme": "single", "name": "chrome_sizes", "resultdb": { "enable": true, @@ -2977,6 +3128,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:variations_smoke_tests", + "module_scheme": "single", "name": "variations_smoke_tests", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -3012,6 +3164,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", + "module_scheme": "gtest", "name": "absl_hardening_tests", "swarming": { "dimensions": { @@ -3029,6 +3182,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/accessibility:accessibility_unittests", + "module_scheme": "gtest", "name": "accessibility_unittests", "swarming": { "dimensions": { @@ -3046,6 +3200,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//third_party/angle/src/tests:angle_unittests", + "module_scheme": "gtest", "name": "angle_unittests", "swarming": { "dimensions": { @@ -3064,6 +3219,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions/shell:app_shell_unittests", + "module_scheme": "gtest", "name": "app_shell_unittests", "swarming": { "dimensions": { @@ -3081,6 +3237,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chromeos/ash/experiences:ash_components_unittests", + "module_scheme": "gtest", "name": "ash_components_unittests", "swarming": { "dimensions": { @@ -3098,6 +3255,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ash:ash_unittests", + "module_scheme": "gtest", "name": "ash_unittests", "swarming": { "dimensions": { @@ -3116,6 +3274,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ash/webui:ash_webui_unittests", + "module_scheme": "gtest", "name": "ash_webui_unittests", "swarming": { "dimensions": { @@ -3133,6 +3292,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/aura:aura_unittests", + "module_scheme": "gtest", "name": "aura_unittests", "swarming": { "dimensions": { @@ -3150,6 +3310,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests", "swarming": { "dimensions": { @@ -3167,6 +3328,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/common:blink_common_unittests", + "module_scheme": "gtest", "name": "blink_common_unittests", "swarming": { "dimensions": { @@ -3184,6 +3346,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/platform:blink_fuzzer_unittests", + "module_scheme": "gtest", "name": "blink_fuzzer_unittests", "swarming": { "dimensions": { @@ -3201,6 +3364,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/platform/heap:blink_heap_unittests", + "module_scheme": "gtest", "name": "blink_heap_unittests", "swarming": { "dimensions": { @@ -3221,6 +3385,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/platform:blink_platform_unittests", + "module_scheme": "gtest", "name": "blink_platform_unittests", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -3243,6 +3408,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/controller:blink_unittests", + "module_scheme": "gtest", "name": "blink_unittests", "swarming": { "dimensions": { @@ -3260,6 +3426,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", + "module_scheme": "gtest", "name": "boringssl_crypto_tests", "swarming": { "dimensions": { @@ -3277,6 +3444,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", + "module_scheme": "gtest", "name": "boringssl_ssl_tests", "swarming": { "dimensions": { @@ -3297,6 +3465,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:browser_tests", + "module_scheme": "gtest", "name": "browser_tests", "swarming": { "dimensions": { @@ -3318,6 +3487,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//media/capture:capture_unittests", + "module_scheme": "gtest", "name": "capture_unittests", "swarming": { "dimensions": { @@ -3335,6 +3505,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//media/cast:cast_unittests", + "module_scheme": "gtest", "name": "cast_unittests", "swarming": { "dimensions": { @@ -3352,6 +3523,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//cc:cc_unittests", + "module_scheme": "gtest", "name": "cc_unittests", "swarming": { "dimensions": { @@ -3369,6 +3541,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:chrome_app_unittests", + "module_scheme": "gtest", "name": "chrome_app_unittests", "swarming": { "dimensions": { @@ -3386,6 +3559,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test/chromedriver:chromedriver_unittests", + "module_scheme": "gtest", "name": "chromedriver_unittests", "swarming": { "dimensions": { @@ -3403,6 +3577,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chromeos/components:chromeos_components_unittests", + "module_scheme": "gtest", "name": "chromeos_components_unittests", "swarming": { "dimensions": { @@ -3420,6 +3595,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chromeos:chromeos_unittests", + "module_scheme": "gtest", "name": "chromeos_unittests", "swarming": { "dimensions": { @@ -3437,6 +3613,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components:components_browsertests", + "module_scheme": "gtest", "name": "components_browsertests", "swarming": { "dimensions": { @@ -3454,6 +3631,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components:components_unittests", + "module_scheme": "gtest", "name": "components_unittests", "swarming": { "dimensions": { @@ -3472,6 +3650,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/compositor:compositor_unittests", + "module_scheme": "gtest", "name": "compositor_unittests", "swarming": { "dimensions": { @@ -3489,6 +3668,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//content/test:content_browsertests", + "module_scheme": "gtest", "name": "content_browsertests", "swarming": { "dimensions": { @@ -3507,6 +3687,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//content/test:content_unittests", + "module_scheme": "gtest", "name": "content_unittests", "swarming": { "dimensions": { @@ -3524,6 +3705,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/crashpad/crashpad:crashpad_tests", + "module_scheme": "gtest", "name": "crashpad_tests", "swarming": { "dimensions": { @@ -3541,6 +3723,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//crypto:crypto_unittests", + "module_scheme": "gtest", "name": "crypto_unittests", "swarming": { "dimensions": { @@ -3558,6 +3741,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//dbus:dbus_unittests", + "module_scheme": "gtest", "name": "dbus_unittests", "swarming": { "dimensions": { @@ -3575,6 +3759,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//device:device_unittests", + "module_scheme": "gtest", "name": "device_unittests", "swarming": { "dimensions": { @@ -3592,6 +3777,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/display:display_unittests", + "module_scheme": "gtest", "name": "display_unittests", "swarming": { "dimensions": { @@ -3610,6 +3796,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/leveldatabase:env_chromium_unittests", + "module_scheme": "gtest", "name": "env_chromium_unittests", "swarming": { "dimensions": { @@ -3627,6 +3814,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/events:events_unittests", + "module_scheme": "gtest", "name": "events_unittests", "swarming": { "dimensions": { @@ -3644,6 +3832,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/exo:exo_unittests", + "module_scheme": "gtest", "name": "exo_unittests", "swarming": { "dimensions": { @@ -3661,6 +3850,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions:extensions_browsertests", + "module_scheme": "gtest", "name": "extensions_browsertests", "swarming": { "dimensions": { @@ -3678,6 +3868,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions:extensions_unittests", + "module_scheme": "gtest", "name": "extensions_unittests", "swarming": { "dimensions": { @@ -3695,6 +3886,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/services/filesystem:filesystem_service_unittests", + "module_scheme": "gtest", "name": "filesystem_service_unittests", "swarming": { "dimensions": { @@ -3712,6 +3904,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//testing/libfuzzer/tests:fuzzing_unittests", + "module_scheme": "gtest", "name": "fuzzing_unittests", "swarming": { "dimensions": { @@ -3729,6 +3922,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//google_apis/gcm:gcm_unit_tests", + "module_scheme": "gtest", "name": "gcm_unit_tests", "swarming": { "dimensions": { @@ -3746,6 +3940,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/gfx:gfx_unittests", + "module_scheme": "gtest", "name": "gfx_unittests", "swarming": { "dimensions": { @@ -3763,6 +3958,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//gin:gin_unittests", + "module_scheme": "gtest", "name": "gin_unittests", "swarming": { "dimensions": { @@ -3780,6 +3976,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/gl:gl_unittests_ozone", + "module_scheme": "gtest", "name": "gl_unittests_ozone", "swarming": { "dimensions": { @@ -3797,6 +3994,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//google_apis:google_apis_unittests", + "module_scheme": "gtest", "name": "google_apis_unittests", "swarming": { "dimensions": { @@ -3814,6 +4012,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//gpu:gpu_unittests", + "module_scheme": "gtest", "name": "gpu_unittests", "swarming": { "dimensions": { @@ -3831,6 +4030,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/gwp_asan:gwp_asan_unittests", + "module_scheme": "gtest", "name": "gwp_asan_unittests", "swarming": { "dimensions": { @@ -3851,6 +4051,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:interactive_ui_tests", + "module_scheme": "gtest", "name": "interactive_ui_tests", "swarming": { "dimensions": { @@ -3869,6 +4070,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ipc:ipc_tests", + "module_scheme": "gtest", "name": "ipc_tests", "swarming": { "dimensions": { @@ -3886,6 +4088,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ash/keyboard/ui:keyboard_unittests", + "module_scheme": "gtest", "name": "keyboard_unittests", "swarming": { "dimensions": { @@ -3903,6 +4106,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/latency:latency_unittests", + "module_scheme": "gtest", "name": "latency_unittests", "swarming": { "dimensions": { @@ -3921,6 +4125,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/leveldatabase:leveldb_unittests", + "module_scheme": "gtest", "name": "leveldb_unittests", "swarming": { "dimensions": { @@ -3938,6 +4143,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/libjingle_xmpp:libjingle_xmpp_unittests", + "module_scheme": "gtest", "name": "libjingle_xmpp_unittests", "swarming": { "dimensions": { @@ -3955,6 +4161,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/liburlpattern:liburlpattern_unittests", + "module_scheme": "gtest", "name": "liburlpattern_unittests", "swarming": { "dimensions": { @@ -3972,6 +4179,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//media:media_unittests", + "module_scheme": "gtest", "name": "media_unittests", "swarming": { "dimensions": { @@ -3989,6 +4197,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/message_center:message_center_unittests", + "module_scheme": "gtest", "name": "message_center_unittests", "swarming": { "dimensions": { @@ -4006,6 +4215,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//media/midi:midi_unittests", + "module_scheme": "gtest", "name": "midi_unittests", "swarming": { "dimensions": { @@ -4023,6 +4233,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//mojo:mojo_unittests", + "module_scheme": "gtest", "name": "mojo_unittests", "swarming": { "dimensions": { @@ -4040,6 +4251,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/native_theme:native_theme_unittests", + "module_scheme": "gtest", "name": "native_theme_unittests", "swarming": { "dimensions": { @@ -4057,6 +4269,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//net:net_unittests", + "module_scheme": "gtest", "name": "net_unittests", "swarming": { "dimensions": { @@ -4077,6 +4290,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/ozone/gl:ozone_gl_unittests", + "module_scheme": "gtest", "name": "ozone_gl_unittests", "swarming": { "dimensions": { @@ -4097,6 +4311,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/ozone:ozone_unittests", + "module_scheme": "gtest", "name": "ozone_unittests", "swarming": { "dimensions": { @@ -4114,6 +4329,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/ozone:ozone_x11_unittests", + "module_scheme": "gtest", "name": "ozone_x11_unittests", "swarming": { "dimensions": { @@ -4131,6 +4347,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//pdf:pdf_unittests", + "module_scheme": "gtest", "name": "pdf_unittests", "swarming": { "dimensions": { @@ -4148,6 +4365,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/perfetto:perfetto_unittests", + "module_scheme": "gtest", "name": "perfetto_unittests", "swarming": { "dimensions": { @@ -4165,6 +4383,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//printing:printing_unittests", + "module_scheme": "gtest", "name": "printing_unittests", "swarming": { "dimensions": { @@ -4183,6 +4402,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/pthreadpool:pthreadpool_unittests", + "module_scheme": "gtest", "name": "pthreadpool_unittests", "swarming": { "dimensions": { @@ -4200,6 +4420,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//remoting:remoting_unittests", + "module_scheme": "gtest", "name": "remoting_unittests", "swarming": { "dimensions": { @@ -4217,6 +4438,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//sandbox/linux:sandbox_linux_unittests", + "module_scheme": "gtest", "name": "sandbox_linux_unittests", "swarming": { "dimensions": { @@ -4234,6 +4456,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "services_unittests", "swarming": { "dimensions": { @@ -4251,6 +4474,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/shell_dialogs:shell_dialogs_unittests", + "module_scheme": "gtest", "name": "shell_dialogs_unittests", "swarming": { "dimensions": { @@ -4268,6 +4492,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/shell-encryption:shell_encryption_unittests", + "module_scheme": "gtest", "name": "shell_encryption_unittests", "swarming": { "dimensions": { @@ -4285,6 +4510,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//skia:skia_unittests", + "module_scheme": "gtest", "name": "skia_unittests", "swarming": { "dimensions": { @@ -4302,6 +4528,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/snapshot:snapshot_unittests", + "module_scheme": "gtest", "name": "snapshot_unittests", "swarming": { "dimensions": { @@ -4319,6 +4546,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//sql:sql_unittests", + "module_scheme": "gtest", "name": "sql_unittests", "swarming": { "dimensions": { @@ -4336,6 +4564,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//storage:storage_unittests", + "module_scheme": "gtest", "name": "storage_unittests", "swarming": { "dimensions": { @@ -4353,6 +4582,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:sync_integration_tests", + "module_scheme": "gtest", "name": "sync_integration_tests", "swarming": { "dimensions": { @@ -4371,6 +4601,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/base:ui_base_unittests", + "module_scheme": "gtest", "name": "ui_base_unittests", "swarming": { "dimensions": { @@ -4388,6 +4619,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/chromeos:ui_chromeos_unittests", + "module_scheme": "gtest", "name": "ui_chromeos_unittests", "swarming": { "dimensions": { @@ -4405,6 +4637,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/touch_selection:ui_touch_selection_unittests", + "module_scheme": "gtest", "name": "ui_touch_selection_unittests", "swarming": { "dimensions": { @@ -4422,6 +4655,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/tests:ui_unittests", + "module_scheme": "gtest", "name": "ui_unittests", "swarming": { "dimensions": { @@ -4442,6 +4676,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:unit_tests", + "module_scheme": "gtest", "name": "unit_tests", "swarming": { "dimensions": { @@ -4459,6 +4694,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//url:url_unittests", + "module_scheme": "gtest", "name": "url_unittests", "swarming": { "dimensions": { @@ -4477,6 +4713,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/browser/ash/child_accounts/time_limit_consistency_test:usage_time_limit_unittests", + "module_scheme": "gtest", "name": "usage_time_limit_unittests", "swarming": { "dimensions": { @@ -4499,6 +4736,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:browser_tests", + "module_scheme": "gtest", "name": "views_ax_chromeos_browser_tests", "swarming": { "dimensions": { @@ -4516,6 +4754,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/views:views_unittests", + "module_scheme": "gtest", "name": "views_unittests", "swarming": { "dimensions": { @@ -4533,6 +4772,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/viz:viz_unittests", + "module_scheme": "gtest", "name": "viz_unittests", "swarming": { "dimensions": { @@ -4550,6 +4790,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/exo/wayland:wayland_client_perftests", + "module_scheme": "gtest", "name": "wayland_client_perftests", "swarming": { "dimensions": { @@ -4567,6 +4808,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/exo/wayland:wayland_client_tests", + "module_scheme": "gtest", "name": "wayland_client_tests", "swarming": { "dimensions": { @@ -4584,6 +4826,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/wm:wm_unittests", + "module_scheme": "gtest", "name": "wm_unittests", "swarming": { "dimensions": { @@ -4601,6 +4844,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/platform/wtf:wtf_unittests", + "module_scheme": "gtest", "name": "wtf_unittests", "swarming": { "dimensions": { @@ -4618,6 +4862,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/zlib:zlib_unittests", + "module_scheme": "gtest", "name": "zlib_unittests", "swarming": { "dimensions": { @@ -4640,6 +4885,7 @@ "script": "//tools/perf/process_perf_results.py" }, "module_name": "//chrome/test:chrome_sizes", + "module_scheme": "single", "name": "chrome_sizes", "resultdb": { "enable": true, @@ -4669,6 +4915,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "ppapi_blink_web_tests", "resultdb": { "enable": true, @@ -4702,6 +4949,7 @@ "script": "//tools/perf/process_perf_results.py" }, "module_name": "//chrome/test:chrome_sizes", + "module_scheme": "single", "name": "chrome_sizes", "resultdb": { "enable": true, @@ -4726,6 +4974,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:variations_smoke_tests", + "module_scheme": "single", "name": "variations_smoke_tests", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -4765,6 +5014,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests", "swarming": { "dimensions": { @@ -4786,6 +5036,7 @@ "script": "//tools/perf/process_perf_results.py" }, "module_name": "//chrome/test:chrome_sizes", + "module_scheme": "single", "name": "chrome_sizes", "resultdb": { "enable": true, @@ -4810,6 +5061,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:variations_smoke_tests", + "module_scheme": "single", "name": "variations_smoke_tests", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -4845,6 +5097,7 @@ "script": "//tools/perf/process_perf_results.py" }, "module_name": "//chrome/test:chrome_sizes", + "module_scheme": "single", "name": "chrome_sizes", "resultdb": { "enable": true,
diff --git a/testing/buildbot/chromeos.preuprev.json b/testing/buildbot/chromeos.preuprev.json index 7a94251..3198fa4 100644 --- a/testing/buildbot/chromeos.preuprev.json +++ b/testing/buildbot/chromeos.preuprev.json
@@ -11,6 +11,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -38,6 +39,7 @@ ], "dut_pool": "vmlab", "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -54,6 +56,7 @@ "cros_board": "betty", "dut_pool": "vmlab", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -76,6 +79,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -103,6 +107,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -119,6 +124,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -140,6 +146,7 @@ "autotest_name": "chromium", "cros_board": "jacuzzi", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -166,6 +173,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -181,6 +189,7 @@ "autotest_name": "chromium", "cros_board": "jacuzzi", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -203,6 +212,7 @@ "cros_board": "reven-vmtest", "dut_pool": "vmlab", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -230,6 +240,7 @@ ], "dut_pool": "vmlab", "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -249,6 +260,7 @@ "cros_board": "reven-vmtest", "dut_pool": "vmlab", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -270,6 +282,7 @@ "autotest_name": "chromium", "cros_board": "volteer", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -296,6 +309,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -311,6 +325,7 @@ "autotest_name": "chromium", "cros_board": "volteer", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -336,6 +351,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/abseil-cpp:absl_hardening_tests", + "module_scheme": "gtest", "name": "absl_hardening_tests", "swarming": { "dimensions": { @@ -353,6 +369,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/accessibility:accessibility_unittests", + "module_scheme": "gtest", "name": "accessibility_unittests", "swarming": { "dimensions": { @@ -370,6 +387,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//third_party/angle/src/tests:angle_unittests", + "module_scheme": "gtest", "name": "angle_unittests", "swarming": { "dimensions": { @@ -388,6 +406,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions/shell:app_shell_unittests", + "module_scheme": "gtest", "name": "app_shell_unittests", "swarming": { "dimensions": { @@ -405,6 +424,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chromeos/ash/experiences:ash_components_unittests", + "module_scheme": "gtest", "name": "ash_components_unittests", "swarming": { "dimensions": { @@ -422,6 +442,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ash:ash_unittests", + "module_scheme": "gtest", "name": "ash_unittests", "swarming": { "dimensions": { @@ -440,6 +461,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ash/webui:ash_webui_unittests", + "module_scheme": "gtest", "name": "ash_webui_unittests", "swarming": { "dimensions": { @@ -457,6 +479,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/aura:aura_unittests", + "module_scheme": "gtest", "name": "aura_unittests", "swarming": { "dimensions": { @@ -474,6 +497,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests", "swarming": { "dimensions": { @@ -491,6 +515,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/common:blink_common_unittests", + "module_scheme": "gtest", "name": "blink_common_unittests", "swarming": { "dimensions": { @@ -508,6 +533,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/platform:blink_fuzzer_unittests", + "module_scheme": "gtest", "name": "blink_fuzzer_unittests", "swarming": { "dimensions": { @@ -525,6 +551,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/platform/heap:blink_heap_unittests", + "module_scheme": "gtest", "name": "blink_heap_unittests", "swarming": { "dimensions": { @@ -545,6 +572,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/platform:blink_platform_unittests", + "module_scheme": "gtest", "name": "blink_platform_unittests", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -567,6 +595,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/controller:blink_unittests", + "module_scheme": "gtest", "name": "blink_unittests", "swarming": { "dimensions": { @@ -584,6 +613,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/boringssl:boringssl_crypto_tests", + "module_scheme": "gtest", "name": "boringssl_crypto_tests", "swarming": { "dimensions": { @@ -601,6 +631,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/boringssl:boringssl_ssl_tests", + "module_scheme": "gtest", "name": "boringssl_ssl_tests", "swarming": { "dimensions": { @@ -621,6 +652,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//media/capture:capture_unittests", + "module_scheme": "gtest", "name": "capture_unittests", "swarming": { "dimensions": { @@ -638,6 +670,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//media/cast:cast_unittests", + "module_scheme": "gtest", "name": "cast_unittests", "swarming": { "dimensions": { @@ -655,6 +688,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//cc:cc_unittests", + "module_scheme": "gtest", "name": "cc_unittests", "swarming": { "dimensions": { @@ -672,6 +706,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:chrome_app_unittests", + "module_scheme": "gtest", "name": "chrome_app_unittests", "swarming": { "dimensions": { @@ -689,6 +724,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test/chromedriver:chromedriver_unittests", + "module_scheme": "gtest", "name": "chromedriver_unittests", "swarming": { "dimensions": { @@ -706,6 +742,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chromeos/components:chromeos_components_unittests", + "module_scheme": "gtest", "name": "chromeos_components_unittests", "swarming": { "dimensions": { @@ -723,6 +760,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chromeos:chromeos_unittests", + "module_scheme": "gtest", "name": "chromeos_unittests", "swarming": { "dimensions": { @@ -740,6 +778,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components:components_browsertests", + "module_scheme": "gtest", "name": "components_browsertests", "swarming": { "dimensions": { @@ -757,6 +796,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components:components_unittests", + "module_scheme": "gtest", "name": "components_unittests", "swarming": { "dimensions": { @@ -775,6 +815,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/compositor:compositor_unittests", + "module_scheme": "gtest", "name": "compositor_unittests", "swarming": { "dimensions": { @@ -792,6 +833,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//content/test:content_unittests", + "module_scheme": "gtest", "name": "content_unittests", "swarming": { "dimensions": { @@ -809,6 +851,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/crashpad/crashpad:crashpad_tests", + "module_scheme": "gtest", "name": "crashpad_tests", "swarming": { "dimensions": { @@ -826,6 +869,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//crypto:crypto_unittests", + "module_scheme": "gtest", "name": "crypto_unittests", "swarming": { "dimensions": { @@ -843,6 +887,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//dbus:dbus_unittests", + "module_scheme": "gtest", "name": "dbus_unittests", "swarming": { "dimensions": { @@ -860,6 +905,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//device:device_unittests", + "module_scheme": "gtest", "name": "device_unittests", "swarming": { "dimensions": { @@ -877,6 +923,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/display:display_unittests", + "module_scheme": "gtest", "name": "display_unittests", "swarming": { "dimensions": { @@ -895,6 +942,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/leveldatabase:env_chromium_unittests", + "module_scheme": "gtest", "name": "env_chromium_unittests", "swarming": { "dimensions": { @@ -912,6 +960,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/events:events_unittests", + "module_scheme": "gtest", "name": "events_unittests", "swarming": { "dimensions": { @@ -929,6 +978,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/exo:exo_unittests", + "module_scheme": "gtest", "name": "exo_unittests", "swarming": { "dimensions": { @@ -946,6 +996,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions:extensions_browsertests", + "module_scheme": "gtest", "name": "extensions_browsertests", "swarming": { "dimensions": { @@ -963,6 +1014,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions:extensions_unittests", + "module_scheme": "gtest", "name": "extensions_unittests", "swarming": { "dimensions": { @@ -980,6 +1032,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/services/filesystem:filesystem_service_unittests", + "module_scheme": "gtest", "name": "filesystem_service_unittests", "swarming": { "dimensions": { @@ -997,6 +1050,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//testing/libfuzzer/tests:fuzzing_unittests", + "module_scheme": "gtest", "name": "fuzzing_unittests", "swarming": { "dimensions": { @@ -1014,6 +1068,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//google_apis/gcm:gcm_unit_tests", + "module_scheme": "gtest", "name": "gcm_unit_tests", "swarming": { "dimensions": { @@ -1031,6 +1086,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/gfx:gfx_unittests", + "module_scheme": "gtest", "name": "gfx_unittests", "swarming": { "dimensions": { @@ -1048,6 +1104,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//gin:gin_unittests", + "module_scheme": "gtest", "name": "gin_unittests", "swarming": { "dimensions": { @@ -1065,6 +1122,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/gl:gl_unittests_ozone", + "module_scheme": "gtest", "name": "gl_unittests_ozone", "swarming": { "dimensions": { @@ -1082,6 +1140,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//google_apis:google_apis_unittests", + "module_scheme": "gtest", "name": "google_apis_unittests", "swarming": { "dimensions": { @@ -1099,6 +1158,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//gpu:gpu_unittests", + "module_scheme": "gtest", "name": "gpu_unittests", "swarming": { "dimensions": { @@ -1116,6 +1176,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/gwp_asan:gwp_asan_unittests", + "module_scheme": "gtest", "name": "gwp_asan_unittests", "swarming": { "dimensions": { @@ -1133,6 +1194,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:interactive_ui_tests", + "module_scheme": "gtest", "name": "interactive_ui_tests", "swarming": { "dimensions": { @@ -1151,6 +1213,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ipc:ipc_tests", + "module_scheme": "gtest", "name": "ipc_tests", "swarming": { "dimensions": { @@ -1168,6 +1231,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ash/keyboard/ui:keyboard_unittests", + "module_scheme": "gtest", "name": "keyboard_unittests", "swarming": { "dimensions": { @@ -1185,6 +1249,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/latency:latency_unittests", + "module_scheme": "gtest", "name": "latency_unittests", "swarming": { "dimensions": { @@ -1203,6 +1268,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/leveldatabase:leveldb_unittests", + "module_scheme": "gtest", "name": "leveldb_unittests", "swarming": { "dimensions": { @@ -1220,6 +1286,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/libjingle_xmpp:libjingle_xmpp_unittests", + "module_scheme": "gtest", "name": "libjingle_xmpp_unittests", "swarming": { "dimensions": { @@ -1237,6 +1304,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/liburlpattern:liburlpattern_unittests", + "module_scheme": "gtest", "name": "liburlpattern_unittests", "swarming": { "dimensions": { @@ -1254,6 +1322,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//media:media_unittests", + "module_scheme": "gtest", "name": "media_unittests", "swarming": { "dimensions": { @@ -1271,6 +1340,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/message_center:message_center_unittests", + "module_scheme": "gtest", "name": "message_center_unittests", "swarming": { "dimensions": { @@ -1288,6 +1358,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//media/midi:midi_unittests", + "module_scheme": "gtest", "name": "midi_unittests", "swarming": { "dimensions": { @@ -1305,6 +1376,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//mojo:mojo_unittests", + "module_scheme": "gtest", "name": "mojo_unittests", "swarming": { "dimensions": { @@ -1322,6 +1394,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/native_theme:native_theme_unittests", + "module_scheme": "gtest", "name": "native_theme_unittests", "swarming": { "dimensions": { @@ -1339,6 +1412,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//net:net_unittests", + "module_scheme": "gtest", "name": "net_unittests", "swarming": { "dimensions": { @@ -1359,6 +1433,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/ozone/gl:ozone_gl_unittests", + "module_scheme": "gtest", "name": "ozone_gl_unittests", "swarming": { "dimensions": { @@ -1379,6 +1454,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/ozone:ozone_unittests", + "module_scheme": "gtest", "name": "ozone_unittests", "swarming": { "dimensions": { @@ -1396,6 +1472,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/ozone:ozone_x11_unittests", + "module_scheme": "gtest", "name": "ozone_x11_unittests", "swarming": { "dimensions": { @@ -1413,6 +1490,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//pdf:pdf_unittests", + "module_scheme": "gtest", "name": "pdf_unittests", "swarming": { "dimensions": { @@ -1430,6 +1508,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/perfetto:perfetto_unittests", + "module_scheme": "gtest", "name": "perfetto_unittests", "swarming": { "dimensions": { @@ -1447,6 +1526,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//printing:printing_unittests", + "module_scheme": "gtest", "name": "printing_unittests", "swarming": { "dimensions": { @@ -1465,6 +1545,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/pthreadpool:pthreadpool_unittests", + "module_scheme": "gtest", "name": "pthreadpool_unittests", "swarming": { "dimensions": { @@ -1482,6 +1563,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//remoting:remoting_unittests", + "module_scheme": "gtest", "name": "remoting_unittests", "swarming": { "dimensions": { @@ -1499,6 +1581,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//sandbox/linux:sandbox_linux_unittests", + "module_scheme": "gtest", "name": "sandbox_linux_unittests", "swarming": { "dimensions": { @@ -1516,6 +1599,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "services_unittests", "swarming": { "dimensions": { @@ -1533,6 +1617,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/shell_dialogs:shell_dialogs_unittests", + "module_scheme": "gtest", "name": "shell_dialogs_unittests", "swarming": { "dimensions": { @@ -1550,6 +1635,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/shell-encryption:shell_encryption_unittests", + "module_scheme": "gtest", "name": "shell_encryption_unittests", "swarming": { "dimensions": { @@ -1567,6 +1653,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//skia:skia_unittests", + "module_scheme": "gtest", "name": "skia_unittests", "swarming": { "dimensions": { @@ -1584,6 +1671,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/snapshot:snapshot_unittests", + "module_scheme": "gtest", "name": "snapshot_unittests", "swarming": { "dimensions": { @@ -1601,6 +1689,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//sql:sql_unittests", + "module_scheme": "gtest", "name": "sql_unittests", "swarming": { "dimensions": { @@ -1618,6 +1707,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//storage:storage_unittests", + "module_scheme": "gtest", "name": "storage_unittests", "swarming": { "dimensions": { @@ -1635,6 +1725,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:sync_integration_tests", + "module_scheme": "gtest", "name": "sync_integration_tests", "swarming": { "dimensions": { @@ -1653,6 +1744,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/base:ui_base_unittests", + "module_scheme": "gtest", "name": "ui_base_unittests", "swarming": { "dimensions": { @@ -1670,6 +1762,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/chromeos:ui_chromeos_unittests", + "module_scheme": "gtest", "name": "ui_chromeos_unittests", "swarming": { "dimensions": { @@ -1687,6 +1780,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/touch_selection:ui_touch_selection_unittests", + "module_scheme": "gtest", "name": "ui_touch_selection_unittests", "swarming": { "dimensions": { @@ -1704,6 +1798,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/tests:ui_unittests", + "module_scheme": "gtest", "name": "ui_unittests", "swarming": { "dimensions": { @@ -1724,6 +1819,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:unit_tests", + "module_scheme": "gtest", "name": "unit_tests", "swarming": { "dimensions": { @@ -1741,6 +1837,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//url:url_unittests", + "module_scheme": "gtest", "name": "url_unittests", "swarming": { "dimensions": { @@ -1759,6 +1856,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/browser/ash/child_accounts/time_limit_consistency_test:usage_time_limit_unittests", + "module_scheme": "gtest", "name": "usage_time_limit_unittests", "swarming": { "dimensions": { @@ -1781,6 +1879,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:browser_tests", + "module_scheme": "gtest", "name": "views_ax_chromeos_browser_tests", "swarming": { "dimensions": { @@ -1798,6 +1897,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/views:views_unittests", + "module_scheme": "gtest", "name": "views_unittests", "swarming": { "dimensions": { @@ -1815,6 +1915,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/viz:viz_unittests", + "module_scheme": "gtest", "name": "viz_unittests", "swarming": { "dimensions": { @@ -1832,6 +1933,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/exo/wayland:wayland_client_perftests", + "module_scheme": "gtest", "name": "wayland_client_perftests", "swarming": { "dimensions": { @@ -1849,6 +1951,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/exo/wayland:wayland_client_tests", + "module_scheme": "gtest", "name": "wayland_client_tests", "swarming": { "dimensions": { @@ -1866,6 +1969,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/wm:wm_unittests", + "module_scheme": "gtest", "name": "wm_unittests", "swarming": { "dimensions": { @@ -1883,6 +1987,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/platform/wtf:wtf_unittests", + "module_scheme": "gtest", "name": "wtf_unittests", "swarming": { "dimensions": { @@ -1900,6 +2005,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/zlib:zlib_unittests", + "module_scheme": "gtest", "name": "zlib_unittests", "swarming": { "dimensions": {
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index cd8978da..b0822e50 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -11,6 +11,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests", "swarming": { "dimensions": { @@ -27,6 +28,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/highway:highway_tests", + "module_scheme": "gtest", "name": "highway_tests", "swarming": { "dimensions": { @@ -48,6 +50,7 @@ "script": "//tools/perf/process_perf_results.py" }, "module_name": "//chrome/test:chrome_sizes", + "module_scheme": "single", "name": "chrome_sizes", "resultdb": { "enable": true, @@ -75,6 +78,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests", "swarming": { "dimensions": { @@ -92,6 +96,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/highway:highway_tests", + "module_scheme": "gtest", "name": "highway_tests", "swarming": { "dimensions": { @@ -114,6 +119,7 @@ "script": "//tools/perf/process_perf_results.py" }, "module_name": "//chrome/test:chrome_sizes", + "module_scheme": "single", "name": "chrome_sizes", "resultdb": { "enable": true, @@ -142,6 +148,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests", "swarming": { "dimensions": { @@ -158,6 +165,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/highway:highway_tests", + "module_scheme": "gtest", "name": "highway_tests", "swarming": { "dimensions": { @@ -179,6 +187,7 @@ "script": "//tools/perf/process_perf_results.py" }, "module_name": "//chrome/test:chrome_sizes", + "module_scheme": "single", "name": "chrome_sizes", "resultdb": { "enable": true, @@ -199,6 +208,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test/mini_installer:mini_installer_tests", + "module_scheme": "flat", "name": "mini_installer_tests", "swarming": { "dimensions": { @@ -217,6 +227,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//tools/polymer:polymer_tools_python_unittests", + "module_scheme": "pyunit", "name": "polymer_tools_python_unittests", "swarming": { "dimensions": { @@ -240,6 +251,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests", "swarming": { "dimensions": { @@ -256,6 +268,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/highway:highway_tests", + "module_scheme": "gtest", "name": "highway_tests", "swarming": { "dimensions": { @@ -277,6 +290,7 @@ "script": "//tools/perf/process_perf_results.py" }, "module_name": "//chrome/test:chrome_sizes", + "module_scheme": "single", "name": "chrome_sizes", "resultdb": { "enable": true, @@ -297,6 +311,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test/mini_installer:mini_installer_tests", + "module_scheme": "flat", "name": "mini_installer_tests", "swarming": { "dimensions": { @@ -315,6 +330,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//tools/polymer:polymer_tools_python_unittests", + "module_scheme": "pyunit", "name": "polymer_tools_python_unittests", "swarming": { "dimensions": {
diff --git a/testing/buildbot/client.devtools-frontend.integration.json b/testing/buildbot/client.devtools-frontend.integration.json index 5041d05b7..2353a3c 100644 --- a/testing/buildbot/client.devtools-frontend.integration.json +++ b/testing/buildbot/client.devtools-frontend.integration.json
@@ -11,6 +11,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/controller:blink_unittests", + "module_scheme": "gtest", "name": "blink_unittests", "swarming": { "dimensions": { @@ -29,6 +30,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:browser_tests", + "module_scheme": "gtest", "name": "devtools_browser_tests", "swarming": { "dimensions": { @@ -53,6 +55,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true, @@ -81,6 +84,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/controller:blink_unittests", + "module_scheme": "gtest", "name": "blink_unittests", "swarming": { "dimensions": { @@ -99,6 +103,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:browser_tests", + "module_scheme": "gtest", "name": "devtools_browser_tests", "swarming": { "dimensions": { @@ -123,6 +128,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true,
diff --git a/testing/buildbot/client.v8.chromium.json b/testing/buildbot/client.v8.chromium.json index f3c46d1..4c46623 100644 --- a/testing/buildbot/client.v8.chromium.json +++ b/testing/buildbot/client.v8.chromium.json
@@ -11,6 +11,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions/shell:app_shell_unittests", + "module_scheme": "gtest", "name": "app_shell_unittests", "swarming": { "dimensions": { @@ -26,6 +27,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:browser_tests", + "module_scheme": "gtest", "name": "browser_tests", "swarming": { "dimensions": { @@ -42,6 +44,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:chrome_app_unittests", + "module_scheme": "gtest", "name": "chrome_app_unittests", "swarming": { "dimensions": { @@ -57,6 +60,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test/chromedriver:chromedriver_unittests", + "module_scheme": "gtest", "name": "chromedriver_unittests", "swarming": { "dimensions": { @@ -72,6 +76,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components:components_browsertests", + "module_scheme": "gtest", "name": "components_browsertests", "swarming": { "dimensions": { @@ -87,6 +92,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components:components_unittests", + "module_scheme": "gtest", "name": "components_unittests", "swarming": { "dimensions": { @@ -102,6 +108,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/compositor:compositor_unittests", + "module_scheme": "gtest", "name": "compositor_unittests", "swarming": { "dimensions": { @@ -117,6 +124,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//content/test:content_browsertests", + "module_scheme": "gtest", "name": "content_browsertests", "swarming": { "dimensions": { @@ -132,6 +140,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//content/test:content_unittests", + "module_scheme": "gtest", "name": "content_unittests", "swarming": { "dimensions": { @@ -147,6 +156,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//device:device_unittests", + "module_scheme": "gtest", "name": "device_unittests", "swarming": { "dimensions": { @@ -162,6 +172,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions:extensions_browsertests", + "module_scheme": "gtest", "name": "extensions_browsertests", "swarming": { "dimensions": { @@ -177,6 +188,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions:extensions_unittests", + "module_scheme": "gtest", "name": "extensions_unittests", "swarming": { "dimensions": { @@ -192,6 +204,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//google_apis/gcm:gcm_unit_tests", + "module_scheme": "gtest", "name": "gcm_unit_tests", "swarming": { "dimensions": { @@ -207,6 +220,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//gin:gin_unittests", + "module_scheme": "gtest", "name": "gin_unittests", "swarming": { "dimensions": { @@ -222,6 +236,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//google_apis:google_apis_unittests", + "module_scheme": "gtest", "name": "google_apis_unittests", "swarming": { "dimensions": { @@ -237,6 +252,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//gpu:gpu_unittests", + "module_scheme": "gtest", "name": "gpu_unittests", "swarming": { "dimensions": { @@ -252,6 +268,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//headless:headless_browsertests", + "module_scheme": "gtest", "name": "headless_browsertests", "swarming": { "dimensions": { @@ -267,6 +284,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//headless:headless_unittests", + "module_scheme": "gtest", "name": "headless_unittests", "swarming": { "dimensions": { @@ -282,6 +300,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:interactive_ui_tests", + "module_scheme": "gtest", "name": "interactive_ui_tests", "swarming": { "dimensions": { @@ -297,6 +316,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//net:net_unittests", + "module_scheme": "gtest", "name": "net_unittests", "swarming": { "dimensions": { @@ -312,6 +332,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//pdf:pdf_unittests", + "module_scheme": "gtest", "name": "pdf_unittests", "swarming": { "dimensions": { @@ -327,6 +348,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//remoting:remoting_unittests", + "module_scheme": "gtest", "name": "remoting_unittests", "swarming": { "dimensions": { @@ -342,6 +364,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "services_unittests", "swarming": { "dimensions": { @@ -357,6 +380,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:sync_integration_tests", + "module_scheme": "gtest", "name": "sync_integration_tests", "swarming": { "dimensions": { @@ -373,6 +397,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:unit_tests", + "module_scheme": "gtest", "name": "unit_tests", "swarming": { "dimensions": { @@ -390,6 +415,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//content/shell:content_shell_crash_test", + "module_scheme": "single", "name": "content_shell_crash_test", "resultdb": { "enable": true, @@ -409,6 +435,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_unittests", + "module_scheme": "flat", "name": "telemetry_gpu_unittests", "resultdb": { "enable": true @@ -432,6 +459,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_perf_unittests", + "module_scheme": "pyunit", "name": "telemetry_perf_unittests", "resultdb": { "enable": true @@ -456,6 +484,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_unittests", + "module_scheme": "pyunit", "name": "telemetry_unittests", "resultdb": { "enable": true @@ -483,6 +512,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions/shell:app_shell_unittests", + "module_scheme": "gtest", "name": "app_shell_unittests", "swarming": { "dimensions": { @@ -498,6 +528,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:browser_tests", + "module_scheme": "gtest", "name": "browser_tests", "swarming": { "dimensions": { @@ -514,6 +545,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:chrome_app_unittests", + "module_scheme": "gtest", "name": "chrome_app_unittests", "swarming": { "dimensions": { @@ -529,6 +561,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test/chromedriver:chromedriver_unittests", + "module_scheme": "gtest", "name": "chromedriver_unittests", "swarming": { "dimensions": { @@ -544,6 +577,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components:components_browsertests", + "module_scheme": "gtest", "name": "components_browsertests", "swarming": { "dimensions": { @@ -559,6 +593,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components:components_unittests", + "module_scheme": "gtest", "name": "components_unittests", "swarming": { "dimensions": { @@ -574,6 +609,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//ui/compositor:compositor_unittests", + "module_scheme": "gtest", "name": "compositor_unittests", "swarming": { "dimensions": { @@ -589,6 +625,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//content/test:content_browsertests", + "module_scheme": "gtest", "name": "content_browsertests", "swarming": { "dimensions": { @@ -604,6 +641,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//content/test:content_unittests", + "module_scheme": "gtest", "name": "content_unittests", "swarming": { "dimensions": { @@ -619,6 +657,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//device:device_unittests", + "module_scheme": "gtest", "name": "device_unittests", "swarming": { "dimensions": { @@ -634,6 +673,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions:extensions_browsertests", + "module_scheme": "gtest", "name": "extensions_browsertests", "swarming": { "dimensions": { @@ -649,6 +689,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//extensions:extensions_unittests", + "module_scheme": "gtest", "name": "extensions_unittests", "swarming": { "dimensions": { @@ -664,6 +705,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//google_apis/gcm:gcm_unit_tests", + "module_scheme": "gtest", "name": "gcm_unit_tests", "swarming": { "dimensions": { @@ -679,6 +721,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//gin:gin_unittests", + "module_scheme": "gtest", "name": "gin_unittests", "swarming": { "dimensions": { @@ -694,6 +737,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//google_apis:google_apis_unittests", + "module_scheme": "gtest", "name": "google_apis_unittests", "swarming": { "dimensions": { @@ -709,6 +753,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//gpu:gpu_unittests", + "module_scheme": "gtest", "name": "gpu_unittests", "swarming": { "dimensions": { @@ -724,6 +769,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//headless:headless_browsertests", + "module_scheme": "gtest", "name": "headless_browsertests", "swarming": { "dimensions": { @@ -739,6 +785,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//headless:headless_unittests", + "module_scheme": "gtest", "name": "headless_unittests", "swarming": { "dimensions": { @@ -754,6 +801,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:interactive_ui_tests", + "module_scheme": "gtest", "name": "interactive_ui_tests", "swarming": { "dimensions": { @@ -770,6 +818,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//net:net_unittests", + "module_scheme": "gtest", "name": "net_unittests", "swarming": { "dimensions": { @@ -785,6 +834,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//pdf:pdf_unittests", + "module_scheme": "gtest", "name": "pdf_unittests", "swarming": { "dimensions": { @@ -800,6 +850,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//remoting:remoting_unittests", + "module_scheme": "gtest", "name": "remoting_unittests", "swarming": { "dimensions": { @@ -815,6 +866,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "services_unittests", "swarming": { "dimensions": { @@ -830,6 +882,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:sync_integration_tests", + "module_scheme": "gtest", "name": "sync_integration_tests", "swarming": { "dimensions": { @@ -846,6 +899,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:unit_tests", + "module_scheme": "gtest", "name": "unit_tests", "swarming": { "dimensions": { @@ -863,6 +917,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//content/shell:content_shell_crash_test", + "module_scheme": "single", "name": "content_shell_crash_test", "resultdb": { "enable": true, @@ -882,6 +937,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_unittests", + "module_scheme": "flat", "name": "telemetry_gpu_unittests", "resultdb": { "enable": true @@ -905,6 +961,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_unittests", + "module_scheme": "pyunit", "name": "telemetry_unittests", "resultdb": { "enable": true
diff --git a/testing/buildbot/client.v8.fyi.json b/testing/buildbot/client.v8.fyi.json index bf1925e..18ec65e3 100644 --- a/testing/buildbot/client.v8.fyi.json +++ b/testing/buildbot/client.v8.fyi.json
@@ -20,6 +20,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", + "module_scheme": "flat", "name": "context_lost_validating_tests", "resultdb": { "enable": true, @@ -61,6 +62,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", + "module_scheme": "flat", "name": "expected_color_pixel_validating_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -103,6 +105,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", + "module_scheme": "flat", "name": "gpu_process_launch_tests", "resultdb": { "enable": true, @@ -140,6 +143,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", + "module_scheme": "flat", "name": "hardware_accelerated_feature_tests", "resultdb": { "enable": true, @@ -181,6 +185,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", + "module_scheme": "flat", "name": "pixel_skia_gold_validating_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -224,6 +229,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", + "module_scheme": "flat", "name": "screenshot_sync_validating_tests", "resultdb": { "enable": true, @@ -261,6 +267,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", + "module_scheme": "flat", "name": "trace_test", "resultdb": { "enable": true, @@ -299,6 +306,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", + "module_scheme": "flat", "name": "webgl_conformance_gles_passthrough_tests", "resultdb": { "enable": true, @@ -338,6 +346,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", + "module_scheme": "flat", "name": "webgl_conformance_validating_tests", "resultdb": { "enable": true, @@ -386,6 +395,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "context_lost_passthrough_tests", "resultdb": { "enable": true, @@ -423,6 +433,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "expected_color_pixel_passthrough_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -461,6 +472,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "gpu_process_launch_tests", "resultdb": { "enable": true, @@ -494,6 +506,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "hardware_accelerated_feature_tests", "resultdb": { "enable": true, @@ -531,6 +544,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "pixel_skia_gold_passthrough_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -570,6 +584,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "screenshot_sync_passthrough_tests", "resultdb": { "enable": true, @@ -603,6 +618,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "trace_test", "resultdb": { "enable": true, @@ -640,6 +656,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "vulkan_pixel_skia_gold_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -678,6 +695,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webcodecs_tests", "resultdb": { "enable": true, @@ -713,6 +731,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { "enable": true, @@ -748,6 +767,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { "enable": true, @@ -786,6 +806,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "context_lost_passthrough_tests", "resultdb": { "enable": true, @@ -823,6 +844,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "expected_color_pixel_passthrough_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -861,6 +883,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "gpu_process_launch_tests", "resultdb": { "enable": true, @@ -894,6 +917,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "hardware_accelerated_feature_tests", "resultdb": { "enable": true, @@ -931,6 +955,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "pixel_skia_gold_passthrough_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -970,6 +995,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "screenshot_sync_passthrough_tests", "resultdb": { "enable": true, @@ -1003,6 +1029,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "trace_test", "resultdb": { "enable": true, @@ -1040,6 +1067,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "vulkan_pixel_skia_gold_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -1078,6 +1106,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webcodecs_tests", "resultdb": { "enable": true, @@ -1112,6 +1141,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { "enable": true, @@ -1150,6 +1180,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "context_lost_gl_passthrough_ganesh_tests", "resultdb": { "enable": true, @@ -1184,6 +1215,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "context_lost_metal_passthrough_ganesh_tests", "resultdb": { "enable": true, @@ -1218,6 +1250,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "context_lost_metal_passthrough_graphite_tests", "resultdb": { "enable": true, @@ -1256,6 +1289,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "expected_color_pixel_gl_passthrough_ganesh_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -1299,6 +1333,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "expected_color_pixel_metal_passthrough_ganesh_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -1342,6 +1377,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "expected_color_pixel_metal_passthrough_graphite_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -1381,6 +1417,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "gpu_process_launch_tests", "resultdb": { "enable": true, @@ -1415,6 +1452,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "hardware_accelerated_feature_tests", "resultdb": { "enable": true, @@ -1453,6 +1491,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "pixel_skia_gold_gl_passthrough_ganesh_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -1496,6 +1535,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "pixel_skia_gold_metal_passthrough_ganesh_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -1539,6 +1579,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "pixel_skia_gold_metal_passthrough_graphite_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -1579,6 +1620,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "screenshot_sync_gl_passthrough_ganesh_tests", "resultdb": { "enable": true, @@ -1614,6 +1656,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "screenshot_sync_metal_passthrough_ganesh_tests", "resultdb": { "enable": true, @@ -1649,6 +1692,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "screenshot_sync_metal_passthrough_graphite_tests", "resultdb": { "enable": true, @@ -1683,6 +1727,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "trace_test", "resultdb": { "enable": true, @@ -1717,6 +1762,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webcodecs_gl_passthrough_ganesh_tests", "resultdb": { "enable": true, @@ -1751,6 +1797,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webcodecs_metal_passthrough_ganesh_tests", "resultdb": { "enable": true, @@ -1785,6 +1832,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webcodecs_metal_passthrough_graphite_tests", "resultdb": { "enable": true, @@ -1820,6 +1868,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl_conformance_gl_passthrough_ganesh_tests", "resultdb": { "enable": true, @@ -1857,6 +1906,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl_conformance_metal_passthrough_ganesh_tests", "resultdb": { "enable": true, @@ -1893,6 +1943,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl_conformance_metal_passthrough_graphite_tests", "resultdb": { "enable": true, @@ -1928,6 +1979,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { "enable": true, @@ -1962,6 +2014,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webrtc_gl_passthrough_ganesh_tests", "resultdb": { "enable": true, @@ -1996,6 +2049,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webrtc_metal_passthrough_ganesh_tests", "resultdb": { "enable": true, @@ -2030,6 +2084,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webrtc_metal_passthrough_graphite_tests", "resultdb": { "enable": true, @@ -2068,6 +2123,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/controller:blink_unittests", + "module_scheme": "gtest", "name": "blink_unittests", "swarming": { "dimensions": { @@ -2092,6 +2148,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true, @@ -2120,6 +2177,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_wpt_tests", + "module_scheme": "webtest", "name": "blink_wpt_tests", "resultdb": { "enable": true, @@ -2147,6 +2205,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true, @@ -2179,6 +2238,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:headless_shell_wpt", + "module_scheme": "webtest", "name": "headless_shell_wpt_tests", "resultdb": { "enable": true, @@ -2207,6 +2267,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/controller:blink_unittests", + "module_scheme": "gtest", "name": "blink_unittests", "swarming": { "dimensions": { @@ -2231,6 +2292,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true, @@ -2259,6 +2321,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_wpt_tests", + "module_scheme": "webtest", "name": "blink_wpt_tests", "resultdb": { "enable": true, @@ -2286,6 +2349,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true, @@ -2318,6 +2382,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:headless_shell_wpt", + "module_scheme": "webtest", "name": "headless_shell_wpt_tests", "resultdb": { "enable": true, @@ -2346,6 +2411,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/controller:blink_unittests", + "module_scheme": "gtest", "name": "blink_unittests", "swarming": { "dimensions": { @@ -2371,6 +2437,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true, @@ -2400,6 +2467,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_wpt_tests", + "module_scheme": "webtest", "name": "blink_wpt_tests", "resultdb": { "enable": true, @@ -2427,6 +2495,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true, @@ -2459,6 +2528,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:headless_shell_wpt", + "module_scheme": "webtest", "name": "headless_shell_wpt_tests", "resultdb": { "enable": true, @@ -2487,6 +2557,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//third_party/blink/renderer/controller:blink_unittests", + "module_scheme": "gtest", "name": "blink_unittests", "swarming": { "dimensions": { @@ -2512,6 +2583,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true, @@ -2541,6 +2613,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_wpt_tests", + "module_scheme": "webtest", "name": "blink_wpt_tests", "resultdb": { "enable": true, @@ -2569,6 +2642,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true, @@ -2602,6 +2676,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:headless_shell_wpt", + "module_scheme": "webtest", "name": "headless_shell_wpt_tests", "resultdb": { "enable": true, @@ -2638,6 +2713,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true, @@ -2666,6 +2742,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_wpt_tests", + "module_scheme": "webtest", "name": "blink_wpt_tests", "resultdb": { "enable": true, @@ -2693,6 +2770,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true, @@ -2725,6 +2803,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:headless_shell_wpt", + "module_scheme": "webtest", "name": "headless_shell_wpt_tests", "resultdb": { "enable": true, @@ -2809,6 +2888,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "context_lost_passthrough_graphite_tests", "resultdb": { "enable": true, @@ -2843,6 +2923,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "context_lost_passthrough_tests", "resultdb": { "enable": true, @@ -2881,6 +2962,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "expected_color_pixel_passthrough_graphite_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -2924,6 +3006,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "expected_color_pixel_passthrough_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -2963,6 +3046,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "gpu_process_launch_tests", "resultdb": { "enable": true, @@ -2997,6 +3081,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "hardware_accelerated_feature_tests", "resultdb": { "enable": true, @@ -3035,6 +3120,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "pixel_skia_gold_passthrough_graphite_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -3078,6 +3164,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "pixel_skia_gold_passthrough_test", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -3118,6 +3205,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "screenshot_sync_passthrough_graphite_tests", "resultdb": { "enable": true, @@ -3153,6 +3241,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "screenshot_sync_passthrough_tests", "resultdb": { "enable": true, @@ -3187,6 +3276,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "trace_test", "resultdb": { "enable": true, @@ -3221,6 +3311,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webcodecs_tests", "resultdb": { "enable": true, @@ -3256,6 +3347,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { "enable": true, @@ -3292,6 +3384,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { "enable": true, @@ -3327,6 +3420,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", + "module_scheme": "flat", "name": "webrtc_tests", "resultdb": { "enable": true,
diff --git a/testing/buildbot/generate_buildbot_json.py b/testing/buildbot/generate_buildbot_json.py index 410f083..dad303e 100755 --- a/testing/buildbot/generate_buildbot_json.py +++ b/testing/buildbot/generate_buildbot_json.py
@@ -986,7 +986,8 @@ gn_entry = self.gn_isolate_map[result['test']] result['test_id_prefix'] = 'ninja:%s/' % gn_entry['label'] result['module_name'] = gn_entry['label'] - module_scheme = gn_entry.get('module_scheme', None) + module_scheme = test_config.get('module_scheme') or gn_entry.get( + 'module_scheme') if module_scheme: result['module_scheme'] = module_scheme @@ -1163,7 +1164,11 @@ test['test_id_prefix'] = 'ninja:%s/' % label test['module_name'] = label - module_scheme = gn_entry.get('module_scheme', None) + # Allow module_scheme in the test config to override the gn label. + # This is useful when a test suite uses a different module scheme + # than is supplied by the binary. + module_scheme = test.get('module_scheme') or gn_entry.get( + 'module_scheme') if module_scheme: test['module_scheme'] = module_scheme
diff --git a/testing/buildbot/internal.chrome.fyi.json b/testing/buildbot/internal.chrome.fyi.json index 3691137..e1499557 100644 --- a/testing/buildbot/internal.chrome.fyi.json +++ b/testing/buildbot/internal.chrome.fyi.json
@@ -13,6 +13,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test/variations:variations_desktop_smoke_tests", + "module_scheme": "flat", "name": "variations_android_smoke_tests", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -54,6 +55,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test/variations:variations_desktop_smoke_tests", + "module_scheme": "flat", "name": "variations_webview_smoke_tests", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -97,6 +99,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test/variations:variations_desktop_smoke_tests", + "module_scheme": "flat", "name": "variations_desktop_smoke_tests", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -129,6 +132,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test/variations:variations_desktop_smoke_tests", + "module_scheme": "flat", "name": "variations_desktop_smoke_tests", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -162,6 +166,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test/variations:variations_desktop_smoke_tests", + "module_scheme": "flat", "name": "variations_desktop_smoke_tests", "precommit_args": [ "--gerrit-issue=${patch_issue}",
diff --git a/testing/buildbot/internal.chromeos.fyi.json b/testing/buildbot/internal.chromeos.fyi.json index 258a804..6bfb3a3 100644 --- a/testing/buildbot/internal.chromeos.fyi.json +++ b/testing/buildbot/internal.chromeos.fyi.json
@@ -14,6 +14,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test/variations:variations_desktop_smoke_tests", + "module_scheme": "flat", "name": "variations_desktop_smoke_tests", "precommit_args": [ "--gerrit-issue=${patch_issue}", @@ -63,6 +64,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/aura:aura_unittests", + "module_scheme": "gtest", "name": "aura_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -78,6 +80,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -97,6 +100,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/capture:capture_unittests", + "module_scheme": "gtest", "name": "capture_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -112,6 +116,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//cc:cc_unittests", + "module_scheme": "gtest", "name": "cc_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -139,6 +144,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -170,6 +176,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -190,6 +197,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -205,6 +213,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -220,6 +229,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//crypto:crypto_unittests", + "module_scheme": "gtest", "name": "crypto_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -235,6 +245,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/display:display_unittests", + "module_scheme": "gtest", "name": "display_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -259,6 +270,7 @@ "cros_model": "kano", "experiment_percentage": 100, "module_name": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest", + "module_scheme": "gtest", "name": "fake_libva_driver_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -273,6 +285,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//google_apis:google_apis_unittests", + "module_scheme": "gtest", "name": "google_apis_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -288,6 +301,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ipc:ipc_tests", + "module_scheme": "gtest", "name": "ipc_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -303,6 +317,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/latency:latency_unittests", + "module_scheme": "gtest", "name": "latency_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -321,6 +336,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media:media_unittests", + "module_scheme": "gtest", "name": "media_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -336,6 +352,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/midi:midi_unittests", + "module_scheme": "gtest", "name": "midi_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -351,6 +368,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//mojo:mojo_unittests", + "module_scheme": "gtest", "name": "mojo_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -369,6 +387,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/ozone/gl:ozone_gl_unittests", + "module_scheme": "gtest", "name": "ozone_gl_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -384,6 +403,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//ui/ozone:ozone_unittests", + "module_scheme": "gtest", "name": "ozone_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -399,6 +419,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//pdf:pdf_unittests", + "module_scheme": "gtest", "name": "pdf_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -414,6 +435,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//printing:printing_unittests", + "module_scheme": "gtest", "name": "printing_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -433,6 +455,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//chrome/browser/metrics/perf:profile_provider_unittest", + "module_scheme": "gtest", "name": "profile_provider_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -448,6 +471,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//testing/rust_gtest_interop:rust_gtest_interop_unittests", + "module_scheme": "gtest", "name": "rust_gtest_interop_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -463,6 +487,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//sql:sql_unittests", + "module_scheme": "gtest", "name": "sql_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -478,6 +503,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//url:url_unittests", + "module_scheme": "gtest", "name": "url_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -497,6 +523,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/gpu/vaapi:vaapi_unittest", + "module_scheme": "gtest", "name": "vaapi_unittest RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -524,6 +551,7 @@ "cros_model": "kano", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_av1 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -550,6 +578,7 @@ "cros_model": "kano", "experiment_percentage": 100, "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_vp8 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -575,6 +604,7 @@ "cros_board": "brya", "cros_model": "kano", "module_name": "//media/gpu/test:video_decode_accelerator_tests", + "module_scheme": "gtest", "name": "video_decode_accelerator_tests_fake_vaapi_vp9 RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -601,6 +631,7 @@ "autotest_name": "chromium", "cros_board": "jacuzzi", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -627,6 +658,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -657,6 +689,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -676,6 +709,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -690,6 +724,7 @@ "autotest_name": "chromium", "cros_board": "jacuzzi", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -713,6 +748,7 @@ "autotest_name": "chromium", "cros_board": "trogdor", "module_name": "//base:base_unittests", + "module_scheme": "gtest", "name": "base_unittests RELEASE_LKGM", "resultdb": { "result_format": "gtest" @@ -739,6 +775,7 @@ "dep:no_chrome_dcheck" ], "module_name": "//chromeos:chrome_all_tast_tests", + "module_scheme": "tast", "name": "chrome_all_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -769,6 +806,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_criticalstaging_tast_tests", + "module_scheme": "tast", "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -788,6 +826,7 @@ ], "experiment_percentage": 100, "module_name": "//chromeos:chrome_disabled_tast_tests", + "module_scheme": "tast", "name": "chrome_disabled_tast_tests RELEASE_LKGM", "resultdb": { "result_format": "tast" @@ -802,6 +841,7 @@ "autotest_name": "chromium", "cros_board": "trogdor", "module_name": "//chrome/test:chromeos_integration_tests", + "module_scheme": "gtest", "name": "chromeos_integration_tests RELEASE_LKGM", "resultdb": { "result_format": "gtest"
diff --git a/testing/buildbot/internal.optimization_guide.json b/testing/buildbot/internal.optimization_guide.json index 26255489..de7a4dd6 100644 --- a/testing/buildbot/internal.optimization_guide.json +++ b/testing/buildbot/internal.optimization_guide.json
@@ -17,6 +17,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//components/optimization_guide/internal/testing:chrome_ai_wpt_tests", + "module_scheme": "webtest", "name": "chrome_ai_wpt_tests", "resultdb": { "enable": true, @@ -52,6 +53,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//components/optimization_guide/internal/testing:chrome_ai_wpt_tests", + "module_scheme": "webtest", "name": "chrome_ai_wpt_tests", "resultdb": { "enable": true, @@ -1050,6 +1052,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:browser_tests", + "module_scheme": "gtest", "name": "optimization_guide_browser_tests", "swarming": { "dimensions": { @@ -1079,6 +1082,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests iPhone 13", "swarming": { "cipd_packages": [ @@ -1119,6 +1123,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_unittests", + "module_scheme": "gtest", "name": "optimization_guide_unittests iPhone 13", "swarming": { "cipd_packages": [ @@ -1168,6 +1173,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests iPhone 14 18.2", "swarming": { "cipd_packages": [ @@ -1214,6 +1220,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_unittests", + "module_scheme": "gtest", "name": "optimization_guide_unittests iPhone 14 18.2", "swarming": { "cipd_packages": [ @@ -1259,6 +1266,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:chrome_ml_unittests", + "module_scheme": "gtest", "name": "chrome_ml_unittests", "swarming": { "dimensions": { @@ -1281,6 +1289,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests NVIDIA GeForce GTX 1660", "swarming": { "dimensions": { @@ -1306,6 +1315,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests NVIDIA GeForce GTX 1660", "swarming": { "dimensions": { @@ -1328,6 +1338,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_unittests", + "module_scheme": "gtest", "name": "optimization_guide_unittests", "swarming": { "dimensions": { @@ -1571,6 +1582,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:chrome_ml_unittests", + "module_scheme": "gtest", "name": "chrome_ml_unittests", "swarming": { "dimensions": { @@ -1591,6 +1603,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests", "swarming": { "dimensions": { @@ -1613,6 +1626,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests", "swarming": { "dimensions": { @@ -1630,6 +1644,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_unittests", + "module_scheme": "gtest", "name": "optimization_guide_unittests", "swarming": { "dimensions": { @@ -1832,6 +1847,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:chrome_ml_unittests", + "module_scheme": "gtest", "name": "chrome_ml_unittests", "swarming": { "dimensions": { @@ -1852,6 +1868,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests", "swarming": { "dimensions": { @@ -1874,6 +1891,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests", "swarming": { "dimensions": { @@ -1891,6 +1909,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_unittests", + "module_scheme": "gtest", "name": "optimization_guide_unittests", "swarming": { "dimensions": { @@ -2093,6 +2112,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:chrome_ml_unittests", + "module_scheme": "gtest", "name": "chrome_ml_unittests", "swarming": { "dimensions": { @@ -2115,6 +2135,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests", "swarming": { "dimensions": { @@ -2139,6 +2160,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests", "swarming": { "dimensions": { @@ -2158,6 +2180,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_unittests", + "module_scheme": "gtest", "name": "optimization_guide_unittests", "swarming": { "dimensions": { @@ -2294,6 +2317,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:chrome_ml_unittests", + "module_scheme": "gtest", "name": "chrome_ml_unittests", "swarming": { "dimensions": { @@ -2314,6 +2338,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests AMD Radeon RX 5500 XT", "swarming": { "dimensions": { @@ -2335,6 +2360,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests Intel UHD 630 or 770", "swarming": { "dimensions": { @@ -2356,6 +2382,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests NVIDIA GeForce GTX 1660", "swarming": { "dimensions": { @@ -2379,6 +2406,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests AMD Radeon RX 5500 XT", "swarming": { "dimensions": { @@ -2402,6 +2430,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests Intel UHD 630 or 770", "swarming": { "dimensions": { @@ -2425,6 +2454,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests NVIDIA GeForce GTX 1660", "swarming": { "dimensions": { @@ -2443,6 +2473,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_unittests", + "module_scheme": "gtest", "name": "optimization_guide_unittests", "swarming": { "dimensions": { @@ -2623,6 +2654,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:chrome_ml_unittests", + "module_scheme": "gtest", "name": "chrome_ml_unittests", "swarming": { "dimensions": { @@ -2643,6 +2675,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests AMD Radeon RX 5500 XT", "swarming": { "dimensions": { @@ -2664,6 +2697,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests Intel UHD 630 or 770", "swarming": { "dimensions": { @@ -2685,6 +2719,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests NVIDIA GeForce GTX 1660", "swarming": { "dimensions": { @@ -2708,6 +2743,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests AMD Radeon RX 5500 XT", "swarming": { "dimensions": { @@ -2731,6 +2767,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests Intel UHD 630 or 770", "swarming": { "dimensions": { @@ -2754,6 +2791,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests NVIDIA GeForce GTX 1660", "swarming": { "dimensions": { @@ -2772,6 +2810,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_unittests", + "module_scheme": "gtest", "name": "optimization_guide_unittests", "swarming": { "dimensions": { @@ -3077,6 +3116,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests", "swarming": { "dimensions": { @@ -3100,6 +3140,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests", "swarming": { "dimensions": { @@ -3130,6 +3171,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_wpt_tests", + "module_scheme": "webtest", "name": "blink_wpt_tests", "resultdb": { "enable": true, @@ -3159,6 +3201,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests", + "module_scheme": "gtest", "name": "optimization_guide_gpu_unittests", "swarming": { "dimensions": { @@ -3181,6 +3224,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//services:services_unittests", + "module_scheme": "gtest", "name": "optimization_guide_services_unittests", "swarming": { "dimensions": {
diff --git a/testing/buildbot/internal.translatekit.json b/testing/buildbot/internal.translatekit.json index a9f013e..088adf9 100644 --- a/testing/buildbot/internal.translatekit.json +++ b/testing/buildbot/internal.translatekit.json
@@ -17,6 +17,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true, @@ -52,6 +53,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true, @@ -87,6 +89,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true, @@ -122,6 +125,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true, @@ -156,6 +160,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true,
diff --git a/testing/buildbot/tryserver.devtools-frontend.json b/testing/buildbot/tryserver.devtools-frontend.json index d59c71e..89531ef3 100644 --- a/testing/buildbot/tryserver.devtools-frontend.json +++ b/testing/buildbot/tryserver.devtools-frontend.json
@@ -11,6 +11,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:browser_tests", + "module_scheme": "gtest", "name": "devtools_browser_tests", "swarming": { "dimensions": { @@ -36,6 +37,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true, @@ -64,6 +66,7 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "module_name": "//chrome/test:browser_tests", + "module_scheme": "gtest", "name": "devtools_browser_tests", "swarming": { "dimensions": { @@ -89,6 +92,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true, @@ -121,6 +125,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true,
diff --git a/testing/buildbot/tryserver.v8.json b/testing/buildbot/tryserver.v8.json index 2f95441b..0461368f 100644 --- a/testing/buildbot/tryserver.v8.json +++ b/testing/buildbot/tryserver.v8.json
@@ -15,6 +15,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "blink_web_tests", "resultdb": { "enable": true, @@ -43,6 +44,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_wpt_tests", + "module_scheme": "webtest", "name": "blink_wpt_tests", "resultdb": { "enable": true, @@ -70,6 +72,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "chrome_wpt_tests", "resultdb": { "enable": true, @@ -102,6 +105,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:headless_shell_wpt", + "module_scheme": "webtest", "name": "headless_shell_wpt_tests", "resultdb": { "enable": true, @@ -132,6 +136,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "high_dpi_blink_web_tests", "resultdb": { "enable": true, @@ -161,6 +166,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_wpt_tests", + "module_scheme": "webtest", "name": "high_dpi_blink_wpt_tests", "resultdb": { "enable": true, @@ -191,6 +197,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:headless_shell_wpt", + "module_scheme": "webtest", "name": "high_dpi_headless_shell_wpt_tests", "resultdb": { "enable": true, @@ -220,6 +227,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "not_site_per_process_blink_web_tests", "resultdb": { "enable": true, @@ -249,6 +257,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_wpt_tests", + "module_scheme": "webtest", "name": "not_site_per_process_blink_wpt_tests", "resultdb": { "enable": true, @@ -279,6 +288,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:headless_shell_wpt", + "module_scheme": "webtest", "name": "not_site_per_process_headless_shell_wpt_tests", "resultdb": { "enable": true, @@ -309,6 +319,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_web_tests", + "module_scheme": "webtest", "name": "vulkan_swiftshader_blink_web_tests", "resultdb": { "enable": true, @@ -335,6 +346,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:chrome_wpt_tests", + "module_scheme": "webtest", "name": "webdriver_wpt_tests", "resultdb": { "enable": true,
diff --git a/testing/buildbot/tryserver.webrtc.json b/testing/buildbot/tryserver.webrtc.json index cac15821..48a3394 100644 --- a/testing/buildbot/tryserver.webrtc.json +++ b/testing/buildbot/tryserver.webrtc.json
@@ -70,6 +70,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:blink_wpt_tests", + "module_scheme": "webtest", "name": "blink_wpt_tests", "resultdb": { "enable": true, @@ -110,6 +111,7 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "module_name": "//:headless_shell_wpt", + "module_scheme": "webtest", "name": "headless_shell_wpt_tests", "resultdb": { "enable": true,
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index e1a36e0..8da1b3a 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -131,25 +131,6 @@ ] } ], - "AbslFlatMapInVariantMap": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "windows", - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AbslFlatMapInVariantMap" - ] - } - ] - } - ], "AccessibilityCheckJavaNodeCacheFreshness": [ { "platforms": [ @@ -14047,6 +14028,21 @@ ] } ], + "IOSTabGridDragAndDrop": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "TabGridDragAndDrop" + ] + } + ] + } + ], "IOSTabResumptionShopCard": [ { "platforms": [ @@ -15751,199 +15747,6 @@ ] } ], - "MemoryCacheCombined": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "IP_Enabled", - "enable_features": [ - "MemoryCacheIntelligentPruning", - "MemoryCacheStrongReference", - "ReleaseResourceDecodedDataOnMemoryPressure", - "ReleaseResourceStrongReferencesOnMemoryPressure" - ], - "disable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay", - "MemoryCacheStrongReferenceExtensions" - ] - }, - { - "name": "IP_Enabled_NoPressureRelease", - "enable_features": [ - "MemoryCacheIntelligentPruning", - "MemoryCacheStrongReference" - ], - "disable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay", - "MemoryCacheStrongReferenceExtensions", - "ReleaseResourceDecodedDataOnMemoryPressure", - "ReleaseResourceStrongReferencesOnMemoryPressure" - ] - }, - { - "name": "MaxLimits1HourDelay", - "params": { - "memory_cache_strong_ref_resource_size_threshold": "104857600", - "memory_cache_strong_ref_total_size_threshold": "209715200", - "strong_reference_prune_delay": "60m" - }, - "enable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay", - "MemoryCacheStrongReference" - ], - "disable_features": [ - "MemoryCacheIntelligentPruning", - "MemoryCacheStrongReferenceExtensions", - "ReleaseResourceDecodedDataOnMemoryPressure", - "ReleaseResourceStrongReferencesOnMemoryPressure" - ] - }, - { - "name": "MaxLimits1HourDelay_HM", - "params": { - "image": "true", - "manifest": "true", - "memory_cache_strong_ref_resource_size_threshold": "104857600", - "memory_cache_strong_ref_total_size_threshold": "209715200", - "raw": "true", - "strong_reference_prune_delay": "60m", - "svg_document": "true", - "xsl_stylesheet": "true" - }, - "enable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay", - "MemoryCacheStrongReference", - "MemoryCacheStrongReferenceExtensions" - ], - "disable_features": [ - "MemoryCacheIntelligentPruning", - "ReleaseResourceDecodedDataOnMemoryPressure", - "ReleaseResourceStrongReferencesOnMemoryPressure" - ] - }, - { - "name": "Combination_HM_MaxLimits", - "params": { - "image": "true", - "manifest": "true", - "memory_cache_strong_ref_resource_size_threshold": "104857600", - "memory_cache_strong_ref_total_size_threshold": "209715200", - "raw": "true", - "strong_reference_prune_delay": "60m", - "svg_document": "true", - "xsl_stylesheet": "true" - }, - "enable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay", - "MemoryCacheIntelligentPruning", - "MemoryCacheStrongReference", - "MemoryCacheStrongReferenceExtensions" - ], - "disable_features": [ - "ReleaseResourceDecodedDataOnMemoryPressure", - "ReleaseResourceStrongReferencesOnMemoryPressure" - ] - }, - { - "name": "Combination_Image_MaxLimits", - "params": { - "image": "true", - "memory_cache_strong_ref_resource_size_threshold": "104857600", - "memory_cache_strong_ref_total_size_threshold": "209715200", - "strong_reference_prune_delay": "60m" - }, - "enable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay", - "MemoryCacheIntelligentPruning", - "MemoryCacheStrongReference", - "MemoryCacheStrongReferenceExtensions" - ], - "disable_features": [ - "ReleaseResourceDecodedDataOnMemoryPressure", - "ReleaseResourceStrongReferencesOnMemoryPressure" - ] - }, - { - "name": "Combination_HM_MaxLimits_Balanced", - "params": { - "cost_weight": "0.0005", - "freq_weight": "75.0", - "image": "true", - "manifest": "true", - "memory_cache_strong_ref_resource_size_threshold": "104857600", - "memory_cache_strong_ref_total_size_threshold": "209715200", - "raw": "true", - "strong_reference_prune_delay": "60m", - "svg_document": "true", - "type_weight": "75.0", - "xsl_stylesheet": "true" - }, - "enable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay", - "MemoryCacheIntelligentPruning", - "MemoryCacheStrongReference", - "MemoryCacheStrongReferenceExtensions" - ], - "disable_features": [ - "ReleaseResourceDecodedDataOnMemoryPressure", - "ReleaseResourceStrongReferencesOnMemoryPressure" - ] - }, - { - "name": "Combination_HM_MaxLimits_SizeAware", - "params": { - "cost_weight": "0.005", - "freq_weight": "60.0", - "image": "true", - "manifest": "true", - "memory_cache_strong_ref_resource_size_threshold": "104857600", - "memory_cache_strong_ref_total_size_threshold": "209715200", - "raw": "true", - "strong_reference_prune_delay": "60m", - "svg_document": "true", - "type_weight": "80.0", - "xsl_stylesheet": "true" - }, - "enable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay", - "MemoryCacheIntelligentPruning", - "MemoryCacheStrongReference", - "MemoryCacheStrongReferenceExtensions" - ], - "disable_features": [ - "ReleaseResourceDecodedDataOnMemoryPressure", - "ReleaseResourceStrongReferencesOnMemoryPressure" - ] - }, - { - "name": "IntelligentPruning_HM_DefaultLimits", - "params": { - "image": "true", - "manifest": "true", - "raw": "true", - "svg_document": "true", - "xsl_stylesheet": "true" - }, - "enable_features": [ - "MemoryCacheIntelligentPruning", - "MemoryCacheStrongReference", - "MemoryCacheStrongReferenceExtensions" - ], - "disable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay", - "ReleaseResourceDecodedDataOnMemoryPressure", - "ReleaseResourceStrongReferencesOnMemoryPressure" - ] - } - ] - } - ], "MemoryConsumerForNGShapeCache": [ { "platforms": [ @@ -18484,19 +18287,57 @@ { "platforms": [ "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac" + "android_webview" ], "experiments": [ { - "name": "EnabledConservative", + "name": "EnabledConservative_20251114", "params": { "MacCriticalDiskSpacePressureThresholdMB": "250" }, "enable_features": [ + "AbslFlatMapInVariantMap", + "AsyncSetCookie", + "AvoidCloneArgsOnExtensionFunctionDispatch", + "AvoidUnnecessaryGetMinimizeButtonOffset", + "AvoidUnnecessaryShouldRenderRichAnimation", + "CompressParkableStrings", + "FastPathNoRaster", + "GCOnArrayBufferAllocationFailure", + "MacAllowBackgroundingRenderProcesses", + "MacCriticalDiskSpacePressure", + "MvcUpdateViewWhenModelChanged", + "NoPreReadMainDllIfSsd", + "PageAllocatorRetryOnCommitFailure", + "ReducePPMs", + "ReloadTabUiResourcesIfChanged", + "RemoveCancelledScriptedIdleTasks", + "ScreenWinDisplayLookupByHMONITOR", + "SlimDirectReceiverIpc", + "TerminationTargetPolicy", + "UpdateDirectManipulationHelperOnParentChange" + ], + "disable_features": [ + "MemoryCacheStrongReference", + "SuppressMemoryListeners", + "SuppressMemoryMonitor" + ] + } + ] + }, + { + "platforms": [ + "chromeos", + "linux" + ], + "experiments": [ + { + "name": "EnabledConservative_20251114", + "params": { + "MacCriticalDiskSpacePressureThresholdMB": "250" + }, + "enable_features": [ + "AbslFlatMapInVariantMap", "AsyncSetCookie", "AvoidCloneArgsOnExtensionFunctionDispatch", "AvoidUnnecessaryGetMinimizeButtonOffset", @@ -18522,15 +18363,63 @@ }, { "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "EnabledConservative_20251114", + "params": { + "MacCriticalDiskSpacePressureThresholdMB": "250", + "suppress_memory_listeners_mask": "0000200200220200020020000002020000000000000000020", + "suppress_memory_monitor_mask": "00020000020000" + }, + "enable_features": [ + "AbslFlatMapInVariantMap", + "AsyncSetCookie", + "AvoidCloneArgsOnExtensionFunctionDispatch", + "AvoidUnnecessaryGetMinimizeButtonOffset", + "AvoidUnnecessaryShouldRenderRichAnimation", + "CompressParkableStrings", + "FastPathNoRaster", + "GCOnArrayBufferAllocationFailure", + "MacAllowBackgroundingRenderProcesses", + "MacCriticalDiskSpacePressure", + "MemoryCacheStrongReference", + "MvcUpdateViewWhenModelChanged", + "NoPreReadMainDllIfSsd", + "PageAllocatorRetryOnCommitFailure", + "ReducePPMs", + "ReleaseResourceDecodedDataOnMemoryPressure", + "ReleaseResourceStrongReferencesOnMemoryPressure", + "ReloadTabUiResourcesIfChanged", + "RemoveCancelledScriptedIdleTasks", + "ScreenWinDisplayLookupByHMONITOR", + "SlimDirectReceiverIpc", + "SuppressMemoryListeners", + "SuppressMemoryMonitor", + "TerminationTargetPolicy", + "UpdateDirectManipulationHelperOnParentChange" + ], + "disable_features": [ + "MemoryCacheChangeStrongReferencePruneDelay" + ] + } + ] + }, + { + "platforms": [ "windows" ], "experiments": [ { - "name": "EnabledConservative", + "name": "EnabledConservative_20251114", "params": { - "MacCriticalDiskSpacePressureThresholdMB": "250" + "MacCriticalDiskSpacePressureThresholdMB": "250", + "suppress_memory_listeners_mask": "0000200200220200020020000002020000000000000000020", + "suppress_memory_monitor_mask": "00020000020000" }, "enable_features": [ + "AbslFlatMapInVariantMap", "AsyncSetCookie", "AvoidCloneArgsOnExtensionFunctionDispatch", "AvoidUnnecessaryGetMinimizeButtonOffset", @@ -18541,16 +18430,24 @@ "GCOnArrayBufferAllocationFailure", "MacAllowBackgroundingRenderProcesses", "MacCriticalDiskSpacePressure", + "MemoryCacheStrongReference", "MvcUpdateViewWhenModelChanged", "NoPreReadMainDllIfSsd", "PageAllocatorRetryOnCommitFailure", "ReducePPMs", + "ReleaseResourceDecodedDataOnMemoryPressure", + "ReleaseResourceStrongReferencesOnMemoryPressure", "ReloadTabUiResourcesIfChanged", "RemoveCancelledScriptedIdleTasks", "ScreenWinDisplayLookupByHMONITOR", "SlimDirectReceiverIpc", + "SuppressMemoryListeners", + "SuppressMemoryMonitor", "TerminationTargetPolicy", "UpdateDirectManipulationHelperOnParentChange" + ], + "disable_features": [ + "MemoryCacheChangeStrongReferencePruneDelay" ] } ] @@ -24967,30 +24864,6 @@ ] } ], - "SuppressMemoryListeners": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "suppress_memory_listeners_mask": "0000200200220200020020000002020000000000000000020", - "suppress_memory_monitor_mask": "00020000020000" - }, - "enable_features": [ - "SuppressMemoryListeners", - "SuppressMemoryMonitor" - ] - } - ] - } - ], "SuppressesNetworkActivitiesOnSlowNetwork": [ { "platforms": [ @@ -26272,6 +26145,21 @@ ] } ], + "UseCursorEventHook": [ + { + "platforms": [ + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "UseCursorEventHook" + ] + } + ] + } + ], "UseDHCPCD10": [ { "platforms": [ @@ -28949,6 +28837,24 @@ ] } ], + "YourSavedInfoSettingsPage": [ + { + "platforms": [ + "windows", + "mac", + "linux", + "chromeos" + ], + "experiments": [ + { + "name": "Enable", + "enable_features": [ + "YourSavedInfoSettingsPage" + ] + } + ] + } + ], "ZPSPrefetchDebouncingDesktop": [ { "platforms": [
diff --git a/third_party/abseil-cpp/CMake/AbseilDll.cmake b/third_party/abseil-cpp/CMake/AbseilDll.cmake index b6a04f8..f2cc514 100644 --- a/third_party/abseil-cpp/CMake/AbseilDll.cmake +++ b/third_party/abseil-cpp/CMake/AbseilDll.cmake
@@ -127,6 +127,8 @@ "debugging/internal/address_is_readable.h" "debugging/internal/addresses.h" "debugging/internal/bounded_utf8_length_sequence.h" + "debugging/internal/borrowed_fixup_buffer.h" + "debugging/internal/borrowed_fixup_buffer.cc" "debugging/internal/decode_rust_punycode.cc" "debugging/internal/decode_rust_punycode.h" "debugging/internal/demangle.cc"
diff --git a/third_party/abseil-cpp/README.chromium b/third_party/abseil-cpp/README.chromium index ca95a2d8..8165cea 100644 --- a/third_party/abseil-cpp/README.chromium +++ b/third_party/abseil-cpp/README.chromium
@@ -4,7 +4,7 @@ License: Apache-2.0 License File: LICENSE Version: N/A -Revision: 9abb0b5196cc8c63d1cbbcfda561b5ff37c77496 +Revision: 48bf10f1429628cc2bf8d7cd122a003f322a5a04 Update Mechanism: Manual Security Critical: yes Shipped: yes
diff --git a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc index 1b8204b2..4adf591 100644 --- a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +++ b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc
@@ -81,6 +81,7 @@ capacity.store(0, std::memory_order_relaxed); size.store(0, std::memory_order_relaxed); num_erases.store(0, std::memory_order_relaxed); + num_insert_hits.store(0, std::memory_order_relaxed); num_rehashes.store(0, std::memory_order_relaxed); max_probe_length.store(0, std::memory_order_relaxed); total_probe_length.store(0, std::memory_order_relaxed);
diff --git a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h index 5c59a9e..163b18a 100644 --- a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +++ b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h
@@ -82,6 +82,7 @@ std::atomic<size_t> capacity; std::atomic<size_t> size; std::atomic<size_t> num_erases; + std::atomic<size_t> num_insert_hits; std::atomic<size_t> num_rehashes; std::atomic<size_t> max_probe_length; std::atomic<size_t> total_probe_length; @@ -111,6 +112,16 @@ void RecordRehashSlow(HashtablezInfo* info, size_t total_probe_length); +// This is inline to avoid calling convention overhead for an otherwise +// lightweight operation. +inline void RecordInsertHitSlow(HashtablezInfo* info) { + // We avoid fetch_add since no other thread should be mutating the table + // simultaneously without synchronization. + info->num_insert_hits.store( + info->num_insert_hits.load(std::memory_order_relaxed) + 1, + std::memory_order_relaxed); +} + void RecordReservationSlow(HashtablezInfo* info, size_t target_capacity); void RecordClearedReservationSlow(HashtablezInfo* info); @@ -184,6 +195,11 @@ RecordEraseSlow(info_); } + inline void RecordInsertHit() { + if (ABSL_PREDICT_TRUE(info_ == nullptr)) return; + RecordInsertHitSlow(info_); + } + friend inline void swap(HashtablezInfoHandle& lhs, HashtablezInfoHandle& rhs) { std::swap(lhs.info_, rhs.info_); @@ -210,6 +226,7 @@ inline void RecordInsertMiss(size_t /*hash*/, size_t /*distance_from_desired*/) {} inline void RecordErase() {} + inline void RecordInsertHit() {} friend inline void swap(HashtablezInfoHandle& /*lhs*/, HashtablezInfoHandle& /*rhs*/) {}
diff --git a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc index 80fe3cf..cbd8edca 100644 --- a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +++ b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc
@@ -99,6 +99,7 @@ EXPECT_EQ(info.capacity.load(), 0); EXPECT_EQ(info.size.load(), 0); EXPECT_EQ(info.num_erases.load(), 0); + EXPECT_EQ(info.num_insert_hits.load(), 0); EXPECT_EQ(info.num_rehashes.load(), 0); EXPECT_EQ(info.max_probe_length.load(), 0); EXPECT_EQ(info.total_probe_length.load(), 0); @@ -116,6 +117,7 @@ info.capacity.store(1, std::memory_order_relaxed); info.size.store(1, std::memory_order_relaxed); info.num_erases.store(1, std::memory_order_relaxed); + info.num_insert_hits.store(1, std::memory_order_relaxed); info.max_probe_length.store(1, std::memory_order_relaxed); info.total_probe_length.store(1, std::memory_order_relaxed); info.hashes_bitwise_or.store(1, std::memory_order_relaxed); @@ -131,6 +133,7 @@ EXPECT_EQ(info.capacity.load(), 0); EXPECT_EQ(info.size.load(), 0); EXPECT_EQ(info.num_erases.load(), 0); + EXPECT_EQ(info.num_insert_hits.load(), 0); EXPECT_EQ(info.num_rehashes.load(), 0); EXPECT_EQ(info.max_probe_length.load(), 0); EXPECT_EQ(info.total_probe_length.load(), 0); @@ -221,6 +224,25 @@ EXPECT_EQ(info.soo_capacity, 1); } +TEST(HashtablezInfoTest, RecordInsertHit) { + const int64_t test_stride = 31; + const size_t test_element_size = 29; + const size_t test_key_size = 27; + const size_t test_value_size = 25; + + HashtablezInfo info; + absl::MutexLock l(info.init_mu); + info.PrepareForSampling(test_stride, test_element_size, + /*key_size=*/test_key_size, + /*value_size=*/test_value_size, + /*soo_capacity_value=*/1); + EXPECT_EQ(info.num_insert_hits.load(), 0); + RecordInsertHitSlow(&info); + EXPECT_EQ(info.num_insert_hits.load(), 1); + RecordInsertHitSlow(&info); + EXPECT_EQ(info.num_insert_hits.load(), 2); +} + TEST(HashtablezInfoTest, RecordRehash) { const int64_t test_stride = 33; const size_t test_element_size = 31;
diff --git a/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h index faa7880..31b117e 100644 --- a/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +++ b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
@@ -3173,6 +3173,7 @@ } if (!empty()) { if (equal_to(key, single_slot())) { + common().infoz().RecordInsertHit(); return {single_iterator(), false}; } } @@ -3204,6 +3205,7 @@ if (ABSL_PREDICT_TRUE(equal_to(key, slot_array() + seq.offset(i)))) { index = seq.offset(i); inserted = false; + common().infoz().RecordInsertHit(); return; } }
diff --git a/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc b/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc index 499e966..8c804631 100644 --- a/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +++ b/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc
@@ -2790,6 +2790,7 @@ absl::flat_hash_set<const HashtablezInfo*> preexisting_info(10); absl::flat_hash_map<size_t, int> observed_checksums(10); absl::flat_hash_map<ssize_t, int> reservations(10); + absl::flat_hash_map<std::pair<size_t, size_t>, int> hit_misses(10); start_size += sampler.Iterate([&](const HashtablezInfo& info) { preexisting_info.insert(&info); @@ -2802,6 +2803,8 @@ const bool do_reserve = (i % 10 > 5); const bool do_rehash = !do_reserve && (i % 10 > 0); + const bool do_first_insert_hit = i % 2 == 0; + const bool do_second_insert_hit = i % 4 == 0; if (do_reserve) { // Don't reserve on all tables. @@ -2809,7 +2812,14 @@ } tables.back().insert(1); + if (do_first_insert_hit) { + tables.back().insert(1); + tables.back().insert(1); + } tables.back().insert(i % 5); + if (do_second_insert_hit) { + tables.back().insert(i % 5); + } if (do_rehash) { // Rehash some other tables. @@ -2823,6 +2833,10 @@ observed_checksums[info.hashes_bitwise_xor.load( std::memory_order_relaxed)]++; reservations[info.max_reserve.load(std::memory_order_relaxed)]++; + hit_misses[std::make_pair( + info.num_insert_hits.load(std::memory_order_relaxed), + info.size.load(std::memory_order_relaxed))]++; + EXPECT_EQ(info.inline_element_size, sizeof(typename TypeParam::value_type)); EXPECT_EQ(info.key_size, sizeof(typename TypeParam::key_type)); EXPECT_EQ(info.value_size, sizeof(typename TypeParam::value_type)); @@ -2850,6 +2864,21 @@ EXPECT_NEAR((100 * count) / static_cast<double>(tables.size()), 0.1, 0.05) << reservation; } + + EXPECT_THAT(hit_misses, testing::SizeIs(6)); + const double sampled_tables = end_size - start_size; + // i % 20: { 1, 11 } + EXPECT_NEAR((hit_misses[{1, 1}] / sampled_tables), 0.10, 0.02); + // i % 20: { 6 } + EXPECT_NEAR((hit_misses[{3, 1}] / sampled_tables), 0.05, 0.02); + // i % 20: { 0, 4, 8, 12 } + EXPECT_NEAR((hit_misses[{3, 2}] / sampled_tables), 0.20, 0.02); + // i % 20: { 2, 10, 14, 18 } + EXPECT_NEAR((hit_misses[{2, 2}] / sampled_tables), 0.20, 0.02); + // i % 20: { 16 } + EXPECT_NEAR((hit_misses[{4, 1}] / sampled_tables), 0.05, 0.02); + // i % 20: { 3, 5, 7, 9, 13, 15, 17, 19 } + EXPECT_NEAR((hit_misses[{0, 2}] / sampled_tables), 0.40, 0.02); } std::vector<const HashtablezInfo*> SampleSooMutation(
diff --git a/third_party/abseil-cpp/absl/debugging/BUILD.bazel b/third_party/abseil-cpp/absl/debugging/BUILD.bazel index 7cc053e7..aad5e28 100644 --- a/third_party/abseil-cpp/absl/debugging/BUILD.bazel +++ b/third_party/abseil-cpp/absl/debugging/BUILD.bazel
@@ -36,6 +36,33 @@ licenses(["notice"]) cc_library( + name = "borrowed_fixup_buffer", + srcs = ["internal/borrowed_fixup_buffer.cc"], + hdrs = ["internal/borrowed_fixup_buffer.h"], + copts = ABSL_DEFAULT_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS, + deps = [ + "//absl/base:config", + "//absl/base:core_headers", + "//absl/base:malloc_internal", + "//absl/hash", + ], +) + +cc_test( + name = "borrowed_fixup_buffer_test", + srcs = ["internal/borrowed_fixup_buffer_test.cc"], + copts = ABSL_TEST_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS, + deps = [ + ":borrowed_fixup_buffer", + "//absl/base:config", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_library( name = "stacktrace", srcs = [ "internal/stacktrace_aarch64-inl.inc", @@ -54,6 +81,7 @@ copts = ABSL_DEFAULT_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ + ":borrowed_fixup_buffer", ":debugging_internal", "//absl/base:config", "//absl/base:core_headers", @@ -69,6 +97,7 @@ copts = ABSL_TEST_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ + ":borrowed_fixup_buffer", ":stacktrace", "//absl/base:config", "//absl/base:core_headers", @@ -448,6 +477,7 @@ ":stacktrace", "//absl/base:config", "//absl/base:core_headers", + "//absl/cleanup", "@google_benchmark//:benchmark_main", ], )
diff --git a/third_party/abseil-cpp/absl/debugging/BUILD.gn b/third_party/abseil-cpp/absl/debugging/BUILD.gn index adfdddf..4a2f5af 100644 --- a/third_party/abseil-cpp/absl/debugging/BUILD.gn +++ b/third_party/abseil-cpp/absl/debugging/BUILD.gn
@@ -5,6 +5,25 @@ import("//build/config/sanitizers/sanitizers.gni") import("//third_party/abseil-cpp/absl.gni") +absl_source_set("borrowed_fixup_buffer") { + sources = [ "internal/borrowed_fixup_buffer.cc" ] + public = [ "internal/borrowed_fixup_buffer.h" ] + deps = [ + "//third_party/abseil-cpp/absl/base:config", + "//third_party/abseil-cpp/absl/base:core_headers", + "//third_party/abseil-cpp/absl/base:malloc_internal", + "//third_party/abseil-cpp/absl/hash", + ] +} + +absl_test("borrowed_fixup_buffer_test") { + sources = [ "internal/borrowed_fixup_buffer_test.cc" ] + deps = [ + ":borrowed_fixup_buffer", + "//third_party/abseil-cpp/absl/base:config", + ] +} + absl_source_set("stacktrace") { sources = [ "internal/stacktrace_aarch64-inl.inc", @@ -21,6 +40,7 @@ ] public = [ "stacktrace.h" ] deps = [ + ":borrowed_fixup_buffer", ":debugging_internal", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", @@ -33,6 +53,7 @@ absl_test("stacktrace_test") { sources = [ "stacktrace_test.cc" ] deps = [ + ":borrowed_fixup_buffer", ":stacktrace", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers",
diff --git a/third_party/abseil-cpp/absl/debugging/CMakeLists.txt b/third_party/abseil-cpp/absl/debugging/CMakeLists.txt index d8249fe..ab3a795 100644 --- a/third_party/abseil-cpp/absl/debugging/CMakeLists.txt +++ b/third_party/abseil-cpp/absl/debugging/CMakeLists.txt
@@ -18,6 +18,38 @@ absl_cc_library( NAME + borrowed_fixup_buffer + SRCS + "internal/borrowed_fixup_buffer.cc" + HDRS + "internal/borrowed_fixup_buffer.h" + COPTS + ${ABSL_DEFAULT_COPTS} + LINKOPTS + ${ABSL_DEFAULT_LINKOPTS} + DEPS + absl::config + absl::core_headers + absl::hash + absl::malloc_internal + PUBLIC +) + +absl_cc_test( + NAME + borrowed_fixup_buffer_test + SRCS + "internal/borrowed_fixup_buffer_test.cc" + COPTS + ${ABSL_TEST_COPTS} + DEPS + absl::borrowed_fixup_buffer + absl::config + GTest::gmock_main +) + +absl_cc_library( + NAME stacktrace HDRS "stacktrace.h" @@ -38,6 +70,7 @@ LINKOPTS $<$<BOOL:${EXECINFO_LIBRARY}>:${EXECINFO_LIBRARY}> DEPS + absl::borrowed_fixup_buffer absl::debugging_internal absl::config absl::core_headers
diff --git a/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc new file mode 100644 index 0000000..dae78a7 --- /dev/null +++ b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc
@@ -0,0 +1,118 @@ +// Copyright 2025 The Abseil Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "absl/debugging/internal/borrowed_fixup_buffer.h" + +#include <assert.h> +#include <limits.h> +#include <stddef.h> +#include <stdint.h> + +#include <atomic> +#include <iterator> + +#include "absl/base/attributes.h" +#include "absl/base/config.h" +#include "absl/base/internal/low_level_alloc.h" +#include "absl/hash/hash.h" + +namespace absl { +ABSL_NAMESPACE_BEGIN +namespace internal_stacktrace { + +// A buffer for holding fix-up information for stack traces of common sizes_. +struct BorrowedFixupBuffer::FixupStackBuffer { + static constexpr size_t kMaxStackElements = 128; // Can be reduced if needed + std::atomic_flag in_use{}; + uintptr_t frames[kMaxStackElements]; + int sizes[kMaxStackElements]; + + ABSL_CONST_INIT static FixupStackBuffer g_instances[kNumStaticBuffers]; +}; + +ABSL_CONST_INIT BorrowedFixupBuffer::FixupStackBuffer + BorrowedFixupBuffer::FixupStackBuffer::g_instances[kNumStaticBuffers] = {}; + +BorrowedFixupBuffer::~BorrowedFixupBuffer() { + if (borrowed_) { + Unlock(); + } else { + base_internal::LowLevelAlloc::Free(frames_); + } +} + +BorrowedFixupBuffer::BorrowedFixupBuffer(size_t length) { + FixupStackBuffer* fixup_buffer = + 0 < length && length <= FixupStackBuffer::kMaxStackElements ? TryLock() + : nullptr; + borrowed_ = fixup_buffer != nullptr; + if (borrowed_) { + InitViaBorrow(fixup_buffer); + } else { + InitViaAllocation(length); + } +} + +void BorrowedFixupBuffer::InitViaBorrow(FixupStackBuffer* borrowed_buffer) { + assert(borrowed_); + frames_ = borrowed_buffer->frames; + sizes_ = borrowed_buffer->sizes; +} + +void BorrowedFixupBuffer::InitViaAllocation(size_t length) { + static_assert(alignof(decltype(*frames_)) >= alignof(decltype(*sizes_)), + "contiguous layout assumes decreasing alignment, otherwise " + "padding may be needed in the middle"); + assert(!borrowed_); + + base_internal::InitSigSafeArena(); + void* buf = base_internal::LowLevelAlloc::AllocWithArena( + length * (sizeof(*frames_) + sizeof(*sizes_)), + base_internal::SigSafeArena()); + + if (buf == nullptr) { + frames_ = nullptr; + sizes_ = nullptr; + return; + } + + frames_ = new (buf) uintptr_t[length]; + sizes_ = new (static_cast<void*>(static_cast<unsigned char*>(buf) + + length * sizeof(*frames_))) int[length]; +} + +BorrowedFixupBuffer::FixupStackBuffer* BorrowedFixupBuffer::Find() { + size_t i = absl::Hash<const void*>()(this) % + std::size(FixupStackBuffer::g_instances); + return &FixupStackBuffer::g_instances[i]; +} + +[[nodiscard]] BorrowedFixupBuffer::FixupStackBuffer* +BorrowedFixupBuffer::TryLock() { + FixupStackBuffer* instance = Find(); + // Use memory_order_acquire to ensure that no reads and writes on the borrowed + // buffer are reordered before the borrowing. + return !instance->in_use.test_and_set(std::memory_order_acquire) ? instance + : nullptr; +} + +void BorrowedFixupBuffer::Unlock() { + // Use memory_order_release to ensure that no reads and writes on the borrowed + // buffer are reordered after the borrowing. + Find()->in_use.clear(std::memory_order_release); +} + +} // namespace internal_stacktrace +ABSL_NAMESPACE_END +} // namespace absl
diff --git a/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h new file mode 100644 index 0000000..c5ea7a39 --- /dev/null +++ b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h
@@ -0,0 +1,74 @@ +// Copyright 2025 The Abseil Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef ABSL_DEBUGGING_INTERNAL_BORROWED_FIXUP_BUFFER_H_ +#define ABSL_DEBUGGING_INTERNAL_BORROWED_FIXUP_BUFFER_H_ + +#include <stddef.h> +#include <stdint.h> +#include <stdlib.h> + +#include "absl/base/config.h" + +namespace absl { +ABSL_NAMESPACE_BEGIN +namespace internal_stacktrace { + +// An RAII type that temporarily acquires a buffer for stack trace fix-ups from +// a pool of preallocated buffers, or attempts to allocate a new buffer if no +// such buffer is available. +// When destroyed, returns the buffer to the pool if it borrowed successfully, +// otherwise deallocates any previously allocated buffer. +class BorrowedFixupBuffer { + public: + static constexpr size_t kNumStaticBuffers = 64; + ~BorrowedFixupBuffer(); + + // The number of frames to allocate space for. Note that allocations can fail. + explicit BorrowedFixupBuffer(size_t length); + + uintptr_t* frames() const { return frames_; } + int* sizes() const { return sizes_; } + + private: + uintptr_t* frames_; + int* sizes_; + + // Have we borrowed a pre-existing buffer (vs. allocated our own)? + bool borrowed_; + + struct FixupStackBuffer; + + void InitViaBorrow(FixupStackBuffer* borrowed_buffer); + void InitViaAllocation(size_t length); + + // Returns a non-null pointer to a buffer that could be potentially borrowed. + FixupStackBuffer* Find(); + + // Attempts to opportunistically borrow a small buffer in a thread- and + // signal-safe manner. Returns nullptr on failure. + [[nodiscard]] FixupStackBuffer* TryLock(); + + // Returns the borrowed buffer. + void Unlock(); + + BorrowedFixupBuffer(const BorrowedFixupBuffer&) = delete; + BorrowedFixupBuffer& operator=(const BorrowedFixupBuffer&) = delete; +}; + +} // namespace internal_stacktrace +ABSL_NAMESPACE_END +} // namespace absl + +#endif // ABSL_DEBUGGING_INTERNAL_BORROWED_FIXUP_BUFFER_H_
diff --git a/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc new file mode 100644 index 0000000..a856c5d --- /dev/null +++ b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc
@@ -0,0 +1,97 @@ +// Copyright 2025 The Abseil Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "absl/debugging/internal/borrowed_fixup_buffer.h" + +#include <stddef.h> +#include <stdint.h> + +#include <algorithm> +#include <functional> +#include <memory> + +#include "gtest/gtest.h" +#include "absl/base/config.h" + +namespace absl { +ABSL_NAMESPACE_BEGIN +namespace internal_stacktrace { +namespace { + +TEST(BorrowedFixupBuffer, ProperReuse) { + uintptr_t first_borrowed_frame = 0; + uintptr_t first_borrowed_size = 0; + + // Ensure that we borrow the same buffer each time, indicating proper reuse. + // Disable loop unrolling. We need all iterations to match exactly, to coax + // reuse of the the same underlying buffer. +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC unroll 1 // <= 1 disables unrolling +#endif + for (int i = 0; i < 100; ++i) { + BorrowedFixupBuffer buf0(0); + EXPECT_EQ(buf0.frames(), nullptr); + EXPECT_EQ(buf0.sizes(), nullptr); + + BorrowedFixupBuffer buf1(1); + EXPECT_NE(buf1.frames(), nullptr); + EXPECT_NE(buf1.sizes(), nullptr); + if (first_borrowed_frame == 0) { + first_borrowed_frame = reinterpret_cast<uintptr_t>(buf1.frames()); + } else { + EXPECT_EQ(reinterpret_cast<uintptr_t>(buf1.frames()), + first_borrowed_frame); + } + if (first_borrowed_size == 0) { + first_borrowed_size = reinterpret_cast<uintptr_t>(buf1.sizes()); + } else { + EXPECT_EQ(reinterpret_cast<uintptr_t>(buf1.sizes()), first_borrowed_size); + } + + BorrowedFixupBuffer buf2(2); + EXPECT_NE(buf2.frames(), buf1.frames()); + EXPECT_NE(buf2.sizes(), buf1.sizes()); + EXPECT_NE(buf2.frames(), nullptr); + EXPECT_NE(buf2.sizes(), nullptr); + } +} + +TEST(BorrowedFixupBuffer, NoOverlap) { + using BufferPtr = std::unique_ptr<BorrowedFixupBuffer>; + static constexpr std::less<const void*> less; + static constexpr size_t kBufLen = 5; + static constexpr size_t kNumBuffers = + BorrowedFixupBuffer::kNumStaticBuffers * 37 + 1; + + auto bufs = std::make_unique<BufferPtr[]>(kNumBuffers); + for (size_t i = 0; i < kNumBuffers; ++i) { + bufs[i] = std::make_unique<BorrowedFixupBuffer>(kBufLen); + } + + std::sort(bufs.get(), bufs.get() + kNumBuffers, + [](const BufferPtr& a, const BufferPtr& b) { + return less(a->frames(), b->frames()); + }); + + // Verify there are no overlaps + for (size_t i = 1; i < kNumBuffers; ++i) { + EXPECT_FALSE(less(bufs[i]->frames(), bufs[i - 1]->frames() + kBufLen)); + EXPECT_FALSE(less(bufs[i]->sizes(), bufs[i - 1]->sizes() + kBufLen)); + } +} + +} // namespace +} // namespace internal_stacktrace +ABSL_NAMESPACE_END +} // namespace absl
diff --git a/third_party/abseil-cpp/absl/debugging/stacktrace.cc b/third_party/abseil-cpp/absl/debugging/stacktrace.cc index acc8b66..aee065d 100644 --- a/third_party/abseil-cpp/absl/debugging/stacktrace.cc +++ b/third_party/abseil-cpp/absl/debugging/stacktrace.cc
@@ -42,14 +42,12 @@ #include <algorithm> #include <atomic> -#include <iterator> -#include <type_traits> #include "absl/base/attributes.h" #include "absl/base/config.h" -#include "absl/base/internal/low_level_alloc.h" #include "absl/base/optimization.h" #include "absl/base/port.h" +#include "absl/debugging/internal/borrowed_fixup_buffer.h" #include "absl/debugging/internal/stacktrace_config.h" #if defined(ABSL_STACKTRACE_INL_HEADER) @@ -75,37 +73,14 @@ typedef int (*Unwinder)(void**, int*, int, int, const void*, int*); std::atomic<Unwinder> custom; -constexpr size_t kMinPageSize = 4096; - -struct FixupBuffer { - static constexpr size_t kMaxStackElements = 128; // Can be reduced if needed - uintptr_t frames[kMaxStackElements]; - int sizes[kMaxStackElements]; -}; -static_assert(std::is_trivially_default_constructible_v<FixupBuffer>); -static_assert(sizeof(FixupBuffer) < kMinPageSize / 2, - "buffer size should no larger than a small fraction of a page, " - "to avoid stack overflows"); - template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT> -ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind( - void** result, uintptr_t* frames, int* sizes, size_t max_depth, - int skip_count, const void* uc, int* min_dropped_frames, - FixupBuffer* fixup_buffer /* if NULL, fixups are skipped */) { - // Allocate a buffer dynamically, using the signal-safe allocator. - static constexpr auto allocate = [](size_t num_bytes) -> void* { - base_internal::InitSigSafeArena(); - return base_internal::LowLevelAlloc::AllocWithArena( - num_bytes, base_internal::SigSafeArena()); - }; - - // We only need to free the buffers if we allocated them with the signal-safe - // allocator. - bool must_free_frames = false; - bool must_free_sizes = false; - - bool unwind_with_fixup = - fixup_buffer != nullptr && internal_stacktrace::ShouldFixUpStack(); +ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames, + int* sizes, size_t max_depth, + int skip_count, const void* uc, + int* min_dropped_frames, + bool unwind_with_fixup = true) { + unwind_with_fixup = + unwind_with_fixup && internal_stacktrace::ShouldFixUpStack(); #ifdef _WIN32 if (unwind_with_fixup) { @@ -117,29 +92,17 @@ } #endif - if (unwind_with_fixup) { - // Some implementations of FixUpStack may need to be passed frame - // information from Unwind, even if the caller doesn't need that - // information. We allocate the necessary buffers for such implementations - // here. - - if (frames == nullptr) { - if (max_depth <= std::size(fixup_buffer->frames)) { - frames = fixup_buffer->frames; - } else { - frames = static_cast<uintptr_t*>(allocate(max_depth * sizeof(*frames))); - must_free_frames = true; - } - } - - if (sizes == nullptr) { - if (max_depth <= std::size(fixup_buffer->sizes)) { - sizes = fixup_buffer->sizes; - } else { - sizes = static_cast<int*>(allocate(max_depth * sizeof(*sizes))); - must_free_sizes = true; - } - } + // Some implementations of FixUpStack may need to be passed frame + // information from Unwind, even if the caller doesn't need that + // information. We allocate the necessary buffers for such implementations + // here. + const internal_stacktrace::BorrowedFixupBuffer fixup_buffer( + unwind_with_fixup ? max_depth : 0); + if (frames == nullptr) { + frames = fixup_buffer.frames(); + } + if (sizes == nullptr) { + sizes = fixup_buffer.sizes(); } Unwinder g = custom.load(std::memory_order_acquire); @@ -167,14 +130,6 @@ internal_stacktrace::FixUpStack(result, frames, sizes, max_depth, size); } - if (must_free_sizes) { - base_internal::LowLevelAlloc::Free(sizes); - } - - if (must_free_frames) { - base_internal::LowLevelAlloc::Free(frames); - } - ABSL_BLOCK_TAIL_CALL_OPTIMIZATION(); return static_cast<int>(size); } @@ -184,10 +139,9 @@ ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int internal_stacktrace::GetStackFrames(void** result, uintptr_t* frames, int* sizes, int max_depth, int skip_count) { - FixupBuffer fixup_stack_buf; return Unwind<true, false>(result, frames, sizes, static_cast<size_t>(max_depth), skip_count, - nullptr, nullptr, &fixup_stack_buf); + nullptr, nullptr); } ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int @@ -195,10 +149,9 @@ int* sizes, int max_depth, int skip_count, const void* uc, int* min_dropped_frames) { - FixupBuffer fixup_stack_buf; return Unwind<true, true>(result, frames, sizes, static_cast<size_t>(max_depth), skip_count, uc, - min_dropped_frames, &fixup_stack_buf); + min_dropped_frames); } ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int @@ -206,24 +159,22 @@ int skip_count) { return Unwind<false, false>(result, nullptr, nullptr, static_cast<size_t>(max_depth), skip_count, - nullptr, nullptr, nullptr); + nullptr, nullptr, /*unwind_with_fixup=*/false); } ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackTrace( void** result, int max_depth, int skip_count) { - FixupBuffer fixup_stack_buf; return Unwind<false, false>(result, nullptr, nullptr, static_cast<size_t>(max_depth), skip_count, - nullptr, nullptr, &fixup_stack_buf); + nullptr, nullptr); } ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackTraceWithContext(void** result, int max_depth, int skip_count, const void* uc, int* min_dropped_frames) { - FixupBuffer fixup_stack_buf; return Unwind<false, true>(result, nullptr, nullptr, static_cast<size_t>(max_depth), skip_count, uc, - min_dropped_frames, &fixup_stack_buf); + min_dropped_frames); } void SetStackUnwinder(Unwinder w) {
diff --git a/third_party/abseil-cpp/absl/debugging/stacktrace_benchmark.cc b/third_party/abseil-cpp/absl/debugging/stacktrace_benchmark.cc index 9360bafe..eef9850 100644 --- a/third_party/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +++ b/third_party/abseil-cpp/absl/debugging/stacktrace_benchmark.cc
@@ -12,12 +12,25 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include <stddef.h> +#include <stdint.h> + #include "absl/base/attributes.h" #include "absl/base/config.h" #include "absl/base/optimization.h" +#include "absl/cleanup/cleanup.h" #include "absl/debugging/stacktrace.h" #include "benchmark/benchmark.h" +static bool g_enable_fixup = false; + +#if ABSL_HAVE_ATTRIBUTE_WEAK +// Override these weak symbols if possible. +bool absl::internal_stacktrace::ShouldFixUpStack() { return g_enable_fixup; } +void absl::internal_stacktrace::FixUpStack(void**, uintptr_t*, int*, size_t, + size_t&) {} +#endif + namespace absl { ABSL_NAMESPACE_BEGIN namespace { @@ -42,14 +55,24 @@ func(state, --x, depth); } +template <bool EnableFixup> void BM_GetStackTrace(benchmark::State& state) { + const Cleanup restore_state( + [prev = g_enable_fixup]() { g_enable_fixup = prev; }); + g_enable_fixup = EnableFixup; int depth = state.range(0); for (auto s : state) { func(state, depth, depth); } } -BENCHMARK(BM_GetStackTrace)->DenseRange(10, kMaxStackDepth, 10); +#if ABSL_HAVE_ATTRIBUTE_WEAK +auto& BM_GetStackTraceWithFixup = BM_GetStackTrace<true>; +BENCHMARK(BM_GetStackTraceWithFixup)->DenseRange(10, kMaxStackDepth, 10); +#endif + +auto& BM_GetStackTraceWithoutFixup = BM_GetStackTrace<false>; +BENCHMARK(BM_GetStackTraceWithoutFixup)->DenseRange(10, kMaxStackDepth, 10); } // namespace ABSL_NAMESPACE_END } // namespace absl
diff --git a/third_party/abseil-cpp/absl/profiling/BUILD.bazel b/third_party/abseil-cpp/absl/profiling/BUILD.bazel index 5afdb96..00571b2 100644 --- a/third_party/abseil-cpp/absl/profiling/BUILD.bazel +++ b/third_party/abseil-cpp/absl/profiling/BUILD.bazel
@@ -161,6 +161,7 @@ "//absl/container:btree", "//absl/container:flat_hash_map", "//absl/strings", + "//absl/strings:str_format", "//absl/types:span", ], )
diff --git a/third_party/abseil-cpp/absl/profiling/BUILD.gn b/third_party/abseil-cpp/absl/profiling/BUILD.gn index 23764a27..4ec5051 100644 --- a/third_party/abseil-cpp/absl/profiling/BUILD.gn +++ b/third_party/abseil-cpp/absl/profiling/BUILD.gn
@@ -74,6 +74,7 @@ "//third_party/abseil-cpp/absl/container:btree", "//third_party/abseil-cpp/absl/container:flat_hash_map", "//third_party/abseil-cpp/absl/strings", + "//third_party/abseil-cpp/absl/strings:str_format", "//third_party/abseil-cpp/absl/types:span", ] }
diff --git a/third_party/abseil-cpp/absl/profiling/CMakeLists.txt b/third_party/abseil-cpp/absl/profiling/CMakeLists.txt index 4807f0dde..6441daec 100644 --- a/third_party/abseil-cpp/absl/profiling/CMakeLists.txt +++ b/third_party/abseil-cpp/absl/profiling/CMakeLists.txt
@@ -109,6 +109,7 @@ absl::flat_hash_map absl::btree absl::strings + absl::str_format absl::span )
diff --git a/third_party/abseil-cpp/absl/profiling/hashtable.cc b/third_party/abseil-cpp/absl/profiling/hashtable.cc index 407c6b4..17148d1 100644 --- a/third_party/abseil-cpp/absl/profiling/hashtable.cc +++ b/third_party/abseil-cpp/absl/profiling/hashtable.cc
@@ -60,6 +60,7 @@ const auto capacity_id = builder.InternString("capacity"); const auto size_id = builder.InternString("size"); const auto num_erases_id = builder.InternString("num_erases"); + const auto num_insert_hits_id = builder.InternString("num_insert_hits"); const auto num_rehashes_id = builder.InternString("num_rehashes"); const auto max_probe_length_id = builder.InternString("max_probe_length"); const auto total_probe_length_id = builder.InternString("total_probe_length"); @@ -89,6 +90,9 @@ add_label(size_id, info.size.load(std::memory_order_relaxed)); add_label(num_erases_id, info.num_erases.load(std::memory_order_relaxed)); + // TODO(b/436909492): Revisit whether this value is useful. + add_label(num_insert_hits_id, + info.num_insert_hits.load(std::memory_order_relaxed)); add_label(num_rehashes_id, info.num_rehashes.load(std::memory_order_relaxed)); add_label(max_probe_length_id,
diff --git a/third_party/abseil-cpp/absl/profiling/internal/profile_builder.cc b/third_party/abseil-cpp/absl/profiling/internal/profile_builder.cc index f0bb40b7..1ca0d3b1 100644 --- a/third_party/abseil-cpp/absl/profiling/internal/profile_builder.cc +++ b/third_party/abseil-cpp/absl/profiling/internal/profile_builder.cc
@@ -32,6 +32,7 @@ #include "absl/base/internal/raw_logging.h" #include "absl/strings/escaping.h" #include "absl/strings/str_cat.h" +#include "absl/strings/str_format.h" #include "absl/types/span.h" namespace absl {
diff --git a/third_party/abseil-cpp/absl/status/status.cc b/third_party/abseil-cpp/absl/status/status.cc index 963dab67..f219933 100644 --- a/third_party/abseil-cpp/absl/status/status.cc +++ b/third_party/abseil-cpp/absl/status/status.cc
@@ -47,6 +47,10 @@ "absl::Status assumes it can use the bottom 2 bits of a StatusRep*."); std::string StatusCodeToString(StatusCode code) { + return std::string(absl::StatusCodeToStringView(code)); +} + +absl::string_view StatusCodeToStringView(StatusCode code) { switch (code) { case StatusCode::kOk: return "OK";
diff --git a/third_party/abseil-cpp/absl/status/status.h b/third_party/abseil-cpp/absl/status/status.h index 45168225..b26d072 100644 --- a/third_party/abseil-cpp/absl/status/status.h +++ b/third_party/abseil-cpp/absl/status/status.h
@@ -284,6 +284,11 @@ // Returns the name for the status code, or "" if it is an unknown value. std::string StatusCodeToString(StatusCode code); +// StatusCodeToStringView() +// +// Same as StatusCodeToString(), but returns a string_view. +absl::string_view StatusCodeToStringView(StatusCode code); + // operator<< // // Streams StatusCodeToString(code) to `os`.
diff --git a/third_party/abseil-cpp/absl/status/status_test.cc b/third_party/abseil-cpp/absl/status/status_test.cc index c3327ad7..f6ac0c0 100644 --- a/third_party/abseil-cpp/absl/status/status_test.cc +++ b/third_party/abseil-cpp/absl/status/status_test.cc
@@ -39,6 +39,7 @@ std::ostringstream oss; oss << code; EXPECT_EQ(oss.str(), absl::StatusCodeToString(code)); + EXPECT_EQ(oss.str(), absl::StatusCodeToStringView(code)); } // This structure holds the details for testing a single error code,
diff --git a/third_party/abseil-cpp/absl/strings/str_split.h b/third_party/abseil-cpp/absl/strings/str_split.h index cf53ccf..29fa4f7 100644 --- a/third_party/abseil-cpp/absl/strings/str_split.h +++ b/third_party/abseil-cpp/absl/strings/str_split.h
@@ -382,7 +382,7 @@ // // v[0] == " a ", v[1] == " ", v[2] == "b" struct SkipWhitespace { bool operator()(absl::string_view sp) const { - sp = absl::StripAsciiWhitespace(sp); + sp = absl::StripLeadingAsciiWhitespace(sp); return !sp.empty(); } };
diff --git a/third_party/abseil-cpp/absl/strings/string_view.h b/third_party/abseil-cpp/absl/strings/string_view.h index 2f0a0fd..49df37c 100644 --- a/third_party/abseil-cpp/absl/strings/string_view.h +++ b/third_party/abseil-cpp/absl/strings/string_view.h
@@ -227,7 +227,7 @@ constexpr string_view( // NOLINT(runtime/explicit) const char* absl_nonnull str) : ptr_(str), length_(str ? StrlenInternal(str) : 0) { - assert(str != nullptr); + ABSL_HARDENING_ASSERT(str != nullptr); } // Constructor of a `string_view` from a `const char*` and length.
diff --git a/third_party/abseil-cpp/absl/synchronization/notification.h b/third_party/abseil-cpp/absl/synchronization/notification.h index 1ceffdb6..12df31b 100644 --- a/third_party/abseil-cpp/absl/synchronization/notification.h +++ b/third_party/abseil-cpp/absl/synchronization/notification.h
@@ -52,7 +52,7 @@ #include <atomic> -#include "absl/base/attributes.h" +#include "absl/base/config.h" #include "absl/base/internal/tracing.h" #include "absl/synchronization/mutex.h" #include "absl/time/time.h"
diff --git a/third_party/abseil-cpp/symbols_arm64_dbg.def b/third_party/abseil-cpp/symbols_arm64_dbg.def index 52f2db8..cd95dcb9 100644 --- a/third_party/abseil-cpp/symbols_arm64_dbg.def +++ b/third_party/abseil-cpp/symbols_arm64_dbg.def
@@ -358,6 +358,7 @@ ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEB_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@@Z + ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PEBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBX@Z ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAEAVStringifySink@strings_internal@0@UHex@0@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXV?$Span@QEAUCordRep@cord_internal@absl@@@2@@Z @@ -590,6 +591,7 @@ ??$IntegerToString@_J@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_J@Z ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBH@Z + ??$Invoke@VMixingHashState@hash_internal@absl@@PEBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBQEBX@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEB_K@__Cr@std@@@Z @@ -1313,6 +1315,7 @@ ??$call_once@A6AXXZ$$V@absl@@YAXAEAVonce_flag@0@A6AXXZ@Z ??$call_once@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@absl@@YAXAEAVonce_flag@0@$$QEAP8FlagImpl@flags_internal@0@EAAXXZ$$QEAPEAV230@@Z ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBH@Z + ??$combine@PEBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBQEBX@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z ??$combine@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z @@ -1530,6 +1533,7 @@ ??$get@$0A@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YAAEBQEAVCommandLineFlag@absl@@AEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QEAPEAVCommandLineFlag@absl@@$$QEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z + ??$hash@PEBX@MixingHashState@hash_internal@absl@@SA_KAEBQEBX@Z ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBUStringHash@container_internal@2@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z @@ -1539,6 +1543,7 @@ ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBD_K@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@U?$integer_sequence@_K$0A@$00@45@@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@U?$integer_sequence@_K$0A@@45@@Z + ??$hash_with_seed@PEBX$0A@@MixingHashState@hash_internal@absl@@SA_KAEBQEBX_K@Z ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash_with_seed@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@_K@Z ??$hash_with_seed@V?$tuple@AEB_K@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEB_K@__Cr@std@@_K@Z @@ -1642,6 +1647,7 @@ ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAKH@Z ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_JH@Z ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_KH@Z + ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YA_KAEAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z ??$swap@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@0@Z ??$swap@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAEAPEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z ??$swap@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAUTransition@cctz@time_internal@absl@@0@Z @@ -1969,6 +1975,7 @@ ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z ??0BestHints@flags_internal@absl@@QEAA@E@Z ??0BlockingCounter@absl@@QEAA@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z ??0BoundConversion@str_format_internal@absl@@QEAA@XZ ??0Breakdown@Time@absl@@QEAA@XZ ??0BufferRawSink@str_format_internal@absl@@QEAA@PEAD_K@Z @@ -2284,6 +2291,7 @@ ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ ??1BadStatusOrAccess@absl@@UEAA@XZ ??1BestHints@flags_internal@absl@@QEAA@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ ??1ByAnyChar@absl@@QEAA@XZ ??1CRC32@crc_internal@absl@@UEAA@XZ ??1CRC@crc_internal@absl@@UEAA@XZ @@ -2757,6 +2765,7 @@ ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@absl@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@1@@Z ??R?$FunctionRef@$$A6A_K_K@Z@absl@@QEBA_K_K@Z + ??R?$HashImpl@PEBX@hash_internal@absl@@QEBA_KAEBQEBX@Z ??R?$HashImpl@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??R?$HashImpl@V?$tuple@AEB_K@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEB_K@__Cr@std@@@Z ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QEBA_K_K@Z @@ -3279,6 +3288,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z @@ -3574,6 +3584,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z @@ -3911,6 +3923,7 @@ ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ ?RecordEraseSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z + ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QEAAX_K0@Z ?RecordInsertMissSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@_K1@Z ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QEAAX_K@Z @@ -4121,6 +4134,7 @@ ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -4267,6 +4281,7 @@ ?TrailingZeros@?$NonIterableBitMask@_K$07$02@container_internal@absl@@QEBAIXZ ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?TryLockImpl@SpinLock@base_internal@absl@@AEAA_NXZ ?TryLockInternal@SpinLock@base_internal@absl@@AEAAIII@Z ?TryLockSlow@Mutex@absl@@AEAA_NXZ @@ -4301,6 +4316,7 @@ ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UniversalEpoch@absl@@YA?AVTime@1@XZ ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -5274,11 +5290,13 @@ ?flat@CordRep@cord_internal@absl@@QEAAPEAUCordRepFlat@23@XZ ?flat@CordRep@cord_internal@absl@@QEBAPEBUCordRepFlat@23@XZ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z + ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEA_KXZ ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5711,6 +5729,7 @@ ?size@HashtableSize@container_internal@absl@@QEBA_KXZ ?size@InlineRep@Cord@absl@@QEBA_KXZ ?size@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBA_KXZ + ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEAHXZ ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXXZ ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@XZ ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_arm64_dbg_cxx23.def b/third_party/abseil-cpp/symbols_arm64_dbg_cxx23.def index f5553788..38907b5e 100644 --- a/third_party/abseil-cpp/symbols_arm64_dbg_cxx23.def +++ b/third_party/abseil-cpp/symbols_arm64_dbg_cxx23.def
@@ -358,6 +358,7 @@ ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEB_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@@Z + ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PEBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBX@Z ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAEAVStringifySink@strings_internal@0@UHex@0@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXV?$Span@QEAUCordRep@cord_internal@absl@@@2@@Z @@ -590,6 +591,7 @@ ??$IntegerToString@_J@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_J@Z ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBH@Z + ??$Invoke@VMixingHashState@hash_internal@absl@@PEBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBQEBX@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEB_K@__Cr@std@@@Z @@ -1318,6 +1320,7 @@ ??$call_once@A6AXXZ$$V@absl@@YAXAEAVonce_flag@0@A6AXXZ@Z ??$call_once@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@absl@@YAXAEAVonce_flag@0@$$QEAP8FlagImpl@flags_internal@0@EAAXXZ$$QEAPEAV230@@Z ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBH@Z + ??$combine@PEBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBQEBX@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z ??$combine@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z @@ -1535,6 +1538,7 @@ ??$get@$0A@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YAAEBQEAVCommandLineFlag@absl@@AEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QEAPEAVCommandLineFlag@absl@@$$QEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z + ??$hash@PEBX@MixingHashState@hash_internal@absl@@SA_KAEBQEBX@Z ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBUStringHash@container_internal@2@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z @@ -1544,6 +1548,7 @@ ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBD_K@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@U?$integer_sequence@_K$0A@$00@45@@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@U?$integer_sequence@_K$0A@@45@@Z + ??$hash_with_seed@PEBX$0A@@MixingHashState@hash_internal@absl@@SA_KAEBQEBX_K@Z ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash_with_seed@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@_K@Z ??$hash_with_seed@V?$tuple@AEB_K@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEB_K@__Cr@std@@_K@Z @@ -1655,6 +1660,7 @@ ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAKH@Z ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_JH@Z ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_KH@Z + ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YA_KAEAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z ??$swap@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@0@Z ??$swap@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAEAPEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z ??$swap@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAUTransition@cctz@time_internal@absl@@0@Z @@ -1982,6 +1988,7 @@ ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z ??0BestHints@flags_internal@absl@@QEAA@E@Z ??0BlockingCounter@absl@@QEAA@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z ??0BoundConversion@str_format_internal@absl@@QEAA@XZ ??0Breakdown@Time@absl@@QEAA@XZ ??0BufferRawSink@str_format_internal@absl@@QEAA@PEAD_K@Z @@ -2297,6 +2304,7 @@ ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ ??1BadStatusOrAccess@absl@@UEAA@XZ ??1BestHints@flags_internal@absl@@QEAA@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ ??1ByAnyChar@absl@@QEAA@XZ ??1CRC32@crc_internal@absl@@UEAA@XZ ??1CRC@crc_internal@absl@@UEAA@XZ @@ -2754,6 +2762,7 @@ ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@absl@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@1@@Z ??R?$FunctionRef@$$A6A_K_K@Z@absl@@QEBA_K_K@Z + ??R?$HashImpl@PEBX@hash_internal@absl@@QEBA_KAEBQEBX@Z ??R?$HashImpl@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??R?$HashImpl@V?$tuple@AEB_K@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEB_K@__Cr@std@@@Z ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QEBA_K_K@Z @@ -3276,6 +3285,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z @@ -3571,6 +3581,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z @@ -3908,6 +3920,7 @@ ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ ?RecordEraseSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z + ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QEAAX_K0@Z ?RecordInsertMissSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@_K1@Z ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QEAAX_K@Z @@ -4118,6 +4131,7 @@ ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -4264,6 +4278,7 @@ ?TrailingZeros@?$NonIterableBitMask@_K$07$02@container_internal@absl@@QEBAIXZ ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?TryLockImpl@SpinLock@base_internal@absl@@AEAA_NXZ ?TryLockInternal@SpinLock@base_internal@absl@@AEAAIII@Z ?TryLockSlow@Mutex@absl@@AEAA_NXZ @@ -4298,6 +4313,7 @@ ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UniversalEpoch@absl@@YA?AVTime@1@XZ ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -5284,11 +5300,13 @@ ?flat@CordRep@cord_internal@absl@@QEAAPEAUCordRepFlat@23@XZ ?flat@CordRep@cord_internal@absl@@QEBAPEBUCordRepFlat@23@XZ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z + ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEA_KXZ ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5721,6 +5739,7 @@ ?size@HashtableSize@container_internal@absl@@QEBA_KXZ ?size@InlineRep@Cord@absl@@QEBA_KXZ ?size@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBA_KXZ + ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEAHXZ ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXXZ ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@XZ ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_arm64_rel.def b/third_party/abseil-cpp/symbols_arm64_rel.def index 1f4121cc..ba363e9c 100644 --- a/third_party/abseil-cpp/symbols_arm64_rel.def +++ b/third_party/abseil-cpp/symbols_arm64_rel.def
@@ -204,6 +204,7 @@ ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z ??0BlockingCounter@absl@@QEAA@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0ByLength@absl@@QEAA@_J@Z ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -259,6 +260,7 @@ ??0uint128@absl@@QEAA@O@Z ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ ??1CRC@crc_internal@absl@@UEAA@XZ ??1Cord@absl@@QEAA@XZ ??1CordzHandle@cord_internal@absl@@MEAA@XZ @@ -627,6 +629,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z @@ -790,6 +793,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z @@ -1122,6 +1127,7 @@ ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -1216,6 +1222,7 @@ ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?TryLockSlow@Mutex@absl@@AEAA_NXZ ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z @@ -1237,6 +1244,7 @@ ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -1320,6 +1328,7 @@ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_arm64_rel_cxx23.def b/third_party/abseil-cpp/symbols_arm64_rel_cxx23.def index 7240e4af..7c4c13c 100644 --- a/third_party/abseil-cpp/symbols_arm64_rel_cxx23.def +++ b/third_party/abseil-cpp/symbols_arm64_rel_cxx23.def
@@ -204,6 +204,7 @@ ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z ??0BlockingCounter@absl@@QEAA@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0ByLength@absl@@QEAA@_J@Z ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -259,6 +260,7 @@ ??0uint128@absl@@QEAA@O@Z ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ ??1CRC@crc_internal@absl@@UEAA@XZ ??1Cord@absl@@QEAA@XZ ??1CordzHandle@cord_internal@absl@@MEAA@XZ @@ -627,6 +629,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z @@ -790,6 +793,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z @@ -1122,6 +1127,7 @@ ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -1216,6 +1222,7 @@ ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?TryLockSlow@Mutex@absl@@AEAA_NXZ ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z @@ -1237,6 +1244,7 @@ ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -1320,6 +1328,7 @@ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x64_dbg.def b/third_party/abseil-cpp/symbols_x64_dbg.def index e3f9190d..3d3a4dd 100644 --- a/third_party/abseil-cpp/symbols_x64_dbg.def +++ b/third_party/abseil-cpp/symbols_x64_dbg.def
@@ -358,6 +358,7 @@ ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEB_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@@Z + ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PEBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBX@Z ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAEAVStringifySink@strings_internal@0@UHex@0@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXV?$Span@QEAUCordRep@cord_internal@absl@@@2@@Z @@ -590,6 +591,7 @@ ??$IntegerToString@_J@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_J@Z ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBH@Z + ??$Invoke@VMixingHashState@hash_internal@absl@@PEBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBQEBX@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEB_K@__Cr@std@@@Z @@ -1313,6 +1315,7 @@ ??$call_once@A6AXXZ$$V@absl@@YAXAEAVonce_flag@0@A6AXXZ@Z ??$call_once@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@absl@@YAXAEAVonce_flag@0@$$QEAP8FlagImpl@flags_internal@0@EAAXXZ$$QEAPEAV230@@Z ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBH@Z + ??$combine@PEBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBQEBX@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z ??$combine@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z @@ -1530,6 +1533,7 @@ ??$get@$0A@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YAAEBQEAVCommandLineFlag@absl@@AEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QEAPEAVCommandLineFlag@absl@@$$QEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z + ??$hash@PEBX@MixingHashState@hash_internal@absl@@SA_KAEBQEBX@Z ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBUStringHash@container_internal@2@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z @@ -1539,6 +1543,7 @@ ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBD_K@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@U?$integer_sequence@_K$0A@$00@45@@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@U?$integer_sequence@_K$0A@@45@@Z + ??$hash_with_seed@PEBX$0A@@MixingHashState@hash_internal@absl@@SA_KAEBQEBX_K@Z ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash_with_seed@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@_K@Z ??$hash_with_seed@V?$tuple@AEB_K@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEB_K@__Cr@std@@_K@Z @@ -1642,6 +1647,7 @@ ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAKH@Z ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_JH@Z ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_KH@Z + ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YA_KAEAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z ??$swap@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@0@Z ??$swap@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAEAPEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z ??$swap@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAUTransition@cctz@time_internal@absl@@0@Z @@ -1970,6 +1976,7 @@ ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z ??0BestHints@flags_internal@absl@@QEAA@E@Z ??0BlockingCounter@absl@@QEAA@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z ??0BoundConversion@str_format_internal@absl@@QEAA@XZ ??0Breakdown@Time@absl@@QEAA@XZ ??0BufferRawSink@str_format_internal@absl@@QEAA@PEAD_K@Z @@ -2285,6 +2292,7 @@ ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ ??1BadStatusOrAccess@absl@@UEAA@XZ ??1BestHints@flags_internal@absl@@QEAA@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ ??1ByAnyChar@absl@@QEAA@XZ ??1CRC32@crc_internal@absl@@UEAA@XZ ??1CRC@crc_internal@absl@@UEAA@XZ @@ -2758,6 +2766,7 @@ ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@absl@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@1@@Z ??R?$FunctionRef@$$A6A_K_K@Z@absl@@QEBA_K_K@Z + ??R?$HashImpl@PEBX@hash_internal@absl@@QEBA_KAEBQEBX@Z ??R?$HashImpl@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??R?$HashImpl@V?$tuple@AEB_K@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEB_K@__Cr@std@@@Z ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QEBA_K_K@Z @@ -3280,6 +3289,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z @@ -3575,6 +3585,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z @@ -3914,6 +3926,7 @@ ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ ?RecordEraseSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z + ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QEAAX_K0@Z ?RecordInsertMissSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@_K1@Z ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QEAAX_K@Z @@ -4124,6 +4137,7 @@ ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -4270,6 +4284,7 @@ ?TrailingZeros@?$NonIterableBitMask@G$0BA@$0A@@container_internal@absl@@QEBAIXZ ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?TryLockImpl@SpinLock@base_internal@absl@@AEAA_NXZ ?TryLockInternal@SpinLock@base_internal@absl@@AEAAIII@Z ?TryLockSlow@Mutex@absl@@AEAA_NXZ @@ -4304,6 +4319,7 @@ ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UniversalEpoch@absl@@YA?AVTime@1@XZ ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -5278,11 +5294,13 @@ ?flat@CordRep@cord_internal@absl@@QEAAPEAUCordRepFlat@23@XZ ?flat@CordRep@cord_internal@absl@@QEBAPEBUCordRepFlat@23@XZ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z + ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEA_KXZ ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5715,6 +5733,7 @@ ?size@HashtableSize@container_internal@absl@@QEBA_KXZ ?size@InlineRep@Cord@absl@@QEBA_KXZ ?size@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBA_KXZ + ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEAHXZ ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXXZ ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@XZ ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_x64_dbg_cxx23.def b/third_party/abseil-cpp/symbols_x64_dbg_cxx23.def index 112ec6e..45dc693 100644 --- a/third_party/abseil-cpp/symbols_x64_dbg_cxx23.def +++ b/third_party/abseil-cpp/symbols_x64_dbg_cxx23.def
@@ -358,6 +358,7 @@ ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEB_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@@Z + ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PEBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBX@Z ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAEAVStringifySink@strings_internal@0@UHex@0@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXV?$Span@QEAUCordRep@cord_internal@absl@@@2@@Z @@ -590,6 +591,7 @@ ??$IntegerToString@_J@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_J@Z ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBH@Z + ??$Invoke@VMixingHashState@hash_internal@absl@@PEBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBQEBX@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEB_K@__Cr@std@@@Z @@ -1318,6 +1320,7 @@ ??$call_once@A6AXXZ$$V@absl@@YAXAEAVonce_flag@0@A6AXXZ@Z ??$call_once@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@absl@@YAXAEAVonce_flag@0@$$QEAP8FlagImpl@flags_internal@0@EAAXXZ$$QEAPEAV230@@Z ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBH@Z + ??$combine@PEBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBQEBX@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z ??$combine@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z @@ -1535,6 +1538,7 @@ ??$get@$0A@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YAAEBQEAVCommandLineFlag@absl@@AEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QEAPEAVCommandLineFlag@absl@@$$QEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z + ??$hash@PEBX@MixingHashState@hash_internal@absl@@SA_KAEBQEBX@Z ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBUStringHash@container_internal@2@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z @@ -1544,6 +1548,7 @@ ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBD_K@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@U?$integer_sequence@_K$0A@$00@45@@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@U?$integer_sequence@_K$0A@@45@@Z + ??$hash_with_seed@PEBX$0A@@MixingHashState@hash_internal@absl@@SA_KAEBQEBX_K@Z ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ??$hash_with_seed@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@_K@Z ??$hash_with_seed@V?$tuple@AEB_K@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEB_K@__Cr@std@@_K@Z @@ -1655,6 +1660,7 @@ ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAKH@Z ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_JH@Z ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_KH@Z + ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YA_KAEAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z ??$swap@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@0@Z ??$swap@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAEAPEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z ??$swap@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAUTransition@cctz@time_internal@absl@@0@Z @@ -1983,6 +1989,7 @@ ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z ??0BestHints@flags_internal@absl@@QEAA@E@Z ??0BlockingCounter@absl@@QEAA@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z ??0BoundConversion@str_format_internal@absl@@QEAA@XZ ??0Breakdown@Time@absl@@QEAA@XZ ??0BufferRawSink@str_format_internal@absl@@QEAA@PEAD_K@Z @@ -2298,6 +2305,7 @@ ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ ??1BadStatusOrAccess@absl@@UEAA@XZ ??1BestHints@flags_internal@absl@@QEAA@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ ??1ByAnyChar@absl@@QEAA@XZ ??1CRC32@crc_internal@absl@@UEAA@XZ ??1CRC@crc_internal@absl@@UEAA@XZ @@ -2755,6 +2763,7 @@ ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@absl@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@1@@Z ??R?$FunctionRef@$$A6A_K_K@Z@absl@@QEBA_K_K@Z + ??R?$HashImpl@PEBX@hash_internal@absl@@QEBA_KAEBQEBX@Z ??R?$HashImpl@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??R?$HashImpl@V?$tuple@AEB_K@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEB_K@__Cr@std@@@Z ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QEBA_K_K@Z @@ -3277,6 +3286,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z @@ -3572,6 +3582,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z @@ -3911,6 +3923,7 @@ ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ ?RecordEraseSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z + ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QEAAX_K0@Z ?RecordInsertMissSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@_K1@Z ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QEAAX_K@Z @@ -4121,6 +4134,7 @@ ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -4267,6 +4281,7 @@ ?TrailingZeros@?$NonIterableBitMask@G$0BA@$0A@@container_internal@absl@@QEBAIXZ ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?TryLockImpl@SpinLock@base_internal@absl@@AEAA_NXZ ?TryLockInternal@SpinLock@base_internal@absl@@AEAAIII@Z ?TryLockSlow@Mutex@absl@@AEAA_NXZ @@ -4301,6 +4316,7 @@ ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UniversalEpoch@absl@@YA?AVTime@1@XZ ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -5288,11 +5304,13 @@ ?flat@CordRep@cord_internal@absl@@QEAAPEAUCordRepFlat@23@XZ ?flat@CordRep@cord_internal@absl@@QEBAPEBUCordRepFlat@23@XZ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z + ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEA_KXZ ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5725,6 +5743,7 @@ ?size@HashtableSize@container_internal@absl@@QEBA_KXZ ?size@InlineRep@Cord@absl@@QEBA_KXZ ?size@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBA_KXZ + ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEAHXZ ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXXZ ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@XZ ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_x64_rel.def b/third_party/abseil-cpp/symbols_x64_rel.def index 08848ef..5a54e00 100644 --- a/third_party/abseil-cpp/symbols_x64_rel.def +++ b/third_party/abseil-cpp/symbols_x64_rel.def
@@ -204,6 +204,7 @@ ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z ??0BlockingCounter@absl@@QEAA@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0ByLength@absl@@QEAA@_J@Z ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -259,6 +260,7 @@ ??0uint128@absl@@QEAA@O@Z ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ ??1CRC@crc_internal@absl@@UEAA@XZ ??1Cord@absl@@QEAA@XZ ??1CordzHandle@cord_internal@absl@@MEAA@XZ @@ -627,6 +629,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z @@ -790,6 +793,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z @@ -1122,6 +1127,7 @@ ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -1216,6 +1222,7 @@ ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?TryLockSlow@Mutex@absl@@AEAA_NXZ ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z @@ -1237,6 +1244,7 @@ ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -1321,6 +1329,7 @@ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x64_rel_asan.def b/third_party/abseil-cpp/symbols_x64_rel_asan.def index 923e52c7..0f90e76 100644 --- a/third_party/abseil-cpp/symbols_x64_rel_asan.def +++ b/third_party/abseil-cpp/symbols_x64_rel_asan.def
@@ -224,6 +224,7 @@ ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z ??0BlockingCounter@absl@@QEAA@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0ByLength@absl@@QEAA@_J@Z ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -280,6 +281,7 @@ ??0uint128@absl@@QEAA@O@Z ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ ??1CRC@crc_internal@absl@@UEAA@XZ ??1Cord@absl@@QEAA@XZ ??1CordzHandle@cord_internal@absl@@MEAA@XZ @@ -653,6 +655,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z @@ -817,6 +820,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z @@ -1153,6 +1158,7 @@ ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -1247,6 +1253,7 @@ ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?TryLockSlow@Mutex@absl@@AEAA_NXZ ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z @@ -1268,6 +1275,7 @@ ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -1362,6 +1370,7 @@ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x64_rel_asan_cxx23.def b/third_party/abseil-cpp/symbols_x64_rel_asan_cxx23.def index 27cc0f3..407b3cd 100644 --- a/third_party/abseil-cpp/symbols_x64_rel_asan_cxx23.def +++ b/third_party/abseil-cpp/symbols_x64_rel_asan_cxx23.def
@@ -224,6 +224,7 @@ ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z ??0BlockingCounter@absl@@QEAA@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0ByLength@absl@@QEAA@_J@Z ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -280,6 +281,7 @@ ??0uint128@absl@@QEAA@O@Z ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ ??1CRC@crc_internal@absl@@UEAA@XZ ??1Cord@absl@@QEAA@XZ ??1CordzHandle@cord_internal@absl@@MEAA@XZ @@ -653,6 +655,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z @@ -817,6 +820,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z @@ -1153,6 +1158,7 @@ ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -1247,6 +1253,7 @@ ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?TryLockSlow@Mutex@absl@@AEAA_NXZ ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z @@ -1268,6 +1275,7 @@ ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -1362,6 +1370,7 @@ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x64_rel_cxx23.def b/third_party/abseil-cpp/symbols_x64_rel_cxx23.def index 00bf0ac4..bd51a10 100644 --- a/third_party/abseil-cpp/symbols_x64_rel_cxx23.def +++ b/third_party/abseil-cpp/symbols_x64_rel_cxx23.def
@@ -204,6 +204,7 @@ ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z ??0BlockingCounter@absl@@QEAA@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0ByLength@absl@@QEAA@_J@Z ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -259,6 +260,7 @@ ??0uint128@absl@@QEAA@O@Z ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ ??1CRC@crc_internal@absl@@UEAA@XZ ??1Cord@absl@@QEAA@XZ ??1CordzHandle@cord_internal@absl@@MEAA@XZ @@ -627,6 +629,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z @@ -790,6 +793,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z @@ -1122,6 +1127,7 @@ ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -1216,6 +1222,7 @@ ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ ?TryLockSlow@Mutex@absl@@AEAA_NXZ ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z @@ -1237,6 +1244,7 @@ ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -1321,6 +1329,7 @@ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x86_dbg.def b/third_party/abseil-cpp/symbols_x86_dbg.def index 785d89a..7f9bff8 100644 --- a/third_party/abseil-cpp/symbols_x86_dbg.def +++ b/third_party/abseil-cpp/symbols_x86_dbg.def
@@ -358,6 +358,7 @@ ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@ABI@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABI@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z + ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PBX@Z ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAAVStringifySink@strings_internal@0@UHex@0@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AAEXPAUCordRep@12@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AAEXV?$Span@QAUCordRep@cord_internal@absl@@@2@@Z @@ -590,6 +591,7 @@ ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABH@Z ??$Invoke@VMixingHashState@hash_internal@absl@@I@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABI@Z + ??$Invoke@VMixingHashState@hash_internal@absl@@PBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABQBX@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@ABI@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$tuple@ABI@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z @@ -1312,6 +1314,7 @@ ??$call_once@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@@absl@@YAXAAVonce_flag@0@$$QAP8FlagImpl@flags_internal@0@AEXXZ$$QAPAV230@@Z ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABH@Z ??$combine@I$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABI@Z + ??$combine@PBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABQBX@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@Z ??$combine@V?$tuple@ABI@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$tuple@ABI@__Cr@std@@@Z @@ -1528,6 +1531,7 @@ ??$get@$0A@ABQAVCommandLineFlag@absl@@@__Cr@std@@YAABQAVCommandLineFlag@absl@@AAV?$tuple@ABQAVCommandLineFlag@absl@@@01@@Z ??$get@$0A@PAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QAPAVCommandLineFlag@absl@@$$QAV?$tuple@PAVCommandLineFlag@absl@@_N@01@@Z ??$get@$0A@PAVCommandLineFlag@absl@@_N@__Cr@std@@YAAAPAVCommandLineFlag@absl@@AAV?$tuple@PAVCommandLineFlag@absl@@_N@01@@Z + ??$hash@PBX@MixingHashState@hash_internal@absl@@SAIABQBX@Z ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QBEIABU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QBEIABUStringHash@container_internal@2@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z ??$hash@V?$tuple@ABI@__Cr@std@@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABI@__Cr@std@@@Z @@ -1537,6 +1541,7 @@ ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PBDI@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@ABI@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABI@__Cr@std@@U?$integer_sequence@I$0A@@45@@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@U?$integer_sequence@I$0A@$00@45@@Z + ??$hash_with_seed@PBX$0A@@MixingHashState@hash_internal@absl@@SAIABQBXI@Z ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z ??$hash_with_seed@V?$tuple@ABI@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABI@__Cr@std@@I@Z ??$hash_with_seed@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@I@Z @@ -1640,6 +1645,7 @@ ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAKH@Z ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PA_JH@Z ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PA_KH@Z + ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YAIAAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z ??$swap@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@0@Z ??$swap@PAPAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAAPAPAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z ??$swap@PAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAAPAUTransition@cctz@time_internal@absl@@0@Z @@ -1968,6 +1974,7 @@ ??0BadStatusOrAccess@absl@@QAE@VStatus@1@@Z ??0BestHints@flags_internal@absl@@QAE@E@Z ??0BlockingCounter@absl@@QAE@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@I@Z ??0BoundConversion@str_format_internal@absl@@QAE@XZ ??0Breakdown@Time@absl@@QAE@XZ ??0BufferRawSink@str_format_internal@absl@@QAE@PADI@Z @@ -2283,6 +2290,7 @@ ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAE@XZ ??1BadStatusOrAccess@absl@@UAE@XZ ??1BestHints@flags_internal@absl@@QAE@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@XZ ??1ByAnyChar@absl@@QAE@XZ ??1CRC32@crc_internal@absl@@UAE@XZ ??1CRC@crc_internal@absl@@UAE@XZ @@ -2756,6 +2764,7 @@ ??R?$FunctionRef@$$A6AXV?$Span@I@absl@@@Z@absl@@QBEXV?$Span@I@1@@Z ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QBEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@absl@@@Z@absl@@QBEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@1@@Z + ??R?$HashImpl@PBX@hash_internal@absl@@QBEIABQBX@Z ??R?$HashImpl@V?$tuple@ABI@__Cr@std@@@hash_internal@absl@@QBEIABV?$tuple@ABI@__Cr@std@@@Z ??R?$HashImpl@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@hash_internal@absl@@QBEIABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QBEII@Z @@ -3278,6 +3287,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QAEXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z ?Find@ByAsciiWhitespace@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z ?Find@ByChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z @@ -3573,6 +3583,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UAEXXZ ?InitTree@ChunkIterator@Cord@absl@@AAEXPAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXI@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXPAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@ABEXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AAEXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAUCordRepExternal@12@@Z @@ -3912,6 +3924,7 @@ ?RecordClearedReservationSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QAEXXZ ?RecordEraseSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z + ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QAEXXZ ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QAEXII@Z ?RecordInsertMissSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@II@Z ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QAEXI@Z @@ -4122,6 +4135,7 @@ ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPBDABVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -4268,6 +4282,7 @@ ?TrailingZeros@?$NonIterableBitMask@G$0BA@$0A@@container_internal@absl@@QBEIXZ ?Trans@Mutex@absl@@AAEXPBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ ?TryLockImpl@SpinLock@base_internal@absl@@AAE_NXZ ?TryLockInternal@SpinLock@base_internal@absl@@AAEIII@Z ?TryLockSlow@Mutex@absl@@AAE_NXZ @@ -4302,6 +4317,7 @@ ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UniversalEpoch@absl@@YA?AVTime@1@XZ ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXXZ ?Unlock@CordzInfo@cord_internal@absl@@QAEXXZ ?UnlockSlow@Mutex@absl@@AAEXPAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -5276,11 +5292,13 @@ ?flat@CordRep@cord_internal@absl@@QAEPAUCordRepFlat@23@XZ ?flat@CordRep@cord_internal@absl@@QBEPBUCordRepFlat@23@XZ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABV567@ABV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@ABV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@ABVtime_zone@234@@Z + ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QBEPAIXZ ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AANW4chars_format@1@@Z ?front@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QAEAAPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QAEAAPAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAUTransition@cctz@time_internal@absl@@XZ + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5713,6 +5731,7 @@ ?size@HashtableSize@container_internal@absl@@QBEIXZ ?size@InlineRep@Cord@absl@@QBEIXZ ?size@Storage@?$FixedArray@D$0PPPPPPPP@V?$allocator@D@__Cr@std@@@absl@@QBEIXZ + ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QBEPAHXZ ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAEXXZ ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@ABEPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@XZ ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@ABEPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_x86_dbg_cxx23.def b/third_party/abseil-cpp/symbols_x86_dbg_cxx23.def index fb5ef631..8422188b 100644 --- a/third_party/abseil-cpp/symbols_x86_dbg_cxx23.def +++ b/third_party/abseil-cpp/symbols_x86_dbg_cxx23.def
@@ -358,6 +358,7 @@ ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@ABI@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABI@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z + ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PBX@Z ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAAVStringifySink@strings_internal@0@UHex@0@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AAEXPAUCordRep@12@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AAEXV?$Span@QAUCordRep@cord_internal@absl@@@2@@Z @@ -590,6 +591,7 @@ ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABH@Z ??$Invoke@VMixingHashState@hash_internal@absl@@I@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABI@Z + ??$Invoke@VMixingHashState@hash_internal@absl@@PBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABQBX@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@ABI@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$tuple@ABI@__Cr@std@@@Z ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z @@ -1317,6 +1319,7 @@ ??$call_once@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@@absl@@YAXAAVonce_flag@0@$$QAP8FlagImpl@flags_internal@0@AEXXZ$$QAPAV230@@Z ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABH@Z ??$combine@I$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABI@Z + ??$combine@PBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABQBX@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@Z ??$combine@V?$tuple@ABI@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$tuple@ABI@__Cr@std@@@Z @@ -1533,6 +1536,7 @@ ??$get@$0A@ABQAVCommandLineFlag@absl@@@__Cr@std@@YAABQAVCommandLineFlag@absl@@AAV?$tuple@ABQAVCommandLineFlag@absl@@@01@@Z ??$get@$0A@PAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QAPAVCommandLineFlag@absl@@$$QAV?$tuple@PAVCommandLineFlag@absl@@_N@01@@Z ??$get@$0A@PAVCommandLineFlag@absl@@_N@__Cr@std@@YAAAPAVCommandLineFlag@absl@@AAV?$tuple@PAVCommandLineFlag@absl@@_N@01@@Z + ??$hash@PBX@MixingHashState@hash_internal@absl@@SAIABQBX@Z ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QBEIABU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QBEIABUStringHash@container_internal@2@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z ??$hash@V?$tuple@ABI@__Cr@std@@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABI@__Cr@std@@@Z @@ -1542,6 +1546,7 @@ ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PBDI@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@ABI@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABI@__Cr@std@@U?$integer_sequence@I$0A@@45@@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@U?$integer_sequence@I$0A@$00@45@@Z + ??$hash_with_seed@PBX$0A@@MixingHashState@hash_internal@absl@@SAIABQBXI@Z ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z ??$hash_with_seed@V?$tuple@ABI@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABI@__Cr@std@@I@Z ??$hash_with_seed@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@I@Z @@ -1653,6 +1658,7 @@ ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAKH@Z ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PA_JH@Z ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PA_KH@Z + ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YAIAAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z ??$swap@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@0@Z ??$swap@PAPAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAAPAPAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z ??$swap@PAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAAPAUTransition@cctz@time_internal@absl@@0@Z @@ -1981,6 +1987,7 @@ ??0BadStatusOrAccess@absl@@QAE@VStatus@1@@Z ??0BestHints@flags_internal@absl@@QAE@E@Z ??0BlockingCounter@absl@@QAE@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@I@Z ??0BoundConversion@str_format_internal@absl@@QAE@XZ ??0Breakdown@Time@absl@@QAE@XZ ??0BufferRawSink@str_format_internal@absl@@QAE@PADI@Z @@ -2296,6 +2303,7 @@ ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAE@XZ ??1BadStatusOrAccess@absl@@UAE@XZ ??1BestHints@flags_internal@absl@@QAE@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@XZ ??1ByAnyChar@absl@@QAE@XZ ??1CRC32@crc_internal@absl@@UAE@XZ ??1CRC@crc_internal@absl@@UAE@XZ @@ -2753,6 +2761,7 @@ ??R?$FunctionRef@$$A6AXV?$Span@I@absl@@@Z@absl@@QBEXV?$Span@I@1@@Z ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QBEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@absl@@@Z@absl@@QBEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@1@@Z + ??R?$HashImpl@PBX@hash_internal@absl@@QBEIABQBX@Z ??R?$HashImpl@V?$tuple@ABI@__Cr@std@@@hash_internal@absl@@QBEIABV?$tuple@ABI@__Cr@std@@@Z ??R?$HashImpl@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@hash_internal@absl@@QBEIABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QBEII@Z @@ -3275,6 +3284,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QAEXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z ?Find@ByAsciiWhitespace@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z ?Find@ByChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z @@ -3570,6 +3580,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UAEXXZ ?InitTree@ChunkIterator@Cord@absl@@AAEXPAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXI@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXPAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@ABEXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AAEXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAUCordRepExternal@12@@Z @@ -3909,6 +3921,7 @@ ?RecordClearedReservationSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QAEXXZ ?RecordEraseSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z + ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QAEXXZ ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QAEXII@Z ?RecordInsertMissSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@II@Z ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QAEXI@Z @@ -4119,6 +4132,7 @@ ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPBDABVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -4265,6 +4279,7 @@ ?TrailingZeros@?$NonIterableBitMask@G$0BA@$0A@@container_internal@absl@@QBEIXZ ?Trans@Mutex@absl@@AAEXPBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ ?TryLockImpl@SpinLock@base_internal@absl@@AAE_NXZ ?TryLockInternal@SpinLock@base_internal@absl@@AAEIII@Z ?TryLockSlow@Mutex@absl@@AAE_NXZ @@ -4299,6 +4314,7 @@ ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UniversalEpoch@absl@@YA?AVTime@1@XZ ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXXZ ?Unlock@CordzInfo@cord_internal@absl@@QAEXXZ ?UnlockSlow@Mutex@absl@@AAEXPAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -5286,11 +5302,13 @@ ?flat@CordRep@cord_internal@absl@@QAEPAUCordRepFlat@23@XZ ?flat@CordRep@cord_internal@absl@@QBEPBUCordRepFlat@23@XZ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABV567@ABV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@ABV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@ABVtime_zone@234@@Z + ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QBEPAIXZ ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AANW4chars_format@1@@Z ?front@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QAEAAPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QAEAAPAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAUTransition@cctz@time_internal@absl@@XZ + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5723,6 +5741,7 @@ ?size@HashtableSize@container_internal@absl@@QBEIXZ ?size@InlineRep@Cord@absl@@QBEIXZ ?size@Storage@?$FixedArray@D$0PPPPPPPP@V?$allocator@D@__Cr@std@@@absl@@QBEIXZ + ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QBEPAHXZ ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAEXXZ ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@ABEPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@XZ ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@ABEPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_x86_rel.def b/third_party/abseil-cpp/symbols_x86_rel.def index ded7505..f3acc37 100644 --- a/third_party/abseil-cpp/symbols_x86_rel.def +++ b/third_party/abseil-cpp/symbols_x86_rel.def
@@ -207,6 +207,7 @@ ??0BadStatusOrAccess@absl@@QAE@ABV01@@Z ??0BadStatusOrAccess@absl@@QAE@VStatus@1@@Z ??0BlockingCounter@absl@@QAE@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@I@Z ??0ByAnyChar@absl@@QAE@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0ByLength@absl@@QAE@H@Z ??0ByString@absl@@QAE@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -262,6 +263,7 @@ ??0uint128@absl@@QAE@O@Z ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@XZ ??1CRC@crc_internal@absl@@UAE@XZ ??1Cord@absl@@QAE@XZ ??1CordzHandle@cord_internal@absl@@MAE@XZ @@ -627,6 +629,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QAEXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z ?Find@ByAsciiWhitespace@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z ?Find@ByChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z @@ -790,6 +793,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UAEXXZ ?InitTree@ChunkIterator@Cord@absl@@AAEXPAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXI@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXPAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@ABEXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AAEXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAUCordRepExternal@12@@Z @@ -1124,6 +1129,7 @@ ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPBDABVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -1218,6 +1224,7 @@ ?TrackCord@CordzInfo@cord_internal@absl@@SAXAAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z ?Trans@Mutex@absl@@AAEXPBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ ?TryLockSlow@Mutex@absl@@AAE_NXZ ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPAVCRCImpl@12@XZ ?TryParse@FlagImpl@flags_internal@absl@@ABE?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z @@ -1239,6 +1246,7 @@ ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@I@Z ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXXZ ?Unlock@CordzInfo@cord_internal@absl@@QAEXXZ ?UnlockSlow@Mutex@absl@@AAEXPAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -1323,6 +1331,7 @@ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABV567@ABV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@ABV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@ABVtime_zone@234@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AANW4chars_format@1@@Z + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@ABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x86_rel_cxx23.def b/third_party/abseil-cpp/symbols_x86_rel_cxx23.def index d739e5d..bdb1375 100644 --- a/third_party/abseil-cpp/symbols_x86_rel_cxx23.def +++ b/third_party/abseil-cpp/symbols_x86_rel_cxx23.def
@@ -207,6 +207,7 @@ ??0BadStatusOrAccess@absl@@QAE@ABV01@@Z ??0BadStatusOrAccess@absl@@QAE@VStatus@1@@Z ??0BlockingCounter@absl@@QAE@H@Z + ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@I@Z ??0ByAnyChar@absl@@QAE@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0ByLength@absl@@QAE@H@Z ??0ByString@absl@@QAE@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -262,6 +263,7 @@ ??0uint128@absl@@QAE@O@Z ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ + ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@XZ ??1CRC@crc_internal@absl@@UAE@XZ ??1Cord@absl@@QAE@XZ ??1CordzHandle@cord_internal@absl@@MAE@XZ @@ -627,6 +629,7 @@ ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPAY0BAA@I@Z ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QAEXXZ ?FinalizeRegistry@flags_internal@absl@@YAXXZ + ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ ?Find@ByAnyChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z ?Find@ByAsciiWhitespace@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z ?Find@ByChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z @@ -790,6 +793,8 @@ ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitTables@CRC32@crc_internal@absl@@UAEXXZ ?InitTree@ChunkIterator@Cord@absl@@AAEXPAUCordRep@cord_internal@3@@Z + ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXI@Z + ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXPAUFixupStackBuffer@123@@Z ?InitWhat@BadStatusOrAccess@absl@@ABEXXZ ?Initialize@ExponentialBiased@profiling_internal@absl@@AAEXXZ ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAUCordRepExternal@12@@Z @@ -1124,6 +1129,7 @@ ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z + ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z ?StatusMessageAsCStr@absl@@YAPBDABVStatus@1@@Z ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ @@ -1218,6 +1224,7 @@ ?TrackCord@CordzInfo@cord_internal@absl@@SAXAAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z ?Trans@Mutex@absl@@AAEXPBUMuHowS@2@@Z ?Trunc@absl@@YA?AVDuration@1@V21@0@Z + ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ ?TryLockSlow@Mutex@absl@@AAE_NXZ ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPAVCRCImpl@12@XZ ?TryParse@FlagImpl@flags_internal@absl@@ABE?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z @@ -1239,6 +1246,7 @@ ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@I@Z ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXXZ ?Unlock@CordzInfo@cord_internal@absl@@QAEXXZ ?UnlockSlow@Mutex@absl@@AAEXPAUSynchWaitParams@2@@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z @@ -1323,6 +1331,7 @@ ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABV567@ABV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@ABV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@ABVtime_zone@234@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AAMW4chars_format@1@@Z ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AANW4chars_format@1@@Z + ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@ABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/androidx/build.gradle b/third_party/androidx/build.gradle index 4d2b868..fbc6f013 100644 --- a/third_party/androidx/build.gradle +++ b/third_party/androidx/build.gradle
@@ -314,7 +314,7 @@ google() maven { // This URL is generated by the fetch_all_androidx.py script. - url 'https://androidx.dev/snapshots/builds/14447890/artifacts/repository' + url 'https://androidx.dev/snapshots/builds/14455269/artifacts/repository' } mavenCentral() }
diff --git a/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium b/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium index 119adf5..a729e92 100644 --- a/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium +++ b/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium
@@ -1,6 +1,6 @@ Name: Activity Short Name: activity -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/activity/activity/1.13.0-SNAPSHOT/activity-1.13.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/activity/activity/1.13.0-SNAPSHOT/activity-1.13.0-20251118.131355-1.aar Version: 1.13.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium b/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium index b362303..8142266a 100644 --- a/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium +++ b/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium
@@ -1,6 +1,6 @@ Name: Activity Compose Short Name: activity-compose -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/activity/activity-compose/1.13.0-SNAPSHOT/activity-compose-1.13.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/activity/activity-compose/1.13.0-SNAPSHOT/activity-compose-1.13.0-20251118.131355-1.aar Version: 1.13.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium index e7bc7e0e..d4f1b942 100644 --- a/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Activity Kotlin Extensions Short Name: activity-ktx -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/activity/activity-ktx/1.13.0-SNAPSHOT/activity-ktx-1.13.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/activity/activity-ktx/1.13.0-SNAPSHOT/activity-ktx-1.13.0-20251118.131355-1.aar Version: 1.13.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium b/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium index c0c837c..91d5d34b 100644 --- a/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium +++ b/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium
@@ -1,6 +1,6 @@ Name: Experimental annotation Short Name: annotation-experimental -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/annotation/annotation-experimental/1.6.0-SNAPSHOT/annotation-experimental-1.6.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/annotation/annotation-experimental/1.6.0-SNAPSHOT/annotation-experimental-1.6.0-20251118.131355-1.aar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium index 015a28a7..198beee 100644 --- a/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium +++ b/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium
@@ -1,6 +1,6 @@ Name: Annotation Short Name: annotation-jvm -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/annotation/annotation-jvm/1.10.0-SNAPSHOT/annotation-jvm-1.10.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/annotation/annotation-jvm/1.10.0-SNAPSHOT/annotation-jvm-1.10.0-20251118.131355-1.jar Version: 1.10.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium b/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium index cdeb461..94eb333 100644 --- a/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium +++ b/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium
@@ -1,6 +1,6 @@ Name: AppCompat Short Name: appcompat -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/appcompat/appcompat/1.8.0-SNAPSHOT/appcompat-1.8.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/appcompat/appcompat/1.8.0-SNAPSHOT/appcompat-1.8.0-20251118.131355-1.aar Version: 1.8.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium b/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium index 4c7126b9..e12c163 100644 --- a/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium +++ b/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium
@@ -1,6 +1,6 @@ Name: AppCompat Resources Short Name: appcompat-resources -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/appcompat/appcompat-resources/1.8.0-SNAPSHOT/appcompat-resources-1.8.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/appcompat/appcompat-resources/1.8.0-SNAPSHOT/appcompat-resources-1.8.0-20251118.131355-1.aar Version: 1.8.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium b/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium index fa08f8d..0620b84 100644 --- a/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium +++ b/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium
@@ -1,6 +1,6 @@ Name: AppSearch Short Name: appsearch -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/appsearch/appsearch/1.2.0-SNAPSHOT/appsearch-1.2.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/appsearch/appsearch/1.2.0-SNAPSHOT/appsearch-1.2.0-20251118.131355-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium index f9fe4a2..d79dfb64 100644 --- a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium +++ b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium
@@ -1,6 +1,6 @@ Name: AppSearch Builtin Types Short Name: appsearch-builtin-types -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/appsearch/appsearch-builtin-types/1.2.0-SNAPSHOT/appsearch-builtin-types-1.2.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/appsearch/appsearch-builtin-types/1.2.0-SNAPSHOT/appsearch-builtin-types-1.2.0-20251118.131355-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium index 76f6bba4..7681fab 100644 --- a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium +++ b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium
@@ -1,6 +1,6 @@ Name: AppSearch Platform Storage Short Name: appsearch-platform-storage -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/appsearch/appsearch-platform-storage/1.2.0-SNAPSHOT/appsearch-platform-storage-1.2.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/appsearch/appsearch-platform-storage/1.2.0-SNAPSHOT/appsearch-platform-storage-1.2.0-20251118.131355-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium b/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium index 17773a3e..4803926 100644 --- a/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium +++ b/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium
@@ -1,6 +1,6 @@ Name: Arch-Common Short Name: core-common -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/arch/core/core-common/2.3.0-SNAPSHOT/core-common-2.3.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/arch/core/core-common/2.3.0-SNAPSHOT/core-common-2.3.0-20251118.131355-1.jar Version: 2.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium b/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium index b73cc7c..deb58b7 100644 --- a/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium +++ b/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium
@@ -1,6 +1,6 @@ Name: Arch-Runtime Short Name: core-runtime -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/arch/core/core-runtime/2.3.0-SNAPSHOT/core-runtime-2.3.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/arch/core/core-runtime/2.3.0-SNAPSHOT/core-runtime-2.3.0-20251118.131355-1.aar Version: 2.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium b/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium index 87a77c5..c163680 100644 --- a/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium +++ b/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium
@@ -1,6 +1,6 @@ Name: Autofill Short Name: autofill -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/autofill/autofill/1.4.0-SNAPSHOT/autofill-1.4.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/autofill/autofill/1.4.0-SNAPSHOT/autofill-1.4.0-20251118.131355-1.aar Version: 1.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium index b3cb8f6..76751d0 100644 --- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium +++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium
@@ -1,6 +1,6 @@ Name: Benchmark - Common Short Name: benchmark-common -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/benchmark/benchmark-common/1.5.0-SNAPSHOT/benchmark-common-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/benchmark/benchmark-common/1.5.0-SNAPSHOT/benchmark-common-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium index 09fc9098..21fa0683 100644 --- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium +++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium
@@ -1,6 +1,6 @@ Name: Benchmark - JUnit4 Short Name: benchmark-junit4 -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/benchmark/benchmark-junit4/1.5.0-SNAPSHOT/benchmark-junit4-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/benchmark/benchmark-junit4/1.5.0-SNAPSHOT/benchmark-junit4-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium index eaac19bf..c8da57ca 100644 --- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium +++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium
@@ -1,6 +1,6 @@ Name: Benchmark - Macrobenchmark Short Name: benchmark-macro -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/benchmark/benchmark-macro/1.5.0-SNAPSHOT/benchmark-macro-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/benchmark/benchmark-macro/1.5.0-SNAPSHOT/benchmark-macro-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium index eb7480f..847a7d6 100644 --- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium +++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium
@@ -1,6 +1,6 @@ Name: Benchmark - Macrobenchmark JUnit4 Short Name: benchmark-macro-junit4 -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/benchmark/benchmark-macro-junit4/1.5.0-SNAPSHOT/benchmark-macro-junit4-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/benchmark/benchmark-macro-junit4/1.5.0-SNAPSHOT/benchmark-macro-junit4-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium index 9e0400b8..2c619a92 100644 --- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium
@@ -1,6 +1,6 @@ Name: Benchmark TraceProcessor Short Name: benchmark-traceprocessor-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/benchmark/benchmark-traceprocessor-android/1.5.0-SNAPSHOT/benchmark-traceprocessor-android-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/benchmark/benchmark-traceprocessor-android/1.5.0-SNAPSHOT/benchmark-traceprocessor-android-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium b/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium index 64146dd..25892392f 100644 --- a/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium +++ b/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium
@@ -1,6 +1,6 @@ Name: Biometric Short Name: biometric -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/biometric/biometric/1.4.0-SNAPSHOT/biometric-1.4.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/biometric/biometric/1.4.0-SNAPSHOT/biometric-1.4.0-20251118.131355-1.aar Version: 1.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium b/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium index 5480b4c..43319f9 100644 --- a/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium +++ b/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium
@@ -1,6 +1,6 @@ Name: Browser Short Name: browser -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/browser/browser/1.10.0-SNAPSHOT/browser-1.10.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/browser/browser/1.10.0-SNAPSHOT/browser-1.10.0-20251118.131355-1.aar Version: 1.10.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium b/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium index 5f93048..58d83cac 100644 --- a/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium +++ b/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium
@@ -1,6 +1,6 @@ Name: CardView Short Name: cardview -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/cardview/cardview/1.1.0-SNAPSHOT/cardview-1.1.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/cardview/cardview/1.1.0-SNAPSHOT/cardview-1.1.0-20251118.131355-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium index 46e2ffb..d9ef6bb 100644 --- a/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium +++ b/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium
@@ -1,6 +1,6 @@ Name: collections Short Name: collection-jvm -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/collection/collection-jvm/1.6.0-SNAPSHOT/collection-jvm-1.6.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/collection/collection-jvm/1.6.0-SNAPSHOT/collection-jvm-1.6.0-20251118.131355-1.jar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium index c540532..4e645deba 100644 --- a/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Collections Kotlin Extensions Short Name: collection-ktx -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/collection/collection-ktx/1.6.0-SNAPSHOT/collection-ktx-1.6.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/collection/collection-ktx/1.6.0-SNAPSHOT/collection-ktx-1.6.0-20251118.131355-1.jar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium index 1b9f998..6577b11b 100644 --- a/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Animation Short Name: animation-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/animation/animation-android/1.11.0-SNAPSHOT/animation-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/animation/animation-android/1.11.0-SNAPSHOT/animation-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium index 09fc13b..4a6b70750 100644 --- a/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Animation Core Short Name: animation-core-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/animation/animation-core-android/1.11.0-SNAPSHOT/animation-core-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/animation/animation-core-android/1.11.0-SNAPSHOT/animation-core-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium index c79b9e2e..a4e390d 100644 --- a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Foundation Short Name: foundation-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/foundation/foundation-android/1.11.0-SNAPSHOT/foundation-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/foundation/foundation-android/1.11.0-SNAPSHOT/foundation-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium index b37c106..4a973b1 100644 --- a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Layouts Short Name: foundation-layout-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/foundation/foundation-layout-android/1.11.0-SNAPSHOT/foundation-layout-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/foundation/foundation-layout-android/1.11.0-SNAPSHOT/foundation-layout-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium index 7cb53dc..2d3f6a5 100644 --- a/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Material3 Components Short Name: material3-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/material3/material3-android/1.5.0-SNAPSHOT/material3-android-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/material3/material3-android/1.5.0-SNAPSHOT/material3-android-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium index b69dcc6..d89aff8 100644 --- a/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Material Ripple Short Name: material-ripple-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/material/material-ripple-android/1.11.0-SNAPSHOT/material-ripple-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/material/material-ripple-android/1.11.0-SNAPSHOT/material-ripple-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium index 0d9cdbe..da5457d 100644 --- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Runtime Short Name: runtime-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/runtime/runtime-android/1.11.0-SNAPSHOT/runtime-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/runtime/runtime-android/1.11.0-SNAPSHOT/runtime-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium index e0cb7bba..8a0f8b3 100644 --- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Runtime Annotation Short Name: runtime-annotation-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/runtime/runtime-annotation-android/1.11.0-SNAPSHOT/runtime-annotation-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/runtime/runtime-annotation-android/1.11.0-SNAPSHOT/runtime-annotation-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium index 0ecaf7fb..7bc60d9 100644 --- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Runtime Retain Short Name: runtime-retain-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/runtime/runtime-retain-android/1.11.0-SNAPSHOT/runtime-retain-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/runtime/runtime-retain-android/1.11.0-SNAPSHOT/runtime-retain-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium index cb3d055..70d4d1b 100644 --- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Saveable Short Name: runtime-saveable-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/runtime/runtime-saveable-android/1.11.0-SNAPSHOT/runtime-saveable-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/runtime/runtime-saveable-android/1.11.0-SNAPSHOT/runtime-saveable-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium index 7a3477a..acae5f1 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose UI Short Name: ui-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-android/1.11.0-SNAPSHOT/ui-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-android/1.11.0-SNAPSHOT/ui-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium index 35f2c23..091094c 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Geometry Short Name: ui-geometry-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-geometry-android/1.11.0-SNAPSHOT/ui-geometry-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-geometry-android/1.11.0-SNAPSHOT/ui-geometry-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium index 9f263f721..0ce2be1 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Graphics Short Name: ui-graphics-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-graphics-android/1.11.0-SNAPSHOT/ui-graphics-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-graphics-android/1.11.0-SNAPSHOT/ui-graphics-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium index 00685b4..c763a20 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Testing Short Name: ui-test-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-test-android/1.11.0-SNAPSHOT/ui-test-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-test-android/1.11.0-SNAPSHOT/ui-test-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium index 49b097a7..dbe76f9 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Testing for JUnit4 Short Name: ui-test-junit4-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-test-junit4-android/1.11.0-SNAPSHOT/ui-test-junit4-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-test-junit4-android/1.11.0-SNAPSHOT/ui-test-junit4-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium index b4bbd26f..05834ba 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Testing manifest dependency Short Name: ui-test-manifest -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-test-manifest/1.11.0-SNAPSHOT/ui-test-manifest-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-test-manifest/1.11.0-SNAPSHOT/ui-test-manifest-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium index 722d714..1315b7b 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose UI Text Short Name: ui-text-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-text-android/1.11.0-SNAPSHOT/ui-text-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-text-android/1.11.0-SNAPSHOT/ui-text-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium index ef05c70..96c87ec 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Google Fonts integration Short Name: ui-text-google-fonts -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-text-google-fonts/1.11.0-SNAPSHOT/ui-text-google-fonts-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-text-google-fonts/1.11.0-SNAPSHOT/ui-text-google-fonts-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium index 109648f..755381f 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Unit Short Name: ui-unit-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-unit-android/1.11.0-SNAPSHOT/ui-unit-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-unit-android/1.11.0-SNAPSHOT/ui-unit-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium index 04fa730..e101b4c 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Util Short Name: ui-util-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-util-android/1.11.0-SNAPSHOT/ui-util-android-1.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-util-android/1.11.0-SNAPSHOT/ui-util-android-1.11.0-20251118.131355-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium index eb4f96c..ba04378b 100644 --- a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium +++ b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium
@@ -1,6 +1,6 @@ Name: ConstraintLayout Short Name: constraintlayout -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/constraintlayout/constraintlayout/2.3.0-SNAPSHOT/constraintlayout-2.3.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/constraintlayout/constraintlayout/2.3.0-SNAPSHOT/constraintlayout-2.3.0-20251118.131355-1.aar Version: 2.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium index f64a73a..8cfcd95 100644 --- a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium +++ b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium
@@ -1,6 +1,6 @@ Name: ConstraintLayout Core Short Name: constraintlayout-core -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/constraintlayout/constraintlayout-core/1.2.0-SNAPSHOT/constraintlayout-core-1.2.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/constraintlayout/constraintlayout-core/1.2.0-SNAPSHOT/constraintlayout-core-1.2.0-20251118.131355-1.jar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_core_core/README.chromium b/third_party/androidx/committed/libs/androidx_core_core/README.chromium index 7f82b53..4fbfc47 100644 --- a/third_party/androidx/committed/libs/androidx_core_core/README.chromium +++ b/third_party/androidx/committed/libs/androidx_core_core/README.chromium
@@ -1,6 +1,6 @@ Name: Core Short Name: core -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/core/core/1.18.0-SNAPSHOT/core-1.18.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/core/core/1.18.0-SNAPSHOT/core-1.18.0-20251118.131355-1.aar Version: 1.18.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium index 3024182..98a780d 100644 --- a/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Core Kotlin Extensions Short Name: core-ktx -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/core/core-ktx/1.18.0-SNAPSHOT/core-ktx-1.18.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/core/core-ktx/1.18.0-SNAPSHOT/core-ktx-1.18.0-20251118.131355-1.aar Version: 1.18.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium b/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium index 468d522..f92fd6c 100644 --- a/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium +++ b/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.core:core-viewtree Short Name: core-viewtree -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/core/core-viewtree/1.1.0-SNAPSHOT/core-viewtree-1.1.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/core/core-viewtree/1.1.0-SNAPSHOT/core-viewtree-1.1.0-20251118.131355-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium index 29b58b3..05e60a1 100644 --- a/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium +++ b/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium
@@ -1,6 +1,6 @@ Name: Credentials Short Name: credentials -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/credentials/credentials/1.6.0-SNAPSHOT/credentials-1.6.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/credentials/credentials/1.6.0-SNAPSHOT/credentials-1.6.0-20251118.131355-1.aar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium index bfce4e98..a48dbcf 100644 --- a/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium +++ b/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium
@@ -1,6 +1,6 @@ Name: Credentials Play Services Auth Short Name: credentials-play-services-auth -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/credentials/credentials-play-services-auth/1.6.0-SNAPSHOT/credentials-play-services-auth-1.6.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/credentials/credentials-play-services-auth/1.6.0-SNAPSHOT/credentials-play-services-auth-1.6.0-20251118.131355-1.aar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium index 584832f..e275100 100644 --- a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium +++ b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.credentials.registry:registry-provider Short Name: registry-provider -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/credentials/registry/registry-provider/1.0.0-SNAPSHOT/registry-provider-1.0.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/credentials/registry/registry-provider/1.0.0-SNAPSHOT/registry-provider-1.0.0-20251118.131355-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium index c2368cab..956b2a96 100644 --- a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium +++ b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.credentials.registry:registry-provider-play-services Short Name: registry-provider-play-services -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/credentials/registry/registry-provider-play-services/1.0.0-SNAPSHOT/registry-provider-play-services-1.0.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/credentials/registry/registry-provider-play-services/1.0.0-SNAPSHOT/registry-provider-play-services-1.0.0-20251118.131355-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium b/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium index 9592c6d..aba5149 100644 --- a/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium +++ b/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium
@@ -1,6 +1,6 @@ Name: Cursor Adapter Short Name: cursoradapter -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/cursoradapter/cursoradapter/1.1.0-SNAPSHOT/cursoradapter-1.1.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/cursoradapter/cursoradapter/1.1.0-SNAPSHOT/cursoradapter-1.1.0-20251118.131355-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium index d7f3f5c..8d0526d 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium
@@ -1,6 +1,6 @@ Name: DataStore Short Name: datastore-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-android/1.3.0-SNAPSHOT/datastore-android-1.3.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-android/1.3.0-SNAPSHOT/datastore-android-1.3.0-20251118.131355-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium index d3681ae64..6f1eef6 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium
@@ -1,6 +1,6 @@ Name: DataStore Core Short Name: datastore-core-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-core-android/1.3.0-SNAPSHOT/datastore-core-android-1.3.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-core-android/1.3.0-SNAPSHOT/datastore-core-android-1.3.0-20251118.131355-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium index b3019943..43d5980 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium
@@ -1,6 +1,6 @@ Name: DataStore Core Okio Short Name: datastore-core-okio-jvm -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-core-okio-jvm/1.3.0-SNAPSHOT/datastore-core-okio-jvm-1.3.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-core-okio-jvm/1.3.0-SNAPSHOT/datastore-core-okio-jvm-1.3.0-20251118.131355-1.jar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium index 8957000d..6f6d06af 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium
@@ -1,6 +1,6 @@ Name: Preferences DataStore Short Name: datastore-preferences-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-preferences-android/1.3.0-SNAPSHOT/datastore-preferences-android-1.3.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-preferences-android/1.3.0-SNAPSHOT/datastore-preferences-android-1.3.0-20251118.131355-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium index caa62a2f..de15b6c 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium
@@ -1,6 +1,6 @@ Name: Preferences DataStore Core Short Name: datastore-preferences-core-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-preferences-core-android/1.3.0-SNAPSHOT/datastore-preferences-core-android-1.3.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-preferences-core-android/1.3.0-SNAPSHOT/datastore-preferences-core-android-1.3.0-20251118.131355-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium index 284ca65..fe22444 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium
@@ -1,6 +1,6 @@ Name: Preferences External Protobuf Short Name: datastore-preferences-external-protobuf -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-preferences-external-protobuf/1.3.0-SNAPSHOT/datastore-preferences-external-protobuf-1.3.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-preferences-external-protobuf/1.3.0-SNAPSHOT/datastore-preferences-external-protobuf-1.3.0-20251118.131355-1.jar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: BSD-3-Clause
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium index 6fcc4ee6..015aed45 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium
@@ -1,6 +1,6 @@ Name: Preferences DataStore Proto Short Name: datastore-preferences-proto -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-preferences-proto/1.3.0-SNAPSHOT/datastore-preferences-proto-1.3.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-preferences-proto/1.3.0-SNAPSHOT/datastore-preferences-proto-1.3.0-20251118.131355-1.jar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium b/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium index 2e38082..ae6b1ffc 100644 --- a/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium +++ b/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium
@@ -1,6 +1,6 @@ Name: Drawer Layout Short Name: drawerlayout -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/drawerlayout/drawerlayout/1.3.0-SNAPSHOT/drawerlayout-1.3.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/drawerlayout/drawerlayout/1.3.0-SNAPSHOT/drawerlayout-1.3.0-20251118.131355-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium b/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium index b52f09b..34022b4d 100644 --- a/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium +++ b/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium
@@ -1,6 +1,6 @@ Name: Emoji Short Name: emoji -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/emoji/emoji/1.2.0-SNAPSHOT/emoji-1.2.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/emoji/emoji/1.2.0-SNAPSHOT/emoji-1.2.0-20251118.131355-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0, SIL Open Font License, Version 1.1, Unicode, Inc. License
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium index 3f91a717..3ce5372 100644 --- a/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium +++ b/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium
@@ -1,6 +1,6 @@ Name: fragment Short Name: fragment -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/fragment/fragment/1.9.0-SNAPSHOT/fragment-1.9.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/fragment/fragment/1.9.0-SNAPSHOT/fragment-1.9.0-20251118.131355-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium index 3d72f8a..2351229 100644 --- a/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium +++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium
@@ -1,6 +1,6 @@ Name: Fragment Compose Short Name: fragment-compose -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/fragment/fragment-compose/1.9.0-SNAPSHOT/fragment-compose-1.9.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/fragment/fragment-compose/1.9.0-SNAPSHOT/fragment-compose-1.9.0-20251118.131355-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium index 386eb2b5..586e90f 100644 --- a/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Fragment Kotlin Extensions Short Name: fragment-ktx -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/fragment/fragment-ktx/1.9.0-SNAPSHOT/fragment-ktx-1.9.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/fragment/fragment-ktx/1.9.0-SNAPSHOT/fragment-ktx-1.9.0-20251118.131355-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium index 87edb17..30ce7f3 100644 --- a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium +++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium
@@ -1,6 +1,6 @@ Name: Fragment Testing Extensions Short Name: fragment-testing -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/fragment/fragment-testing/1.9.0-SNAPSHOT/fragment-testing-1.9.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/fragment/fragment-testing/1.9.0-SNAPSHOT/fragment-testing-1.9.0-20251118.131355-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium index 500e2b1..00faae7 100644 --- a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium +++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium
@@ -1,6 +1,6 @@ Name: Fragment Testing Manifest dependency Short Name: fragment-testing-manifest -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/fragment/fragment-testing-manifest/1.9.0-SNAPSHOT/fragment-testing-manifest-1.9.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/fragment/fragment-testing-manifest/1.9.0-SNAPSHOT/fragment-testing-manifest-1.9.0-20251118.131355-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium b/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium index e4ffb0e..c56ec6fb 100644 --- a/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium +++ b/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium
@@ -1,6 +1,6 @@ Name: Android Graphics Path Short Name: graphics-path -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/graphics/graphics-path/1.1.0-SNAPSHOT/graphics-path-1.1.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/graphics/graphics-path/1.1.0-SNAPSHOT/graphics-path-1.1.0-20251118.131355-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium b/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium index f974e31..b48b576 100644 --- a/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium +++ b/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium
@@ -1,6 +1,6 @@ Name: Interpolators Short Name: interpolator -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/interpolator/interpolator/1.1.0-SNAPSHOT/interpolator-1.1.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/interpolator/interpolator/1.1.0-SNAPSHOT/interpolator-1.1.0-20251118.131355-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium index be39043d..eeef718 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle-Common for Java 8 Short Name: lifecycle-common-java8 -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-common-java8/2.11.0-SNAPSHOT/lifecycle-common-java8-2.11.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-common-java8/2.11.0-SNAPSHOT/lifecycle-common-java8-2.11.0-20251118.131355-1.jar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium index 9854639..3f0ae2e 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle-Common Short Name: lifecycle-common-jvm -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-common-jvm/2.11.0-SNAPSHOT/lifecycle-common-jvm-2.11.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-common-jvm/2.11.0-SNAPSHOT/lifecycle-common-jvm-2.11.0-20251118.131355-1.jar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium index d855084..55c6ec5 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle LiveData Short Name: lifecycle-livedata -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-livedata/2.11.0-SNAPSHOT/lifecycle-livedata-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-livedata/2.11.0-SNAPSHOT/lifecycle-livedata-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium index 4bf7d585..81421c96 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle LiveData Core Short Name: lifecycle-livedata-core -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core/2.11.0-SNAPSHOT/lifecycle-livedata-core-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core/2.11.0-SNAPSHOT/lifecycle-livedata-core-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium index f2fdf19..1867e11 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: LiveData Core Kotlin Extensions Short Name: lifecycle-livedata-core-ktx -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-core-ktx-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-core-ktx-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium index 2a923fd0..3c00be24 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: LiveData Kotlin Extensions Short Name: lifecycle-livedata-ktx -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-livedata-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-ktx-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-livedata-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-ktx-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium index 08fbe685..9bcd28a2 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle Process Short Name: lifecycle-process -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-process/2.11.0-SNAPSHOT/lifecycle-process-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-process/2.11.0-SNAPSHOT/lifecycle-process-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium index 2dc40531..165a75f 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle Runtime Short Name: lifecycle-runtime-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-runtime-android/2.11.0-SNAPSHOT/lifecycle-runtime-android-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-runtime-android/2.11.0-SNAPSHOT/lifecycle-runtime-android-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium index 05a40121..13b0385 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle Runtime Compose Short Name: lifecycle-runtime-compose-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-runtime-compose-android/2.11.0-SNAPSHOT/lifecycle-runtime-compose-android-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-runtime-compose-android/2.11.0-SNAPSHOT/lifecycle-runtime-compose-android-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium index 8586739..6c91556 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle Kotlin Extensions Short Name: lifecycle-runtime-ktx-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-runtime-ktx-android/2.11.0-SNAPSHOT/lifecycle-runtime-ktx-android-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-runtime-ktx-android/2.11.0-SNAPSHOT/lifecycle-runtime-ktx-android-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium index be023106..ffc54ba 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle Service Short Name: lifecycle-service -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-service/2.11.0-SNAPSHOT/lifecycle-service-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-service/2.11.0-SNAPSHOT/lifecycle-service-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium index 114c995..051d05b6 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle ViewModel Short Name: lifecycle-viewmodel-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-android-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-android-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium index f97888f..1335f84 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle ViewModel Compose Short Name: lifecycle-viewmodel-compose-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-compose-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-compose-android-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-compose-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-compose-android-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium index e51a37e..083bc40d 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle ViewModel Kotlin Extensions Short Name: lifecycle-viewmodel-ktx -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-ktx/2.11.0-SNAPSHOT/lifecycle-viewmodel-ktx-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-ktx/2.11.0-SNAPSHOT/lifecycle-viewmodel-ktx-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium index 713dde08..27c076df 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle ViewModel with SavedState Short Name: lifecycle-viewmodel-savedstate-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-savedstate-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-savedstate-android-2.11.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-savedstate-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-savedstate-android-2.11.0-20251118.131355-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium b/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium index 134316b..c621f92 100644 --- a/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium +++ b/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium
@@ -1,6 +1,6 @@ Name: loader Short Name: loader -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/loader/loader/1.2.0-SNAPSHOT/loader-1.2.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/loader/loader/1.2.0-SNAPSHOT/loader-1.2.0-20251118.131355-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_media_media/README.chromium b/third_party/androidx/committed/libs/androidx_media_media/README.chromium index 28b437b..45620a0 100644 --- a/third_party/androidx/committed/libs/androidx_media_media/README.chromium +++ b/third_party/androidx/committed/libs/androidx_media_media/README.chromium
@@ -1,6 +1,6 @@ Name: Media Short Name: media -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/media/media/1.8.0-SNAPSHOT/media-1.8.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/media/media/1.8.0-SNAPSHOT/media-1.8.0-20251118.131355-1.aar Version: 1.8.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium b/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium index 2955f89..f832f32 100644 --- a/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium +++ b/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium
@@ -1,6 +1,6 @@ Name: MediaRouter Short Name: mediarouter -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/mediarouter/mediarouter/1.9.0-SNAPSHOT/mediarouter-1.9.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/mediarouter/mediarouter/1.9.0-SNAPSHOT/mediarouter-1.9.0-20251118.131355-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium index 9894d5e4..255a7f3b0 100644 --- a/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium
@@ -1,6 +1,6 @@ Name: Navigation Common Short Name: navigation-common-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/navigation/navigation-common-android/2.10.0-SNAPSHOT/navigation-common-android-2.10.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/navigation/navigation-common-android/2.10.0-SNAPSHOT/navigation-common-android-2.10.0-20251118.131355-1.aar Version: 2.10.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium index fdfdc31..3c0f6403 100644 --- a/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Navigation Short Name: navigation-compose-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/navigation/navigation-compose-android/2.10.0-SNAPSHOT/navigation-compose-android-2.10.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/navigation/navigation-compose-android/2.10.0-SNAPSHOT/navigation-compose-android-2.10.0-20251118.131355-1.aar Version: 2.10.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium index e9f3254..221c506 100644 --- a/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium
@@ -1,6 +1,6 @@ Name: Navigation Runtime Short Name: navigation-runtime-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/navigation/navigation-runtime-android/2.10.0-SNAPSHOT/navigation-runtime-android-2.10.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/navigation/navigation-runtime-android/2.10.0-SNAPSHOT/navigation-runtime-android-2.10.0-20251118.131355-1.aar Version: 2.10.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium index 97eb6f4..878f4c88 100644 --- a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium
@@ -1,6 +1,6 @@ Name: Navigation Event Short Name: navigationevent-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/navigationevent/navigationevent-android/1.1.0-SNAPSHOT/navigationevent-android-1.1.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/navigationevent/navigationevent-android/1.1.0-SNAPSHOT/navigationevent-android-1.1.0-20251118.131355-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium index 7eb4164..1e52f16 100644 --- a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: NavigationEvent Compose Short Name: navigationevent-compose-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/navigationevent/navigationevent-compose-android/1.1.0-SNAPSHOT/navigationevent-compose-android-1.1.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/navigationevent/navigationevent-compose-android/1.1.0-SNAPSHOT/navigationevent-compose-android-1.1.0-20251118.131355-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium index 727739b..cd89e90 100644 --- a/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium
@@ -1,6 +1,6 @@ Name: Paging-Common Short Name: paging-common-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/paging/paging-common-android/3.4.0-SNAPSHOT/paging-common-android-3.4.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/paging/paging-common-android/3.4.0-SNAPSHOT/paging-common-android-3.4.0-20251118.131355-1.aar Version: 3.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium index 10ce4a6..d07c8d88 100644 --- a/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Paging-Common Kotlin Extensions Short Name: paging-common-ktx -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/paging/paging-common-ktx/3.4.0-SNAPSHOT/paging-common-ktx-3.4.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/paging/paging-common-ktx/3.4.0-SNAPSHOT/paging-common-ktx-3.4.0-20251118.131355-1.jar Version: 3.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium index b50e0a8..30090d7 100644 --- a/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: Paging-Compose Short Name: paging-compose-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/paging/paging-compose-android/3.4.0-SNAPSHOT/paging-compose-android-3.4.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/paging/paging-compose-android/3.4.0-SNAPSHOT/paging-compose-android-3.4.0-20251118.131355-1.aar Version: 3.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium index ed9bdac..273eb840b 100644 --- a/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium +++ b/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium
@@ -1,6 +1,6 @@ Name: Paging-Runtime Short Name: paging-runtime -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/paging/paging-runtime/3.4.0-SNAPSHOT/paging-runtime-3.4.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/paging/paging-runtime/3.4.0-SNAPSHOT/paging-runtime-3.4.0-20251118.131355-1.aar Version: 3.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium b/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium index e9c2e16d..579e2ff 100644 --- a/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium +++ b/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium
@@ -1,6 +1,6 @@ Name: Palette Short Name: palette -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/palette/palette/1.1.0-SNAPSHOT/palette-1.1.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/palette/palette/1.1.0-SNAPSHOT/palette-1.1.0-20251118.131355-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium b/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium index 62adc53..7e08aac 100644 --- a/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium +++ b/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.pdf:pdf-document-service Short Name: pdf-document-service -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/pdf/pdf-document-service/1.0.0-SNAPSHOT/pdf-document-service-1.0.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/pdf/pdf-document-service/1.0.0-SNAPSHOT/pdf-document-service-1.0.0-20251118.131355-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium index 8ecc3077..439593b 100644 --- a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium +++ b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.pdf:pdf-viewer Short Name: pdf-viewer -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/pdf/pdf-viewer/1.0.0-SNAPSHOT/pdf-viewer-1.0.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/pdf/pdf-viewer/1.0.0-SNAPSHOT/pdf-viewer-1.0.0-20251118.131355-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium index 00ec3d41..ed204240 100644 --- a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium +++ b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.pdf:pdf-viewer-fragment Short Name: pdf-viewer-fragment -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/pdf/pdf-viewer-fragment/1.0.0-SNAPSHOT/pdf-viewer-fragment-1.0.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/pdf/pdf-viewer-fragment/1.0.0-SNAPSHOT/pdf-viewer-fragment-1.0.0-20251118.131355-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium b/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium index aa2915e2..a2291a5b 100644 --- a/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium +++ b/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium
@@ -1,6 +1,6 @@ Name: Preference Short Name: preference -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/preference/preference/1.3.0-SNAPSHOT/preference-1.3.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/preference/preference/1.3.0-SNAPSHOT/preference-1.3.0-20251118.131355-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium b/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium index a728e1ff..3a3156c 100644 --- a/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium +++ b/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium
@@ -1,6 +1,6 @@ Name: Profile Installer Short Name: profileinstaller -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/profileinstaller/profileinstaller/1.5.0-SNAPSHOT/profileinstaller-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/profileinstaller/profileinstaller/1.5.0-SNAPSHOT/profileinstaller-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium b/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium index 869dc3c..87186ac 100644 --- a/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium +++ b/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium
@@ -1,6 +1,6 @@ Name: RecyclerView Short Name: recyclerview -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/recyclerview/recyclerview/1.5.0-SNAPSHOT/recyclerview-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/recyclerview/recyclerview/1.5.0-SNAPSHOT/recyclerview-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium b/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium index 0eb2694..03c8554 100644 --- a/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium +++ b/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium
@@ -1,6 +1,6 @@ Name: Resource Inspection - Annotations Short Name: resourceinspection-annotation -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/resourceinspection/resourceinspection-annotation/1.1.0-SNAPSHOT/resourceinspection-annotation-1.1.0-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/resourceinspection/resourceinspection-annotation/1.1.0-SNAPSHOT/resourceinspection-annotation-1.1.0-20251118.131355-1.jar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium index 441939c..79a4fbb9 100644 --- a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium
@@ -1,6 +1,6 @@ Name: Saved State Short Name: savedstate-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/savedstate/savedstate-android/1.5.0-SNAPSHOT/savedstate-android-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/savedstate/savedstate-android/1.5.0-SNAPSHOT/savedstate-android-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium index b2c1b3f2..ce58df04 100644 --- a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: Saved State Compose Short Name: savedstate-compose-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/savedstate/savedstate-compose-android/1.5.0-SNAPSHOT/savedstate-compose-android-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/savedstate/savedstate-compose-android/1.5.0-SNAPSHOT/savedstate-compose-android-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium index 985484a7..aad8c362 100644 --- a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: SavedState Kotlin Extensions Short Name: savedstate-ktx -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/savedstate/savedstate-ktx/1.5.0-SNAPSHOT/savedstate-ktx-1.5.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/savedstate/savedstate-ktx/1.5.0-SNAPSHOT/savedstate-ktx-1.5.0-20251118.131355-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium b/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium index 8860dd4..a7f5304 100644 --- a/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium +++ b/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium
@@ -1,6 +1,6 @@ Name: Sliding Pane Layout Short Name: slidingpanelayout -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/slidingpanelayout/slidingpanelayout/1.3.0-SNAPSHOT/slidingpanelayout-1.3.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/slidingpanelayout/slidingpanelayout/1.3.0-SNAPSHOT/slidingpanelayout-1.3.0-20251118.131355-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium b/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium index c73ebb1..c3f6f71 100644 --- a/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium +++ b/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium
@@ -1,6 +1,6 @@ Name: Swipe Refresh Layout Short Name: swiperefreshlayout -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/swiperefreshlayout/swiperefreshlayout/1.2.0-SNAPSHOT/swiperefreshlayout-1.2.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/swiperefreshlayout/swiperefreshlayout/1.2.0-SNAPSHOT/swiperefreshlayout-1.2.0-20251118.131355-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium b/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium index d56567b..8d6a8f67 100644 --- a/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium +++ b/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium
@@ -1,6 +1,6 @@ Name: UIAutomator Short Name: uiautomator -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/test/uiautomator/uiautomator/2.4.0-SNAPSHOT/uiautomator-2.4.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/test/uiautomator/uiautomator/2.4.0-SNAPSHOT/uiautomator-2.4.0-20251118.131355-1.aar Version: 2.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium index 683fad6..9a2178b 100644 --- a/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium
@@ -1,6 +1,6 @@ Name: Tracing Short Name: tracing-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/tracing/tracing-android/2.0.0-SNAPSHOT/tracing-android-2.0.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/tracing/tracing-android/2.0.0-SNAPSHOT/tracing-android-2.0.0-20251118.131355-1.aar Version: 2.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium index f3723c3..5cb5c5f 100644 --- a/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Tracing Kotlin Extensions Short Name: tracing-ktx -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/tracing/tracing-ktx/2.0.0-SNAPSHOT/tracing-ktx-2.0.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/tracing/tracing-ktx/2.0.0-SNAPSHOT/tracing-ktx-2.0.0-20251118.131355-1.aar Version: 2.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto/README.chromium index 1b98d88eb..b7e94919 100644 --- a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto/README.chromium +++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto/README.chromium
@@ -1,6 +1,6 @@ Name: Tracing Perfetto Short Name: tracing-perfetto -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/tracing/tracing-perfetto/1.0.1-SNAPSHOT/tracing-perfetto-1.0.1-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/tracing/tracing-perfetto/1.0.1-SNAPSHOT/tracing-perfetto-1.0.1-20251118.131355-1.aar Version: 1.0.1-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_binary/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_binary/README.chromium index f739649..face7569 100644 --- a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_binary/README.chromium +++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_binary/README.chromium
@@ -1,6 +1,6 @@ Name: Tracing Perfetto Binary Short Name: tracing-perfetto-binary -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/tracing/tracing-perfetto-binary/1.0.1-SNAPSHOT/tracing-perfetto-binary-1.0.1-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/tracing/tracing-perfetto-binary/1.0.1-SNAPSHOT/tracing-perfetto-binary-1.0.1-20251118.131355-1.aar Version: 1.0.1-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_handshake/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_handshake/README.chromium index 9d5779f4..759b6393 100644 --- a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_handshake/README.chromium +++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_handshake/README.chromium
@@ -1,6 +1,6 @@ Name: Tracing Perfetto Handshake Short Name: tracing-perfetto-handshake -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/tracing/tracing-perfetto-handshake/1.0.1-SNAPSHOT/tracing-perfetto-handshake-1.0.1-20251117.114225-1.jar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/tracing/tracing-perfetto-handshake/1.0.1-SNAPSHOT/tracing-perfetto-handshake-1.0.1-20251118.131355-1.jar Version: 1.0.1-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium b/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium index abce3c45..1948989d 100644 --- a/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium +++ b/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium
@@ -1,6 +1,6 @@ Name: Transition Short Name: transition -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/transition/transition/1.7.0-SNAPSHOT/transition-1.7.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/transition/transition/1.7.0-SNAPSHOT/transition-1.7.0-20251118.131355-1.aar Version: 1.7.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium b/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium index edda66f4..367403bd 100644 --- a/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium +++ b/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium
@@ -1,6 +1,6 @@ Name: ViewPager2 Short Name: viewpager2 -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/viewpager2/viewpager2/1.2.0-SNAPSHOT/viewpager2-1.2.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/viewpager2/viewpager2/1.2.0-SNAPSHOT/viewpager2-1.2.0-20251118.131355-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium b/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium index 86aa4b4..50c820af 100644 --- a/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium +++ b/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium
@@ -1,6 +1,6 @@ Name: Webkit Short Name: webkit -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/webkit/webkit/1.16.0-SNAPSHOT/webkit-1.16.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/webkit/webkit/1.16.0-SNAPSHOT/webkit-1.16.0-20251118.131355-1.aar Version: 1.16.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium b/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium index 630ead7..899755de 100644 --- a/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium +++ b/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium
@@ -1,6 +1,6 @@ Name: WindowManager Sidecar Short Name: sidecar -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/window/sidecar/sidecar/1.0.0-SNAPSHOT/sidecar-1.0.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/window/sidecar/sidecar/1.0.0-SNAPSHOT/sidecar-1.0.0-20251118.131355-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_window_window/README.chromium b/third_party/androidx/committed/libs/androidx_window_window/README.chromium index aa8aeed..29e143b 100644 --- a/third_party/androidx/committed/libs/androidx_window_window/README.chromium +++ b/third_party/androidx/committed/libs/androidx_window_window/README.chromium
@@ -1,6 +1,6 @@ Name: WindowManager Short Name: window -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/window/window/1.6.0-SNAPSHOT/window-1.6.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/window/window/1.6.0-SNAPSHOT/window-1.6.0-20251118.131355-1.aar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium index 764f1f7..39701085 100644 --- a/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium
@@ -1,6 +1,6 @@ Name: WindowManager Core Short Name: window-core-android -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/window/window-core-android/1.6.0-SNAPSHOT/window-core-android-1.6.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/window/window-core-android/1.6.0-SNAPSHOT/window-core-android-1.6.0-20251118.131355-1.aar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium b/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium index cd20c69..abb2a0a 100644 --- a/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium +++ b/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium
@@ -1,6 +1,6 @@ Name: WorkManager Multiprocess Short Name: work-multiprocess -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/work/work-multiprocess/2.12.0-SNAPSHOT/work-multiprocess-2.12.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/work/work-multiprocess/2.12.0-SNAPSHOT/work-multiprocess-2.12.0-20251118.131355-1.aar Version: 2.12.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium b/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium index d173b51..9d8921a 100644 --- a/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium +++ b/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium
@@ -1,6 +1,6 @@ Name: WorkManager Runtime Short Name: work-runtime -URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/work/work-runtime/2.12.0-SNAPSHOT/work-runtime-2.12.0-20251117.114225-1.aar +URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/work/work-runtime/2.12.0-SNAPSHOT/work-runtime-2.12.0-20251118.131355-1.aar Version: 2.12.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/angle b/third_party/angle index 3a0ebc7..cf53f37 160000 --- a/third_party/angle +++ b/third_party/angle
@@ -1 +1 @@ -Subproject commit 3a0ebc752488461c12fe63cfd2e067321a1f266f +Subproject commit cf53f379f81a8c1b43ccd8e087c6b848007f21e6
diff --git a/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc b/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc index b60bad9ce..bee7446 100644 --- a/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc +++ b/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc
@@ -117,6 +117,9 @@ out->selection_clipboard_buffer_available = data.selection_clipboard_buffer_available(); #endif +#if BUILDFLAG(IS_LINUX) + out->middle_click_paste_allowed = data.middle_click_paste_allowed(); +#endif out->plugin_fullscreen_allowed = data.plugin_fullscreen_allowed(); out->caret_browsing_enabled = data.caret_browsing_enabled();
diff --git a/third_party/blink/perf_tests/webgpu/resources/webgpu-perf-utils.js b/third_party/blink/perf_tests/webgpu/resources/webgpu-perf-utils.js index e4c4856..f87182e 100644 --- a/third_party/blink/perf_tests/webgpu/resources/webgpu-perf-utils.js +++ b/third_party/blink/perf_tests/webgpu/resources/webgpu-perf-utils.js
@@ -1,6 +1,7 @@ /** Get the adapter for the test. If there is none, skip the test and leave the promise unresolved. */ function getAdapter() { return new Promise(async resolve => { + // Always run the test with compat restrictions... const adapter = await navigator.gpu?.requestAdapter({ featureLevel: 'compatibility' }); if (!adapter) { skipTest('WebGPU not supported'); @@ -8,11 +9,26 @@ } const hasCore = adapter.features.has('core-features-and-limits'); PerfTestRunner.log('adapter vendor: ' + adapter.info.vendor); + PerfTestRunner.log('adapter isFallbackAdapter: ' + adapter.info.isFallbackAdapter); PerfTestRunner.log('adapter hasCore: ' + hasCore); - if (new URLSearchParams(location.search).has('compatonly') && hasCore) { + + if (adapter.info.isFallbackAdapter) { + skipTest('Refusing to run perf test on a fallback (software) adapter'); + return; + } + + // ... But require the actual adapter to be Core-capable or Core-incapable, + // depending on the config. + const compatonly = new URLSearchParams(location.search).has('compatonly'); + if (!compatonly && !hasCore) { + skipTest('Refusing to run Core perf test on a Core-incapable adapter'); + return; + } + if (compatonly && hasCore) { skipTest('Refusing to run Compat perf test on a Core-capable adapter'); return; } + resolve(adapter); }); }
diff --git a/third_party/blink/public/common/renderer_preferences/renderer_preferences.h b/third_party/blink/public/common/renderer_preferences/renderer_preferences.h index 05a46ed6..d608b6fa 100644 --- a/third_party/blink/public/common/renderer_preferences/renderer_preferences.h +++ b/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
@@ -88,6 +88,9 @@ #if BUILDFLAG(IS_OZONE) bool selection_clipboard_buffer_available{false}; #endif +#if BUILDFLAG(IS_LINUX) + bool middle_click_paste_allowed{true}; +#endif bool plugin_fullscreen_allowed{true}; bool caret_browsing_enabled{false}; bool uses_platform_autofill{false};
diff --git a/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h b/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h index 6be39a1..455f0fa 100644 --- a/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h +++ b/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h
@@ -199,6 +199,13 @@ } #endif +#if BUILDFLAG(IS_LINUX) + static const bool& middle_click_paste_allowed( + const ::blink::RendererPreferences& data) { + return data.middle_click_paste_allowed; + } +#endif + #if BUILDFLAG(IS_WIN) static const std::u16string& caption_font_family_name( const ::blink::RendererPreferences& data) {
diff --git a/third_party/blink/public/mojom/renderer_preferences.mojom b/third_party/blink/public/mojom/renderer_preferences.mojom index 02ee6bf0..835a1707 100644 --- a/third_party/blink/public/mojom/renderer_preferences.mojom +++ b/third_party/blink/public/mojom/renderer_preferences.mojom
@@ -197,6 +197,10 @@ [EnableIf=is_selection_clipboard_buffer_possible] bool selection_clipboard_buffer_available = false; + // Whether to allow pasting text on middle click mouse events. + [EnableIf=is_linux] + bool middle_click_paste_allowed = true; + // Set to true if the renderer should assume that the embedder delegates all // Autofill activity and requests to the platform instead of providing its // own implementation.
diff --git a/third_party/blink/public/web/web_settings.h b/third_party/blink/public/web/web_settings.h index 0076152..02402b1 100644 --- a/third_party/blink/public/web/web_settings.h +++ b/third_party/blink/public/web/web_settings.h
@@ -280,6 +280,7 @@ virtual void SetNavigationControls(NavigationControls) = 0; virtual void SetAriaModalPrunesAXTree(bool) = 0; virtual void SetSelectionClipboardBufferAvailable(bool) = 0; + virtual void SetMiddleClickPasteAllowed(bool) = 0; virtual void SetAccessibilityIncludeSvgGElement(bool) = 0; virtual void SetWebXRImmersiveArAllowed(bool) = 0; virtual void SetModalContextMenu(bool) = 0;
diff --git a/third_party/blink/renderer/DEPS b/third_party/blink/renderer/DEPS index 122cdc8..d58d993b 100644 --- a/third_party/blink/renderer/DEPS +++ b/third_party/blink/renderer/DEPS
@@ -35,6 +35,7 @@ "+base/i18n/time_formatting.h", "+base/location.h", "+base/logging.h", + "+base/logging/logging_settings.h", "+base/memory/ptr_util.h", "+base/memory/ref_counted.h", "+base/memory/weak_ptr.h",
diff --git a/third_party/blink/renderer/core/context_features/context_feature_settings.cc b/third_party/blink/renderer/core/context_features/context_feature_settings.cc index 9b97148..ee47d34 100644 --- a/third_party/blink/renderer/core/context_features/context_feature_settings.cc +++ b/third_party/blink/renderer/core/context_features/context_feature_settings.cc
@@ -6,13 +6,9 @@ #include "base/memory/protected_memory.h" #include "third_party/blink/public/platform/platform.h" -#include "third_party/blink/renderer/core/execution_context/execution_context.h" namespace blink { -ContextFeatureSettings::ContextFeatureSettings(ExecutionContext& context) - : execution_context_(context) {} - DEFINE_PROTECTED_DATA base::ProtectedMemory<bool> ContextFeatureSettings::mojo_js_allowed_; @@ -22,7 +18,7 @@ CreationMode creation_mode) { ContextFeatureSettings* settings = context->GetContextFeatureSettings(); if (!settings && creation_mode == CreationMode::kCreateIfNotExists) { - settings = MakeGarbageCollected<ContextFeatureSettings>(*context); + settings = MakeGarbageCollected<ContextFeatureSettings>(); context->SetContextFeatureSettings(settings); } return settings; @@ -50,10 +46,6 @@ CHECK(*mojo_js_allowed_); } -void ContextFeatureSettings::Trace(Visitor* visitor) const { - visitor->Trace(execution_context_); -} - bool ContextFeatureSettings::isMojoJSEnabled() const { if (enable_mojo_js_) { // If enable_mojo_js_ is true and mojo_js_allowed_ isn't also true, then it @@ -65,4 +57,6 @@ return enable_mojo_js_; } +void ContextFeatureSettings::Trace(Visitor* visitor) const {} + } // namespace blink
diff --git a/third_party/blink/renderer/core/context_features/context_feature_settings.h b/third_party/blink/renderer/core/context_features/context_feature_settings.h index 903fbd8..447969a 100644 --- a/third_party/blink/renderer/core/context_features/context_feature_settings.h +++ b/third_party/blink/renderer/core/context_features/context_feature_settings.h
@@ -23,7 +23,7 @@ public: enum class CreationMode { kCreateIfNotExists, kDontCreateIfNotExists }; - explicit ContextFeatureSettings(ExecutionContext&); + ContextFeatureSettings() = default; // Returns the ContextFeatureSettings for an ExecutionContext. If one does not // already exist for the given context, one is created. @@ -68,7 +68,6 @@ void Trace(Visitor*) const override; private: - Member<ExecutionContext> execution_context_; bool enable_mojo_js_ = false; bool enable_mojo_js_file_system_access_helper_ = false; bool enable_private_aggregation_in_shared_storage_ = false;
diff --git a/third_party/blink/renderer/core/css/css_length_resolver.cc b/third_party/blink/renderer/core/css/css_length_resolver.cc index 9c6079a..f932224f 100644 --- a/third_party/blink/renderer/core/css/css_length_resolver.cc +++ b/third_party/blink/renderer/core/css/css_length_resolver.cc
@@ -146,7 +146,7 @@ using Holder = DisallowNewWrapper<StylePositionAnchor>; DEFINE_STATIC_LOCAL(Persistent<Holder>, empty, (MakeGarbageCollected<Holder>(StylePositionAnchor( - StylePositionAnchor::Type::kAuto)))); + StylePositionAnchor::Initial())))); return empty->Value(); }
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5 index e0312e8..7d51828 100644 --- a/third_party/blink/renderer/core/css/css_properties.json5 +++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -4836,11 +4836,11 @@ style_builder_custom_functions: ["initial", "inherit", "value"], include_paths: ["third_party/blink/renderer/core/style/style_position_anchor.h"], type_name: "StylePositionAnchor", - default_value: "StylePositionAnchor(StylePositionAnchor::Type::kAuto)", + default_value: "StylePositionAnchor::Initial()", field_group: "*", field_template: "external", converter: "ConvertPositionAnchor", - keywords: ["auto"], + keywords: ["auto", "none"], typedom_types: ["Keyword"], valid_for_permission_element: true, valid_for_position_try: true, @@ -5705,7 +5705,6 @@ default_value: "no-autospace", typedom_types: ["Keyword"], invalidate: ["reshape"], - runtime_flag: "CSSTextAutoSpace", }, { name: "text-box",
diff --git a/third_party/blink/renderer/core/css/css_to_length_conversion_data.h b/third_party/blink/renderer/core/css/css_to_length_conversion_data.h index 77b6c39..42db5c3 100644 --- a/third_party/blink/renderer/core/css/css_to_length_conversion_data.h +++ b/third_party/blink/renderer/core/css/css_to_length_conversion_data.h
@@ -285,7 +285,7 @@ private: AnchorEvaluator* evaluator_ = nullptr; - StylePositionAnchor position_anchor_{StylePositionAnchor::Type::kAuto}; + StylePositionAnchor position_anchor_ = StylePositionAnchor::Initial(); std::optional<PositionAreaOffsets> position_area_offsets_; };
diff --git a/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc b/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc index a320b39..e2687dc 100644 --- a/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc +++ b/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc
@@ -104,7 +104,7 @@ CSSToLengthConversionData::ContainerSizes(), CSSToLengthConversionData::AnchorData( options.anchor_evaluator, - StylePositionAnchor(StylePositionAnchor::Type::kAuto), + StylePositionAnchor(StylePositionAnchor::Type::kNone), /* position_area_offsets */ std::nullopt), options.data_zoom.value_or(div->GetComputedStyle()->EffectiveZoom()), options.flags ? *options.flags : ignored_flags_, /*element=*/nullptr); @@ -541,7 +541,7 @@ CSSToLengthConversionData::ViewportSize(GetDocument().GetLayoutView()), CSSToLengthConversionData::ContainerSizes(child), CSSToLengthConversionData::AnchorData( - nullptr, StylePositionAnchor(StylePositionAnchor::Type::kAuto), + nullptr, StylePositionAnchor(StylePositionAnchor::Type::kNone), /* position_area_offsets */ std::nullopt), child->GetComputedStyle()->EffectiveZoom(), flags, /*element=*/nullptr);
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator.cc b/third_party/blink/renderer/core/css/media_query_evaluator.cc index bed27ca..907ffa9 100644 --- a/third_party/blink/renderer/core/css/media_query_evaluator.cc +++ b/third_party/blink/renderer/core/css/media_query_evaluator.cc
@@ -33,9 +33,6 @@ #include "third_party/blink/public/common/css/forced_colors.h" #include "third_party/blink/public/common/css/navigation_controls.h" #include "third_party/blink/public/common/css/scripting.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" #include "third_party/blink/public/mojom/device_posture/device_posture_provider.mojom-blink.h" #include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h" #include "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h" @@ -79,27 +76,6 @@ namespace { -template <class T> -void MaybeRecordMediaFeatureValue( - const MediaValues& media_values, - const IdentifiableSurface::MediaFeatureName feature_name, - T value) { - Document* document = nullptr; - if ((document = media_values.GetDocument()) && - (IdentifiabilityStudySettings::Get()->ShouldSampleType( - IdentifiableSurface::Type::kMediaFeature)) && - !document->WasMediaFeatureEvaluated(static_cast<int>(feature_name))) { - IdentifiableSurface surface = IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken(feature_name)); - - IdentifiabilityMetricBuilder(document->UkmSourceID()) - .Add(surface, IdentifiableToken(value)) - .Record(document->UkmRecorder()); - document->SetMediaFeatureEvaluated(static_cast<int>(feature_name)); - } -} - // Supported types: <number> | <percentage> | <length> | <angle> | <time> | // <resolution> bool TypesMatch(const CSSNumericLiteralValue& a, @@ -348,9 +324,6 @@ const MediaValues& media_values) { float number; int bits_per_component = media_values.ColorBitsPerComponent(); - MaybeRecordMediaFeatureValue(media_values, - IdentifiableSurface::MediaFeatureName::kColor, - bits_per_component); if (value.IsValid()) { return NumberValue(value, number, media_values) && CompareValue(bits_per_component, ClampTo<int>(number), op); @@ -381,9 +354,6 @@ const MediaValues& media_values) { float number; int bits_per_component = media_values.MonochromeBitsPerComponent(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kMonochrome, - bits_per_component); if (value.IsValid()) { return NumberValue(value, number, media_values) && CompareValue(bits_per_component, ClampTo<int>(number), op); @@ -410,9 +380,6 @@ blink::mojom::DisplayMode mode = media_values.DisplayMode(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kDisplayMode, mode); - switch (value.Id()) { case CSSValueID::kFullscreen: return mode == blink::mojom::DisplayMode::kFullscreen; @@ -450,9 +417,6 @@ } ui::mojom::blink::WindowShowState state = media_values.WindowShowState(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kDisplayState, - state); switch (value.Id()) { case CSSValueID::kFullscreen: @@ -484,9 +448,6 @@ } bool resizable = media_values.Resizable(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kResizable, - resizable); return (resizable && value.Id() == CSSValueID::kTrue) || (!resizable && value.Id() == CSSValueID::kFalse); @@ -500,15 +461,9 @@ if (value.IsId()) { if (width > height) { // Square viewport is portrait. - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kOrientation, - CSSValueID::kLandscape); return CSSValueID::kLandscape == value.Id(); } - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kOrientation, - CSSValueID::kPortrait); return CSSValueID::kPortrait == value.Id(); } @@ -519,13 +474,6 @@ static bool AspectRatioMediaFeatureEval(const MediaQueryExpValue& value, MediaQueryOperator op, const MediaValues& media_values) { - double aspect_ratio = - std::max(*media_values.Width(), *media_values.Height()) / - std::min(*media_values.Width(), *media_values.Height()); - MaybeRecordMediaFeatureValue( - media_values, - IdentifiableSurface::MediaFeatureName::kAspectRatioNormalized, - aspect_ratio); if (value.IsValid()) { return CompareAspectRatioValue(value, *media_values.Width(), *media_values.Height(), op, media_values); @@ -562,15 +510,9 @@ switch (value.Id()) { case CSSValueID::kStandard: - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kDynamicRange, - CSSValueID::kStandard); return true; case CSSValueID::kHigh: - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kDynamicRange, - media_values.DeviceSupportsHDR()); return media_values.DeviceSupportsHDR(); default: @@ -609,10 +551,6 @@ actual_resolution = 300 / kCssPixelsPerInch; } - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kResolution, - actual_resolution); - if (!value.IsValid()) { return !!actual_resolution; } @@ -965,9 +903,6 @@ int have3d_rendering; bool three_d_enabled = media_values.ThreeDEnabled(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kTransform3d, - three_d_enabled); return_value_if_no_parameter = three_d_enabled; have3d_rendering = three_d_enabled ? 1 : 0; @@ -984,8 +919,6 @@ MediaQueryOperator, const MediaValues& media_values) { HoverType hover = media_values.PrimaryHoverType(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kHover, hover); if (!value.IsValid()) { return hover != HoverType::kHoverNone; @@ -1004,9 +937,6 @@ MediaQueryOperator, const MediaValues& media_values) { int available_hover_types = media_values.AvailableHoverTypes(); - MaybeRecordMediaFeatureValue(media_values, - IdentifiableSurface::MediaFeatureName::kAnyHover, - available_hover_types); if (!value.IsValid()) { return available_hover_types & ~static_cast<int>(HoverType::kHoverNone); @@ -1040,8 +970,6 @@ MediaQueryOperator, const MediaValues& media_values) { PointerType pointer = media_values.PrimaryPointerType(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kPointer, pointer); if (!value.IsValid()) { return pointer != PointerType::kPointerNone; @@ -1066,11 +994,6 @@ UseCounter::Count(media_values.GetDocument(), WebFeature::kPrefersReducedMotionMediaFeature); - MaybeRecordMediaFeatureValue( - media_values, - IdentifiableSurface::MediaFeatureName::kPrefersReducedMotion, - media_values.PrefersReducedMotion()); - // If the value is not valid, this was passed without an argument. In that // case, it implicitly resolves to 'reduce'. if (!value.IsValid()) { @@ -1091,9 +1014,6 @@ const MediaValues& media_values) { UseCounter::Count(media_values.GetDocument(), WebFeature::kPrefersReducedDataMediaFeature); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kPrefersReducedData, - media_values.PrefersReducedData()); if (!value.IsValid()) { return media_values.PrefersReducedData(); @@ -1113,10 +1033,6 @@ const MediaValues& media_values) { UseCounter::Count(media_values.GetDocument(), WebFeature::kPrefersReducedTransparencyMediaFeature); - MaybeRecordMediaFeatureValue( - media_values, - IdentifiableSurface::MediaFeatureName::kPrefersReducedTransparency, - media_values.PrefersReducedTransparency()); if (!value.IsValid()) { return media_values.PrefersReducedTransparency(); @@ -1134,9 +1050,6 @@ MediaQueryOperator, const MediaValues& media_values) { int available_pointers = media_values.AvailablePointerTypes(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kAnyPointer, - available_pointers); if (!value.IsValid()) { return available_pointers & ~static_cast<int>(PointerType::kPointerNone); @@ -1163,10 +1076,6 @@ static bool ScanMediaFeatureEval(const MediaQueryExpValue& value, MediaQueryOperator, const MediaValues& media_values) { - MaybeRecordMediaFeatureValue(media_values, - IdentifiableSurface::MediaFeatureName::kScan, - media_values.MediaType().Utf8()); - // Scan only applies to 'tv' media. if (!EqualIgnoringASCIICase(media_values.MediaType(), media_type_names::kTv)) { @@ -1205,8 +1114,6 @@ value.Id() == CSSValueID::kRec2020); ColorSpaceGamut gamut = media_values.ColorGamut(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kColorGamut, gamut); switch (gamut) { case ColorSpaceGamut::kUnknown: @@ -1239,9 +1146,6 @@ WebFeature::kPrefersColorSchemeMediaFeature); auto preferred_scheme = media_values.GetPreferredColorScheme(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kPrefersColorScheme, - preferred_scheme); if (!value.IsValid()) { return true; @@ -1264,9 +1168,6 @@ WebFeature::kPrefersContrastMediaFeature); auto preferred_contrast = media_values.GetPreferredContrast(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kPrefersContrast, - preferred_contrast); if (!value.IsValid()) { return preferred_contrast != mojom::blink::PreferredContrast::kNoPreference; @@ -1298,9 +1199,6 @@ WebFeature::kForcedColorsMediaFeature); ForcedColors forced_colors = media_values.GetForcedColors(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kForcedColors, - forced_colors); if (!value.IsValid()) { return forced_colors != ForcedColors::kNone; @@ -1322,9 +1220,6 @@ MediaQueryOperator, const MediaValues& media_values) { NavigationControls navigation_controls = media_values.GetNavigationControls(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kNavigationControls, - navigation_controls); if (!value.IsValid()) { return navigation_controls != NavigationControls::kNone; @@ -1351,11 +1246,6 @@ int horizontal_viewport_segments = media_values.GetHorizontalViewportSegments(); - MaybeRecordMediaFeatureValue( - media_values, - IdentifiableSurface::MediaFeatureName::kHorizontalViewportSegments, - horizontal_viewport_segments); - if (!value.IsValid()) { return true; } @@ -1374,11 +1264,6 @@ UseCounter::Count(media_values.GetDocument(), WebFeature::kFoldableAPIs); int vertical_viewport_segments = media_values.GetVerticalViewportSegments(); - MaybeRecordMediaFeatureValue( - media_values, - IdentifiableSurface::MediaFeatureName::kVerticalViewportSegments, - vertical_viewport_segments); - if (!value.IsValid()) { return true; } @@ -1454,9 +1339,6 @@ DCHECK(value.IsId()); DevicePostureType device_posture = media_values.GetDevicePosture(); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kDevicePosture, - device_posture); switch (value.Id()) { case CSSValueID::kContinuous: @@ -1643,9 +1525,6 @@ const MediaValues& media_values) { UseCounter::Count(media_values.GetDocument(), WebFeature::kInvertedColorsMediaFeature); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kInvertedColors, - media_values.InvertedColors()); if (!value.IsValid()) { return media_values.InvertedColors(); @@ -1663,9 +1542,6 @@ const MediaValues& media_values) { UseCounter::Count(media_values.GetDocument(), WebFeature::kScriptingMediaFeature); - MaybeRecordMediaFeatureValue( - media_values, IdentifiableSurface::MediaFeatureName::kScripting, - media_values.GetScripting()); if (!value.IsValid()) { return media_values.GetScripting() == Scripting::kEnabled;
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator_test.cc b/third_party/blink/renderer/core/css/media_query_evaluator_test.cc index d8cdec8..dbe40f0 100644 --- a/third_party/blink/renderer/core/css/media_query_evaluator_test.cc +++ b/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
@@ -8,11 +8,6 @@ #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/common/css/forced_colors.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_sample_test_utils.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" -#include "third_party/blink/public/common/privacy_budget/scoped_identifiability_test_sample_collector.h" #include "third_party/blink/renderer/core/css/css_numeric_literal_value.h" #include "third_party/blink/renderer/core/css/media_list.h" #include "third_party/blink/renderer/core/css/media_query_exp.h" @@ -29,7 +24,6 @@ #include "third_party/blink/renderer/core/html/html_element.h" #include "third_party/blink/renderer/core/media_type_names.h" #include "third_party/blink/renderer/core/testing/dummy_page_holder.h" -#include "third_party/blink/renderer/core/testing/page_test_base.h" #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h" #include "third_party/blink/renderer/platform/testing/task_environment.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" @@ -1436,379 +1430,6 @@ } } -class MediaQueryEvaluatorIdentifiabilityTest : public PageTestBase { - public: - MediaQueryEvaluatorIdentifiabilityTest() - : counts_{.response_for_is_active = true, - .response_for_is_anything_blocked = false, - .response_for_is_allowed = true} { - IdentifiabilityStudySettings::SetGlobalProvider( - std::make_unique<CountingSettingsProvider>(&counts_)); - } - ~MediaQueryEvaluatorIdentifiabilityTest() override { - IdentifiabilityStudySettings::ResetStateForTesting(); - } - - test::ScopedIdentifiabilityTestSampleCollector* collector() { - return &collector_; - } - - protected: - CallCounts counts_; - test::ScopedIdentifiabilityTestSampleCollector collector_; - void UpdateAllLifecyclePhases() { - GetDocument().View()->UpdateAllLifecyclePhasesForTest(); - } -}; - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfacePrefersReducedMotion) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media (prefers-reduced-motion: reduce) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(static_cast<int>( - IdentifiableSurface::MediaFeatureName::kPrefersReducedMotion))); - EXPECT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ( - entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kPrefersReducedMotion))); - EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(false)); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfacePrefersReducedTransparency) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media (prefers-reduced-transparency: reduce) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(static_cast<int>( - IdentifiableSurface::MediaFeatureName::kPrefersReducedTransparency))); - EXPECT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ(entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken(IdentifiableSurface::MediaFeatureName:: - kPrefersReducedTransparency))); - EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(false)); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfaceOrientation) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media (orientation: landscape) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kOrientation))); - ASSERT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ(entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kOrientation))); - EXPECT_EQ(entry.metrics.begin()->value, - IdentifiableToken(CSSValueID::kLandscape)); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfaceCollectOnce) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media (orientation: landscape) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - // Recompute layout twice but expect only one sample. - UpdateAllLifecyclePhases(); - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kOrientation))); - EXPECT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ(entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kOrientation))); - EXPECT_EQ(entry.metrics.begin()->value, - IdentifiableToken(CSSValueID::kLandscape)); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfaceDisplayMode) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media all and (display-mode: browser) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kDisplayMode))); - EXPECT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ(entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kDisplayMode))); - EXPECT_EQ(entry.metrics.begin()->value, - IdentifiableToken(blink::mojom::DisplayMode::kBrowser)); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfaceDisplayState) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media all and (display-state: normal) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kDisplayState))); - EXPECT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ(entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kDisplayState))); - EXPECT_EQ(entry.metrics.begin()->value, - IdentifiableToken(ui::mojom::blink::WindowShowState::kDefault)); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfaceResizable) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media all and (resizable: true) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kResizable))); - EXPECT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ(entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kResizable))); - EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(true)); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfaceForcedColorsHover) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media all and (forced-colors: active) { - div { color: green } - } - </style> - <style> - @media all and (hover: hover) { - div { color: red } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kForcedColors))); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kHover))); - EXPECT_EQ(collector()->entries().size(), 2u); - - auto& entry_forced_colors = collector()->entries().front(); - EXPECT_EQ(entry_forced_colors.metrics.size(), 1u); - EXPECT_EQ(entry_forced_colors.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kForcedColors))); - EXPECT_EQ(entry_forced_colors.metrics.begin()->value, - IdentifiableToken(ForcedColors::kNone)); - - auto& entry_hover = collector()->entries().back(); - EXPECT_EQ(entry_hover.metrics.size(), 1u); - EXPECT_EQ( - entry_hover.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken(IdentifiableSurface::MediaFeatureName::kHover))); - EXPECT_EQ(entry_hover.metrics.begin()->value, - IdentifiableToken(mojom::blink::HoverType::kHoverNone)); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfaceAspectRatioNormalized) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media all and (min-aspect-ratio: 8/5) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(static_cast<int>( - IdentifiableSurface::MediaFeatureName::kAspectRatioNormalized))); - EXPECT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ( - entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kAspectRatioNormalized))); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfaceResolution) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media all and (min-resolution: 72dpi) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kResolution))); - EXPECT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ(entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kResolution))); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfaceInvertedColors) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media (inverted-colors: inverted) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(static_cast<int>( - IdentifiableSurface::MediaFeatureName::kInvertedColors))); - EXPECT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ(entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kInvertedColors))); - EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(false)); -} - -TEST_F(MediaQueryEvaluatorIdentifiabilityTest, - MediaFeatureIdentifiableSurfaceScripting) { - GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML( - <style> - @media (scripting: enabled) { - div { color: green } - } - </style> - <div id="green"></div> - <span></span> - )HTML"); - - UpdateAllLifecyclePhases(); - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kScripting))); - EXPECT_EQ(collector()->entries().size(), 1u); - - auto& entry = collector()->entries().front(); - EXPECT_EQ(entry.metrics.size(), 1u); - EXPECT_EQ(entry.metrics.begin()->surface, - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaFeature, - IdentifiableToken( - IdentifiableSurface::MediaFeatureName::kScripting))); - EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(Scripting::kNone)); -} - TEST(MediaQueryEvaluatorTest, TestQueriesWithUndefinedCustomMedias) { MediaValuesCached::MediaValuesCachedData data; auto* media_values = MakeGarbageCollected<MediaValuesCached>(data);
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.cc b/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.cc index b099c7e..047a9ac 100644 --- a/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.cc +++ b/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.cc
@@ -1617,7 +1617,6 @@ case CSSPropertyID::kRubyPosition: return value_id == CSSValueID::kOver || value_id == CSSValueID::kUnder; case CSSPropertyID::kTextAutospace: - DCHECK(RuntimeEnabledFeatures::CSSTextAutoSpaceEnabled()); return value_id == CSSValueID::kNormal || value_id == CSSValueID::kNoAutospace; case CSSPropertyID::kTextSpacingTrim:
diff --git a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc index db3fe3e..29b55f0 100644 --- a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc +++ b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
@@ -194,6 +194,12 @@ CSSParserTokenStream& stream, const CSSParserContext& context, const CSSParserLocalContext&) const { + if (RuntimeEnabledFeatures::CSSPositionAnchorNoneEnabled()) { + if (CSSValue* value = + css_parsing_utils::ConsumeIdent<CSSValueID::kNone>(stream)) { + return value; + } + } if (CSSValue* value = css_parsing_utils::ConsumeIdent<CSSValueID::kAuto>(stream)) { return value; @@ -209,6 +215,8 @@ const StylePositionAnchor& position_anchor = style.PositionAnchor(); switch (position_anchor.GetType()) { + case Type::kNone: + return CSSIdentifierValue::Create(CSSValueID::kNone); case Type::kAuto: return CSSIdentifierValue::Create(CSSValueID::kAuto); case Type::kName:
diff --git a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc index de6204c..519140c5 100644 --- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc +++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
@@ -2186,6 +2186,9 @@ const CSSValue& value) { DCHECK(value.IsScopedValue()); if (const auto* identifier_value = DynamicTo<CSSIdentifierValue>(value)) { + if (identifier_value->GetValueID() == CSSValueID::kNone) { + return StylePositionAnchor(StylePositionAnchor::Type::kNone); + } DCHECK_EQ(identifier_value->GetValueID(), CSSValueID::kAuto); return StylePositionAnchor(StylePositionAnchor::Type::kAuto); }
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc index 8f6a4e5..d2a4e89f5 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
@@ -4200,6 +4200,7 @@ set_sheet_text(R"HTML( #div::before { content: ""; + position-anchor: auto; position-area: top left; left: anchor(right); } @@ -4211,6 +4212,7 @@ #div::before { content: ""; position: absolute; + position-anchor: auto; position-anchor: --a; position-area: top left; left: anchor(right); @@ -4222,6 +4224,7 @@ set_sheet_text(R"HTML( #div::before { position: absolute; + position-anchor: auto; position-area: top left; left: anchor(right); } @@ -4233,6 +4236,7 @@ #div::before { content: ""; position: absolute; + position-anchor: auto; justify-self: anchor-center; } )HTML"); @@ -4243,6 +4247,7 @@ #div::before { content: ""; position: fixed; + position-anchor: auto; position-area: inline-start; } )HTML"); @@ -4253,6 +4258,7 @@ #div::before { content: ""; position: fixed; + position-anchor: auto; top: anchor(bottom); } )HTML"); @@ -4264,10 +4270,26 @@ #div::before { content: ""; position: absolute; + position-anchor: auto; top: anchor(--a bottom); } )HTML"); EXPECT_TRUE(IsUseCounted(WebFeature::kCSSPseudoElementUsesImplicitAnchor)); + + // If position-anchor is initial, we aren't using the implicit anchor (with + // the CSSPositionAnchorNone feature enabled). + set_sheet_text(R"HTML( + #div::before { + content: ""; + position: absolute; + left: anchor(right); + } + )HTML"); + if (RuntimeEnabledFeatures::CSSPositionAnchorNoneEnabled()) { + EXPECT_FALSE(IsUseCounted(WebFeature::kCSSPseudoElementUsesImplicitAnchor)); + } else { + EXPECT_TRUE(IsUseCounted(WebFeature::kCSSPseudoElementUsesImplicitAnchor)); + } } TEST_F(StyleResolverTest, FindContainerForElement_LayoutSiblings) {
diff --git a/third_party/blink/renderer/core/css/transition_scoped.css b/third_party/blink/renderer/core/css/transition_scoped.css index 7170c0ea..ffdb0e52 100644 --- a/third_party/blink/renderer/core/css/transition_scoped.css +++ b/third_party/blink/renderer/core/css/transition_scoped.css
@@ -10,21 +10,11 @@ @namespace "http://www.w3.org/1999/xhtml"; -:root::view-transition { +::view-transition { position: absolute; inset: 0; } -:not(:root)::view-transition { - position: absolute; - position-anchor: auto; - left: anchor(left); - top: anchor(top); - width: anchor-size(width); - height: anchor-size(height); - overflow: clip; -} - ::view-transition-group(*) { position: absolute; top: 0;
diff --git a/third_party/blink/renderer/core/dom/abort_signal_registry.cc b/third_party/blink/renderer/core/dom/abort_signal_registry.cc index 62d70f4..76320c4 100644 --- a/third_party/blink/renderer/core/dom/abort_signal_registry.cc +++ b/third_party/blink/renderer/core/dom/abort_signal_registry.cc
@@ -22,8 +22,7 @@ } AbortSignalRegistry::AbortSignalRegistry(ExecutionContext& context) - : ExecutionContextLifecycleObserver(&context), - execution_context_(context) {} + : ExecutionContextLifecycleObserver(&context) {} AbortSignalRegistry::~AbortSignalRegistry() = default; @@ -31,7 +30,6 @@ visitor->Trace(event_listener_signals_); visitor->Trace(signals_registered_for_abort_); visitor->Trace(signals_registered_for_priority_); - visitor->Trace(execution_context_); ExecutionContextLifecycleObserver::Trace(visitor); }
diff --git a/third_party/blink/renderer/core/dom/abort_signal_registry.h b/third_party/blink/renderer/core/dom/abort_signal_registry.h index b04146ce..9b43c990 100644 --- a/third_party/blink/renderer/core/dom/abort_signal_registry.h +++ b/third_party/blink/renderer/core/dom/abort_signal_registry.h
@@ -48,8 +48,6 @@ void ContextDestroyed() override; private: - Member<ExecutionContext> execution_context_; - // Map holding abort algorithm handlers for event listeners that have them, // tying the lifetime of the abort algorithm to the `EventListener`. This is // cleared when context is destroyed since we won't run event listeners after
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index c0baba5c..0c67a8ed 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -8568,14 +8568,6 @@ return *data_->email_regexp_; } -void Document::SetMediaFeatureEvaluated(int feature) { - evaluated_media_features_ |= (1 << feature); -} - -bool Document::WasMediaFeatureEvaluated(int feature) { - return (evaluated_media_features_ >> feature) & 1; -} - void Document::AddConsoleMessage(ConsoleMessage* message, bool discard_duplicates) const { // Don't let non-attached Documents spam the console. @@ -10341,8 +10333,6 @@ return nullptr; } -template class CORE_TEMPLATE_EXPORT Supplement<Document>; - } // namespace blink #ifndef NDEBUG
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h index d6fff65b..858dc737 100644 --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h
@@ -419,11 +419,6 @@ void MediaQueryAffectingValueChanged(MediaValueChange change); - // SetMediaFeatureEvaluated and WasMediaFeatureEvaluated are used to prevent - // UKM sampling of CSS media features more than once per document. - void SetMediaFeatureEvaluated(int feature); - bool WasMediaFeatureEvaluated(int feature); - using TreeScope::getElementById; bool IsInitialEmptyDocument() const { return is_initial_empty_document_; } @@ -2847,10 +2842,6 @@ // explicitly set. mutable std::optional<DocumentToken> token_; - // Bitfield used for tracking UKM sampling of media features such that each - // media feature is sampled only once per document. - uint64_t evaluated_media_features_ = 0; - DocumentLifecycle lifecycle_; bool is_initial_empty_document_;
diff --git a/third_party/blink/renderer/core/dom/document_test.cc b/third_party/blink/renderer/core/dom/document_test.cc index 3a112e9..ca081ef6 100644 --- a/third_party/blink/renderer/core/dom/document_test.cc +++ b/third_party/blink/renderer/core/dom/document_test.cc
@@ -333,33 +333,6 @@ EXPECT_EQ(GetDocument().documentElement()->OffsetWidth(), 800); } -// This tests whether we properly set the bits for indicating if a media feature -// has been evaluated. -TEST_F(DocumentTest, MediaFeatureEvaluated) { - GetDocument().SetMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kForcedColors)); - for (int i = 0; i < 64; i++) { - if (i == static_cast<int>( - IdentifiableSurface::MediaFeatureName::kForcedColors)) { - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(i)); - } else { - EXPECT_FALSE(GetDocument().WasMediaFeatureEvaluated(i)); - } - } - GetDocument().SetMediaFeatureEvaluated( - static_cast<int>(IdentifiableSurface::MediaFeatureName::kAnyHover)); - for (int i = 0; i < 64; i++) { - if ((i == static_cast<int>( - IdentifiableSurface::MediaFeatureName::kForcedColors)) || - (i == - static_cast<int>(IdentifiableSurface::MediaFeatureName::kAnyHover))) { - EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(i)); - } else { - EXPECT_FALSE(GetDocument().WasMediaFeatureEvaluated(i)); - } - } -} - // This test checks that Documunt::linkManifest() returns a value conform to the // specification. TEST_F(DocumentTest, LinkManifest) {
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc index 35151df..a2828b6 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc
@@ -4707,10 +4707,8 @@ // originating element's box and cannot be skipped if the originating element // is a size container because the pseudo-element and its box need to be // created before layout. - // The same applies to scoped view-transitions. if (!style.ScrollMarkerGroupNone() || CanGeneratePseudoElement(kPseudoIdScrollButton) || - CanGeneratePseudoElement(kPseudoIdViewTransition) || HasSiblingBoxPseudoElements()) { return false; } @@ -5721,25 +5719,16 @@ } void Element::AttachTransitionPseudoElements(AttachContext& context) { - ViewTransition* transition = ViewTransitionUtils::GetTransition(*this); - if (!transition) { - return; - } - + // For a document transition, the LayoutObject for the ::view-transition + // pseudo-element is wrapped by the anonymous LayoutViewTransitionRoot, + // which represents the snapshot containing block. + // + // The LayoutViewTransitionRoot is a child of the LayoutView, and will be + // injected by LayoutView::AddChild. // See LayoutTreeBuilderTraversal::ParentLayoutObject. AttachContext children_context(context); if (context.parent && context.parent->IsDocumentElement()) { - // For a document transition, the LayoutObject for the ::view-transition - // pseudo-element is wrapped by the anonymous LayoutViewTransitionRoot, - // which represents the snapshot containing block. - // - // The LayoutViewTransitionRoot is a child of the LayoutView, and will be - // injected by LayoutView::AddChild. children_context.parent = GetDocument().GetLayoutView(); - } else if (GetLayoutObject() && transition->Scope() == this) { - // The layout object for the ::view-transition() pseudo is a sibling - // of the scoped elements layout object. - children_context.parent = GetLayoutObject()->Parent(); } auto attach_pseudo = [&](PseudoElement* pseudo_element) { @@ -8421,6 +8410,16 @@ return false; } +bool Element::ShouldHighlightAd() const { + if (const ElementRareDataVector* data = GetElementRareData()) { + if (const DisplayAdElementMonitor* monitor = + data->GetDisplayAdElementMonitor()) { + return monitor->ShouldHighlight(); + } + } + return false; +} + bool Element::HasUndoStack() const { if (const ElementRareDataVector* data = GetElementRareData()) { return data->HasUndoStack(); @@ -9883,8 +9882,13 @@ PseudoElement* pseudo_element = PseudoElement::Create(this, pseudo_id, pseudo_argument); - CHECK(pseudo_element); - + if (RuntimeEnabledFeatures::ScopedViewTransitionsEnabled()) { + if (!pseudo_element) { + // TODO(crbug.com/405117185): Replace with DCHECK(pseudo_element) once we + // properly track per-scope view transition names. + return nullptr; + } + } EnsureElementRareData().SetPseudoElement(pseudo_id, pseudo_element, pseudo_argument); pseudo_element->InsertedInto(*this); @@ -10369,8 +10373,7 @@ for (PseudoId pseudo_id : {kPseudoIdScrollButtonBlockStart, kPseudoIdScrollButtonInlineStart, kPseudoIdScrollButtonInlineEnd, kPseudoIdScrollButtonBlockEnd, - kPseudoIdScrollMarkerGroupAfter, kPseudoIdScrollMarkerGroupBefore, - kPseudoIdViewTransition}) { + kPseudoIdScrollMarkerGroupAfter, kPseudoIdScrollMarkerGroupBefore}) { if (rare_data->GetPseudoElement(pseudo_id)) { return true; } @@ -12088,7 +12091,6 @@ } bool had_transition_pseudo = !!GetPseudoElement(kPseudoIdViewTransition); - PseudoElement* transition_pseudo = UpdatePseudoElement(kPseudoIdViewTransition, style_recalc_change, style_recalc_context, g_null_atom); @@ -12877,15 +12879,6 @@ } return pseudo_element->UltimateOriginatingElement() .ImplicitAnchorElement(); - - case kPseudoIdViewTransition: { - Element* parent = parentElement(); - if (!parent->IsDocumentElement()) { - return parent; - } - break; - } - default: return nullptr; }
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h index 91c5fdfc..6dae55955 100644 --- a/third_party/blink/renderer/core/dom/element.h +++ b/third_party/blink/renderer/core/dom/element.h
@@ -1697,13 +1697,24 @@ // Manages the element's ad-related status. // - // `HTMLFrameOwnerElement` manages its ad status separately. Therefore: - // 1. `SetIsAdRelated()` should not be called on a frame owner. - // 2. `IsAdRelated()` is overridden by `HTMLFrameOwnerElement` to return its - // own frame-derived status. + // NOTE: `HTMLFrameOwnerElement` manages its ad status separately by + // deriving it from its frame. It overrides these virtual methods, and + // `SetIsAdRelated()` should not be called on it directly. + + // Marks this element as being ad-related. void SetIsAdRelated(); + + // Returns true if the element is considered ad-related. virtual bool IsAdRelated() const; + // Returns true if a paint-time ad highlight should be drawn. + // This is the authoritative check for painters, encapsulating: + // 1. The element's ad status (i.e., `IsAdRelated()`). + // 2. The "Highlight ads" DevTools setting. + // 3. Logic to exclude nested ads (e.g., in an ad iframe) to avoid redundant, + // overlapping highlights. + virtual bool ShouldHighlightAd() const; + void NotifyInlineStyleMutation(); // For undo stack cleanup
diff --git a/third_party/blink/renderer/core/dom/element.idl b/third_party/blink/renderer/core/dom/element.idl index d1ef0ce8..f56d3be5 100644 --- a/third_party/blink/renderer/core/dom/element.idl +++ b/third_party/blink/renderer/core/dom/element.idl
@@ -177,7 +177,6 @@ [CEReactions, Reflect=elementtiming] attribute DOMString elementTiming; [RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming] attribute DOMString containerTiming; [RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming-ignore] attribute boolean containerTimingIgnore; - [RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming-nesting] attribute DOMString containerTimingNesting; // Heading Offset [CEReactions, RuntimeEnabled=HeadingOffset] attribute unsigned long headingOffset;
diff --git a/third_party/blink/renderer/core/dom/layout_tree_builder.cc b/third_party/blink/renderer/core/dom/layout_tree_builder.cc index 14246f8..62f036a 100644 --- a/third_party/blink/renderer/core/dom/layout_tree_builder.cc +++ b/third_party/blink/renderer/core/dom/layout_tree_builder.cc
@@ -73,11 +73,6 @@ // LayoutView. Otherwise, this returns nullptr and we're at the end. return node_->GetDocument().GetLayoutView()->GetViewTransitionRoot(); } - - if (node_->IsViewTransitionPseudoElement()) { - return nullptr; - } - return LayoutTreeBuilder::NextLayoutObject(); } @@ -96,16 +91,6 @@ LayoutTreeBuilderTraversal::LayoutParent(*node_->parentElement()); DCHECK_EQ(parent_element->GetLayoutObject(), context_.parent); } - - // Box for a scoped view-transition is a sibling of its originating element's - // layout box. - if (node_->GetPseudoId() == kPseudoIdViewTransition) { - const Element& scope = - To<PseudoElement>(node_)->UltimateOriginatingElement(); - if (!scope.IsDocumentElement()) { - DCHECK_EQ(scope.GetLayoutObject()->Parent(), context_.parent); - } - } #endif // DCHECK_IS_ON() return context_.parent; }
diff --git a/third_party/blink/renderer/core/dom/layout_tree_builder_traversal.cc b/third_party/blink/renderer/core/dom/layout_tree_builder_traversal.cc index 3de9556..1beb22dd 100644 --- a/third_party/blink/renderer/core/dom/layout_tree_builder_traversal.cc +++ b/third_party/blink/renderer/core/dom/layout_tree_builder_traversal.cc
@@ -103,9 +103,8 @@ return node.GetDocument().GetLayoutView(); } // For a scoped transition, the LayoutObject for the ::view-transition - // is a sibling of the layoutObject for the scope element. - LayoutObject* parent = scope->GetLayoutObject()->Parent(); - return parent; + // pseudo-element is a child of the LayoutObject for the scope element. + return scope->GetLayoutObject(); } const Node* search_start_node = &node; // Parent of ::scroll-marker-group and ::scroll-button() should be layout @@ -209,6 +208,16 @@ } if (Node* next = parent_element->GetPseudoElement(kPseudoIdAfter)) return next; + if (Node* next = + parent_element->GetPseudoElement(kPseudoIdViewTransition)) { + // If parent is a non-root view transition scope, place this child + // before the ::view-transition pseudo-element. + // If parent is the document element, its ::view-transition is placed + // under the LayoutViewTransitionRoot instead. + if (!parent_element->IsDocumentElement()) { + return next; + } + } [[fallthrough]]; case kPseudoIdAfter: if (Node* next = parent_element->GetPseudoElement(kPseudoIdPickerIcon)) {
diff --git a/third_party/blink/renderer/core/dom/pseudo_element.cc b/third_party/blink/renderer/core/dom/pseudo_element.cc index 2a5d5df5..f5f0047 100644 --- a/third_party/blink/renderer/core/dom/pseudo_element.cc +++ b/third_party/blink/renderer/core/dom/pseudo_element.cc
@@ -379,8 +379,7 @@ pseudo_id == kPseudoIdScrollButton || pseudo_id == kPseudoIdScrollMarkerGroup || pseudo_id == kPseudoIdScrollMarkerGroupAfter || - pseudo_id == kPseudoIdScrollMarkerGroupBefore || - pseudo_id == kPseudoIdViewTransition; + pseudo_id == kPseudoIdScrollMarkerGroupBefore; } bool PseudoElement::IsLayoutSiblingOfOriginatingElement() const {
diff --git a/third_party/blink/renderer/core/editing/commands/clipboard_commands.cc b/third_party/blink/renderer/core/editing/commands/clipboard_commands.cc index 5e5b67c3..c6e1fcc 100644 --- a/third_party/blink/renderer/core/editing/commands/clipboard_commands.cc +++ b/third_party/blink/renderer/core/editing/commands/clipboard_commands.cc
@@ -74,16 +74,15 @@ ExecutionContextClipboardEventState* supplement = execution_context.GetExecutionContextClipboardEventState(); if (!supplement) { - supplement = MakeGarbageCollected<ExecutionContextClipboardEventState>( - execution_context); + supplement = + MakeGarbageCollected<ExecutionContextClipboardEventState>(); execution_context.SetExecutionContextClipboardEventState(supplement); } return *supplement; } } - ExecutionContextClipboardEventState(ExecutionContext& execution_context) - : execution_context_(execution_context) {} + ExecutionContextClipboardEventState() = default; virtual ~ExecutionContextClipboardEventState() = default; struct State { @@ -101,12 +100,9 @@ const State& GetState() const { return state_; } - void Trace(Visitor* visitor) const override { - visitor->Trace(execution_context_); - } + void Trace(Visitor* visitor) const override {} private: - Member<ExecutionContext> execution_context_; State state_; };
diff --git a/third_party/blink/renderer/core/execution_context/navigator_base.h b/third_party/blink/renderer/core/execution_context/navigator_base.h index aed72d4..cf3eced 100644 --- a/third_party/blink/renderer/core/execution_context/navigator_base.h +++ b/third_party/blink/renderer/core/execution_context/navigator_base.h
@@ -55,8 +55,7 @@ class GlobalFetchImpl; // NavigatorBase is a helper for shared logic between Navigator and -// WorkerNavigator. It is also a Supplementable, and can therefore be used for -// classes that need to Supplement both Navigator and WorkerNavigator. +// WorkerNavigator. class CORE_EXPORT NavigatorBase : public ScriptWrappable, public NavigatorConcurrentHardware, public NavigatorDeviceMemory,
diff --git a/third_party/blink/renderer/core/execution_context/window_agent.h b/third_party/blink/renderer/core/execution_context/window_agent.h index 871d09c..d2718148 100644 --- a/third_party/blink/renderer/core/execution_context/window_agent.h +++ b/third_party/blink/renderer/core/execution_context/window_agent.h
@@ -51,8 +51,6 @@ AgentGroupScheduler& GetAgentGroupScheduler(); private: - // Note clients may attach per-agent data via Supplementable. - // MutationObservers are attached this way. // TODO(keishi): Move per-agent data here with the correct granularity. // E.g. CustomElementReactionStack should move here. Member<AgentGroupScheduler> agent_group_scheduler_;
diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.cc b/third_party/blink/renderer/core/exported/web_settings_impl.cc index 6a620132..96882b47 100644 --- a/third_party/blink/renderer/core/exported/web_settings_impl.cc +++ b/third_party/blink/renderer/core/exported/web_settings_impl.cc
@@ -796,6 +796,10 @@ settings_->SetSelectionClipboardBufferAvailable(available); } +void WebSettingsImpl::SetMiddleClickPasteAllowed(bool allowed) { + settings_->SetMiddleClickPasteAllowed(allowed); +} + void WebSettingsImpl::SetAccessibilityIncludeSvgGElement(bool include) { settings_->SetAccessibilityIncludeSvgGElement(include); }
diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.h b/third_party/blink/renderer/core/exported/web_settings_impl.h index 50bf554f..1e2841f 100644 --- a/third_party/blink/renderer/core/exported/web_settings_impl.h +++ b/third_party/blink/renderer/core/exported/web_settings_impl.h
@@ -232,6 +232,7 @@ void SetAriaModalPrunesAXTree(bool) override; void SetSelectionClipboardBufferAvailable(bool) override; + void SetMiddleClickPasteAllowed(bool) override; void SetAccessibilityIncludeSvgGElement(bool) override; void SetWebXRImmersiveArAllowed(bool webxr_immersive_ar_allowed) override; void SetModalContextMenu(bool) override;
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc index fa8cdb9a..451d0a2 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -3608,6 +3608,11 @@ renderer_preferences_.selection_clipboard_buffer_available); #endif // BUILDFLAG(IS_OZONE) +#if BUILDFLAG(IS_LINUX) + GetSettings()->SetMiddleClickPasteAllowed( + renderer_preferences_.middle_click_paste_allowed); +#endif // BUILDFLAG(IS_LINUX) + SetExplicitlyAllowedPorts( renderer_preferences_.explicitly_allowed_network_ports);
diff --git a/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.cc b/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.cc index 58998351f..a4452ae 100644 --- a/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.cc +++ b/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.cc
@@ -49,7 +49,6 @@ FileBackedBlobFactoryDispatcher::FileBackedBlobFactoryDispatcher( ExecutionContext& context) : ExecutionContextClient(&context), - execution_context_(context), frame_remote_(&context), worker_remote_(&context) {} @@ -85,7 +84,6 @@ } void FileBackedBlobFactoryDispatcher::Trace(Visitor* visitor) const { - visitor->Trace(execution_context_); ExecutionContextClient::Trace(visitor); visitor->Trace(frame_remote_); visitor->Trace(worker_remote_);
diff --git a/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.h b/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.h index 127ded1..5f16325 100644 --- a/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.h +++ b/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.h
@@ -42,8 +42,6 @@ mojom::blink::FileBackedBlobFactory* GetFileBackedBlobFactory(); - Member<ExecutionContext> execution_context_; - HeapMojoAssociatedRemote<mojom::blink::FileBackedBlobFactory> frame_remote_; HeapMojoRemote<mojom::blink::FileBackedBlobFactory> worker_remote_;
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc index 3805db6..c22ff12 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -402,8 +402,6 @@ } // namespace -template class CORE_TEMPLATE_EXPORT Supplement<LocalFrame>; - // static LocalFrame* LocalFrame::FromFrameToken(const LocalFrameToken& frame_token) { LocalFramesByTokenMap& local_frames_map = GetLocalFramesMap(); @@ -2780,8 +2778,12 @@ } void LocalFrame::UpdateAdHighlight() { - if (IsMainFrame() && !IsInFencedFrameTree()) + // Ad highlighting is now primarily handled by `BoxFragmentPainter` on the + // owner element. We retain this legacy path solely for fenced frame trees, as + // a <fencedframe> owner element does not know its ad status. + if (!IsInFencedFrameTree()) { return; + } // TODO(bokan): Fenced frames may need some work to propagate the ad // highlighting setting to the inner tree.
diff --git a/third_party/blink/renderer/core/frame/mhtml_archive_test.cc b/third_party/blink/renderer/core/frame/mhtml_archive_test.cc index 0d4a686..a818b1d 100644 --- a/third_party/blink/renderer/core/frame/mhtml_archive_test.cc +++ b/third_party/blink/renderer/core/frame/mhtml_archive_test.cc
@@ -195,10 +195,6 @@ ASSERT_TRUE(archive); EXPECT_EQ(archive->LoadResult(), expected_result); - - // Check that the correct count, and only the correct count, increased. - histogram_tester.ExpectUniqueSample( - "PageSerialization.MhtmlLoading.LoadResult", expected_result, 1); } private:
diff --git a/third_party/blink/renderer/core/frame/settings.json5 b/third_party/blink/renderer/core/frame/settings.json5 index 4f04a3e..4cb118e 100644 --- a/third_party/blink/renderer/core/frame/settings.json5 +++ b/third_party/blink/renderer/core/frame/settings.json5
@@ -1206,6 +1206,10 @@ initial: false, }, { + name: "middleClickPasteAllowed", + initial: true + }, + { name: "accessibilityIncludeSvgGElement", initial: false, },
diff --git a/third_party/blink/renderer/core/frame/web_frame_test.cc b/third_party/blink/renderer/core/frame/web_frame_test.cc index ff9551a7..5c0d13c 100644 --- a/third_party/blink/renderer/core/frame/web_frame_test.cc +++ b/third_party/blink/renderer/core/frame/web_frame_test.cc
@@ -9669,48 +9669,6 @@ EXPECT_EQ(" \n\nhello\n\nb \n\na\n\nc", content); } -// Asserts that the `Settings::SetHighlightAds` is properly applied to a -// `LocalFrame` even if `Settings::SetHighlightAds` is fired when the -// `LocalFrame` is still provisional. See crbug/1312107. While the bug is first -// observed on fenced frames, the underlying issue lies in the timing of the -// `Settings::SetHighlightAds` call with respect to the navigation progress of -// the frame. -TEST_F(WebFrameSwapTest, AdHighlightEarlyApply) { - WebRemoteFrame* remote_frame = frame_test_helpers::CreateRemote(); - SwapAndVerifyFirstChildConsistency("local->remote", MainFrame(), - remote_frame); - - // Create the provisional frame and set its ad evidence. - WebLocalFrameImpl* local_frame = - web_view_helper_.CreateProvisional(*remote_frame); - // Value of `parent_is_ad` does not matter. - blink::FrameAdEvidence ad_evidence(/*parent_is_ad=*/false); - ad_evidence.set_created_by_ad_script( - mojom::FrameCreationStackEvidence::kCreatedByAdScript); - ad_evidence.set_is_complete(); - local_frame->SetAdEvidence(ad_evidence); - - // Toggle the settings for provisional local frame. - local_frame->View()->GetSettings()->SetHighlightAds(true); - - // Assert that the local frame does not have any overlay color since it is not - // in the frame tree yet. - ASSERT_EQ(local_frame->GetFrame()->GetFrameOverlayColor(), std::nullopt); - - WebDocument doc_before_navigation = local_frame->GetDocument(); - - auto params = std::make_unique<WebNavigationParams>(); - params->url = url_test_helpers::ToKURL("about:blank"); - // `CommitNavigation` will swap in the local frame to replace the remote - // frame. - local_frame->CommitNavigation(std::move(params), nullptr); - - ASSERT_FALSE(local_frame->IsProvisional()); - ASSERT_NE(doc_before_navigation, local_frame->GetDocument()); - ASSERT_EQ(local_frame->GetFrame()->GetFrameOverlayColor(), - SkColorSetARGB(128, 255, 0, 0)); -} - // TODO(crbug.com/1314493): This test is flaky. TEST_F(WebFrameSwapTest, DISABLED_DoNotPropagateDisplayNonePropertyOnSwap) { WebFrameSwapTestClient* main_frame_client =
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc index 4ae808c..6b1c447c 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc +++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
@@ -9,9 +9,6 @@ #include "base/metrics/histogram_macros.h" #include "base/trace_event/typed_macros.h" #include "build/build_config.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metrics.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" @@ -147,7 +144,6 @@ ToBlobFunctionType function_type, base::TimeTicks start_time, ExecutionContext* context, - const IdentifiableToken& input_digest, ScriptPromiseResolver<Blob>* resolver) : CanvasAsyncBlobCreator(image, options, @@ -155,7 +151,6 @@ nullptr, start_time, context, - input_digest, resolver) {} CanvasAsyncBlobCreator::CanvasAsyncBlobCreator( @@ -165,7 +160,6 @@ V8BlobCallback* callback, base::TimeTicks start_time, ExecutionContext* context, - const IdentifiableToken& input_digest, ScriptPromiseResolver<Blob>* resolver) : fail_encoder_initialization_for_test_(false), enforce_idle_encoding_for_test_(false), @@ -173,7 +167,6 @@ function_type_(function_type), start_time_(start_time), static_bitmap_image_loaded_(false), - input_digest_(input_digest), callback_(callback), script_promise_resolver_(resolver) { CHECK(context); @@ -469,42 +462,6 @@ image_->width(), image_->height()); TraceCanvasContent(&encoded_image); - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kCanvasReadback)) { - // Creating this ImageDataBuffer has some overhead, namely getting the - // SkImage and computing the pixmap. We need the StaticBitmapImage to be - // deleted on the same thread on which it was created, so we use the same - // TaskType here in order to get the same TaskRunner. - - // TODO(crbug.com/1143737) WrapPersistent(this) stores more data than is - // needed by the function. It would be good to find a way to wrap only the - // objects needed (image_, ukm_source_id_, input_digest_, context_) - context_->GetTaskRunner(TaskType::kCanvasBlobSerialization) - ->PostTask( - FROM_HERE, - BindOnce(&CanvasAsyncBlobCreator::RecordIdentifiabilityMetric, - WrapPersistent(this))); - } else { - // RecordIdentifiabilityMetric needs a reference to image_, and will run - // dispose itself. So here we only call dispose if not recording the metric. - Dispose(); - } -} - -void CanvasAsyncBlobCreator::RecordIdentifiabilityMetric() { - std::unique_ptr<ImageDataBuffer> data_buffer = - ImageDataBuffer::Create(image_); - - if (data_buffer) { - blink::IdentifiabilityMetricBuilder(context_->UkmSourceID()) - .Add(blink::IdentifiableSurface::FromTypeAndToken( - blink::IdentifiableSurface::Type::kCanvasReadback, - input_digest_), - blink::IdentifiabilityDigestOfBytes(data_buffer->PixelData())) - .Record(context_->UkmRecorder()); - } - - // Avoid unwanted retention, see dispose(). Dispose(); }
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h index 2fbd8de..64efbcbbb 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h +++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h
@@ -11,7 +11,6 @@ #include "base/task/single_thread_task_runner.h" #include "base/time/time.h" #include "services/metrics/public/cpp/ukm_source_id.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/bindings/core/v8/v8_blob_callback.h" #include "third_party/blink/renderer/bindings/core/v8/v8_image_encode_options.h" @@ -54,7 +53,6 @@ ToBlobFunctionType function_type, base::TimeTicks start_time, ExecutionContext*, - const IdentifiableToken& input_digest, ScriptPromiseResolver<Blob>*); CanvasAsyncBlobCreator(scoped_refptr<StaticBitmapImage>, const ImageEncodeOptions*, @@ -62,7 +60,6 @@ V8BlobCallback*, base::TimeTicks start_time, ExecutionContext*, - const IdentifiableToken& input_digest, ScriptPromiseResolver<Blob>* = nullptr); virtual ~CanvasAsyncBlobCreator(); @@ -115,7 +112,6 @@ base::TimeTicks start_time_; base::TimeTicks schedule_idle_task_start_time_; bool static_bitmap_image_loaded_; - IdentifiableToken input_digest_; // Used when CanvasAsyncBlobCreator runs on main thread only scoped_refptr<base::SingleThreadTaskRunner> parent_frame_task_runner_; @@ -147,7 +143,6 @@ void IdleTaskStartTimeoutEvent(double quality); void IdleTaskCompleteTimeoutEvent(); - void RecordIdentifiabilityMetric(); void TraceCanvasContent(Vector<unsigned char>* encoded_image); };
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc index fe59677..013311e 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc +++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc
@@ -38,7 +38,6 @@ nullptr, base::TimeTicks(), document->GetExecutionContext(), - 0, nullptr) { if (fail_encoder_initialization) fail_encoder_initialization_for_test_ = true;
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h index 991c58a..8e7e283 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h +++ b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h
@@ -32,7 +32,6 @@ #include "base/notreached.h" #include "cc/paint/paint_flags.h" #include "components/viz/common/resources/shared_image_format_utils.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h" @@ -327,21 +326,8 @@ void Trace(Visitor*) const override; virtual void Stop() = 0; - virtual IdentifiableToken IdentifiableTextToken() const { - // Token representing no bytes. - return IdentifiableToken(base::span<const uint8_t>()); - } - - virtual bool IdentifiabilityEncounteredSkippedOps() const { return false; } - - virtual bool IdentifiabilityEncounteredSensitiveOps() const { return false; } - static CanvasPerformanceMonitor& GetCanvasPerformanceMonitor(); - virtual bool IdentifiabilityEncounteredPartiallyDigestedImage() const { - return false; - } - bool did_print_in_current_task() const { return did_print_in_current_task_; } protected:
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc index a1cfa85..7461905 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc +++ b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc
@@ -13,7 +13,6 @@ #include "gpu/command_buffer/common/shared_image_usage.h" #include "gpu/config/gpu_feature_info.h" #include "third_party/blink/public/common/features.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/bindings/core/v8/v8_image_encode_options.h" @@ -237,32 +236,6 @@ return base::ok(); } -IdentifiableToken CanvasRenderingContextHost::IdentifiabilityInputDigest( - const CanvasRenderingContext* const context) const { - const uint64_t context_digest = - context ? context->IdentifiableTextToken().ToUkmMetricValue() : 0; - const uint64_t context_type = static_cast<uint64_t>( - context ? context->GetRenderingAPI() - : CanvasRenderingContext::CanvasRenderingAPI::kUnknown); - const bool encountered_skipped_ops = - context && context->IdentifiabilityEncounteredSkippedOps(); - const bool encountered_sensitive_ops = - context && context->IdentifiabilityEncounteredSensitiveOps(); - const bool encountered_partially_digested_image = - context && context->IdentifiabilityEncounteredPartiallyDigestedImage(); - // Bits [0-3] are the context type, bits [4-6] are skipped ops, sensitive - // ops, and partial image ops bits, respectively. The remaining bits are - // for the canvas digest. - uint64_t final_digest = (context_digest << 7) | context_type; - if (encountered_skipped_ops) - final_digest |= IdentifiableSurface::CanvasTaintBit::kSkipped; - if (encountered_sensitive_ops) - final_digest |= IdentifiableSurface::CanvasTaintBit::kSensitive; - if (encountered_partially_digested_image) - final_digest |= IdentifiableSurface::CanvasTaintBit::kPartiallyDigested; - return final_digest; -} - void CanvasRenderingContextHost::PageVisibilityChanged() { bool page_visible = IsPageVisible(); if (RenderingContext()) {
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.h b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.h index 1c0df11a..4e88738 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.h +++ b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.h
@@ -7,7 +7,6 @@ #include "base/byte_count.h" #include "services/metrics/public/cpp/ukm_recorder.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/events/event_dispatcher.h" @@ -161,12 +160,6 @@ bool ContextHasOpenLayers(const CanvasRenderingContext*) const; - // Computes the digest that corresponds to the "input" of this canvas, - // including the context type, and if applicable, canvas digest, and taint - // bits. - IdentifiableToken IdentifiabilityInputDigest( - const CanvasRenderingContext* const context) const; - Member<PlainTextPainter> plain_text_painter_; Member<UniqueFontSelector> unique_font_selector_; gfx::Size size_;
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc index 646cf3cf..d7cf1c3 100644 --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -50,10 +50,6 @@ #include "services/metrics/public/cpp/ukm_recorder.h" #include "services/metrics/public/cpp/ukm_source_id.h" #include "third_party/blink/public/common/features.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metrics.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h" #include "third_party/blink/public/mojom/gpu/gpu.mojom-blink.h" #include "third_party/blink/public/platform/platform.h" @@ -123,7 +119,6 @@ #include "third_party/blink/renderer/platform/heap/thread_state.h" #include "third_party/blink/renderer/platform/image-encoders/image_encoder_utils.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" -#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "ui/base/resource/resource_scale_factor.h" @@ -553,26 +548,6 @@ std::move(rendering_context_factory); } -void HTMLCanvasElement::RecordIdentifiabilityMetric( - IdentifiableSurface surface, - IdentifiableToken value) const { - blink::IdentifiabilityMetricBuilder(GetDocument().UkmSourceID()) - .Add(surface, value) - .Record(GetDocument().UkmRecorder()); -} - -void HTMLCanvasElement::IdentifiabilityReportWithDigest( - IdentifiableToken canvas_contents_token) const { - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kCanvasReadback)) { - RecordIdentifiabilityMetric( - blink::IdentifiableSurface::FromTypeAndToken( - blink::IdentifiableSurface::Type::kCanvasReadback, - IdentifiabilityInputDigest(context_)), - canvas_contents_token.ToUkmMetricValue()); - } -} - CanvasRenderingContext* HTMLCanvasElement::GetCanvasRenderingContext( ExecutionContext* execution_context, const String& type, @@ -581,17 +556,6 @@ auto* result = GetCanvasRenderingContextInternal(execution_context, type, attributes); - Document& doc = GetDocument(); - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - IdentifiableSurface::Type::kCanvasRenderingContext)) { - IdentifiabilityMetricBuilder(doc.UkmSourceID()) - .Add(IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kCanvasRenderingContext, - CanvasRenderingContext::RenderingAPIFromId(type)), - !!result) - .Record(doc.UkmRecorder()); - } - if (ContentsCcLayer() != old_contents_cc_layer) SetNeedsCompositingUpdate(); @@ -1291,7 +1255,6 @@ // Currently we only support three encoding types. NOTREACHED(); } - IdentifiabilityReportWithDigest(IdentifiabilityBenignStringToken(data_url)); TRACE_EVENT_INSTANT( TRACE_DISABLED_BY_DEFAULT("identifiability.high_entropy_api"), "CanvasReadback", "data_url", data_url.Utf8()); @@ -1374,11 +1337,7 @@ async_creator = MakeGarbageCollected<CanvasAsyncBlobCreator>( image_bitmap, options, CanvasAsyncBlobCreator::kHTMLCanvasToBlobCallback, callback, start_time, - GetExecutionContext(), - IdentifiabilityStudySettings::Get()->ShouldSampleType( - IdentifiableSurface::Type::kCanvasReadback) - ? IdentifiabilityInputDigest(context_) - : 0); + GetExecutionContext()); } if (async_creator) {
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.h b/third_party/blink/renderer/core/html/canvas/html_canvas_element.h index 7b68c08d..ef49dc5 100644 --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.h +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
@@ -32,8 +32,6 @@ #include "base/gtest_prod_util.h" #include "cc/layers/texture_layer_client.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/bindings/core/v8/script_value.h" #include "third_party/blink/renderer/bindings/core/v8/v8_blob_callback.h" #include "third_party/blink/renderer/core/core_export.h" @@ -348,16 +346,6 @@ void ColorSchemeMayHaveChanged(); - void RecordIdentifiabilityMetric(IdentifiableSurface surface, - IdentifiableToken value) const; - - // If the user is enrolled in the identifiability study, report the canvas - // type, and if applicable, canvas digest, taint bits, and - // |canvas_contents_token|, which represents the current bitmap displayed by - // this canvas. - void IdentifiabilityReportWithDigest( - IdentifiableToken canvas_contents_token) const; - void PaintInternal(GraphicsContext&, const PhysicalRect&); using ContextFactoryVector =
diff --git a/third_party/blink/renderer/core/html/display_ad_element_monitor.cc b/third_party/blink/renderer/core/html/display_ad_element_monitor.cc index 2c092e57..de38a0d 100644 --- a/third_party/blink/renderer/core/html/display_ad_element_monitor.cc +++ b/third_party/blink/renderer/core/html/display_ad_element_monitor.cc
@@ -6,10 +6,12 @@ #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame_client.h" +#include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/layout/hit_test_location.h" #include "third_party/blink/renderer/core/layout/hit_test_result.h" #include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/core/layout/map_coordinates_flags.h" +#include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/core/paint/timing/paint_timing.h" namespace blink { @@ -91,6 +93,18 @@ LocalFrame* frame = element_->GetDocument().GetFrame(); DCHECK(frame); + // We use this lifecycle update as an opportunity to poll the "Highlight ads" + // setting (toggled by DevTools). If it has changed, we trigger a repaint. + // This polling approach is less precise than relying on direct events, but + // it's more robust against potential race conditions or missed state updates. + bool should_highlight = frame->GetPage()->GetSettings().GetHighlightAds(); + if (should_highlight != should_highlight_) { + should_highlight_ = should_highlight; + if (auto* layout_object = element_->GetLayoutObject()) { + layout_object->SetShouldDoFullPaintInvalidation(); + } + } + const LocalFrame& local_root_main_frame = frame->LocalFrameRoot(); if (PaintTiming::From(*(local_root_main_frame.GetDocument()))
diff --git a/third_party/blink/renderer/core/html/display_ad_element_monitor.h b/third_party/blink/renderer/core/html/display_ad_element_monitor.h index baca579..e48af9f 100644 --- a/third_party/blink/renderer/core/html/display_ad_element_monitor.h +++ b/third_party/blink/renderer/core/html/display_ad_element_monitor.h
@@ -43,6 +43,8 @@ OverlayVisibility CheckOverlayVisibility(const LocalFrame& main_frame, const gfx::Rect& rect_in_viewport); + bool ShouldHighlight() const { return should_highlight_; } + void Trace(Visitor*) const override; private: @@ -50,6 +52,11 @@ bool started_ = false; + // Caches the last known value of the DevTools "Highlight ads" setting. This + // value remains `false` if the element is not eligible for monitoring (e.g., + // a nested ad). + bool should_highlight_ = false; + base::TimeTicks last_overlay_check_time_; // The last rectangle reported to the `PageTimingMetricsSender`.
diff --git a/third_party/blink/renderer/core/html/html_attribute_names.json5 b/third_party/blink/renderer/core/html/html_attribute_names.json5 index a874e927..1ddd664f 100644 --- a/third_party/blink/renderer/core/html/html_attribute_names.json5 +++ b/third_party/blink/renderer/core/html/html_attribute_names.json5
@@ -65,7 +65,6 @@ "compact", "containertiming", "containertiming-ignore", - "containertiming-nesting", "content", "contenteditable", "contentmethod",
diff --git a/third_party/blink/renderer/core/html/html_element.cc b/third_party/blink/renderer/core/html/html_element.cc index 0f165b0..93c86594 100644 --- a/third_party/blink/renderer/core/html/html_element.cc +++ b/third_party/blink/renderer/core/html/html_element.cc
@@ -342,14 +342,6 @@ EqualIgnoringASCIICase(value, "rtl"); } -bool HTMLElement::IsValidContainerTimingNestingAttribute( - const AtomicString& value) { - return EqualIgnoringASCIICase(value, "auto") || - EqualIgnoringASCIICase(value, "ignore") || - EqualIgnoringASCIICase(value, "transparent") || - EqualIgnoringASCIICase(value, "shadowed"); -} - void HTMLElement::CollectStyleForPresentationAttribute( const QualifiedName& name, const AtomicString& value, @@ -468,8 +460,6 @@ &HTMLElement::OnContainerTimingAttrChanged}, {html_names::kContainertimingIgnoreAttr, kNoWebFeature, kNoEvent, &HTMLElement::OnContainerTimingIgnoreAttrChanged}, - {html_names::kContainertimingNestingAttr, kNoWebFeature, kNoEvent, - &HTMLElement::OnContainerTimingNestingAttrChanged}, {html_names::kOnabortAttr, kNoWebFeature, event_type_names::kAbort, nullptr}, @@ -3617,28 +3607,6 @@ } } -void HTMLElement::OnContainerTimingNestingAttrChanged( - const AttributeModificationParams& params) { - if (!RuntimeEnabledFeatures::ContainerTimingEnabled()) { - return; - } - - if (!FastHasAttribute(html_names::kContainertimingAttr)) { - return; - } - - bool is_old_valid = IsValidContainerTimingNestingAttribute(params.old_value); - bool is_new_valid = IsValidContainerTimingNestingAttribute(params.new_value); - if (!is_old_valid && !is_new_valid) { - return; - } - - if (auto* window = GetDocument().domWindow()) { - ContainerTiming::From(*window).MaybeUpdateContainerRootNestingPolicy( - this, params.new_value); - } -} - ElementInternals* HTMLElement::attachInternals( ExceptionState& exception_state) { // 1. If this's is value is not null, then throw a "NotSupportedError"
diff --git a/third_party/blink/renderer/core/html/html_element.h b/third_party/blink/renderer/core/html/html_element.h index 6467b06..3bea889c 100644 --- a/third_party/blink/renderer/core/html/html_element.h +++ b/third_party/blink/renderer/core/html/html_element.h
@@ -174,8 +174,6 @@ HTMLFormElement* FindFormAncestor() const; - static bool IsValidContainerTimingNestingAttribute(const AtomicString& value); - bool HasDirectionAuto() const; static bool IsValidDirAttribute(const AtomicString& value); @@ -472,8 +470,6 @@ void OnPopoverChanged(const AttributeModificationParams&); void OnContainerTimingAttrChanged(const AttributeModificationParams&); void OnContainerTimingIgnoreAttrChanged(const AttributeModificationParams&); - void OnContainerTimingNestingAttrChanged( - const AttributeModificationParams& params); void OnRoleAttrChanged(const AttributeModificationParams&); int AdjustedOffsetForZoom(LayoutUnit);
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.cc b/third_party/blink/renderer/core/html/html_frame_owner_element.cc index 28319e98..6d5585a 100644 --- a/third_party/blink/renderer/core/html/html_frame_owner_element.cc +++ b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
@@ -851,6 +851,11 @@ return content_frame_->IsAdFrame(); } +bool HTMLFrameOwnerElement::ShouldHighlightAd() const { + return display_ad_element_monitor_ && + display_ad_element_monitor_->ShouldHighlight(); +} + mojom::blink::ColorScheme HTMLFrameOwnerElement::GetColorScheme() const { if (const auto* style = GetComputedStyle()) return style->UsedColorScheme();
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.h b/third_party/blink/renderer/core/html/html_frame_owner_element.h index 6565d8de..3f249381 100644 --- a/third_party/blink/renderer/core/html/html_frame_owner_element.h +++ b/third_party/blink/renderer/core/html/html_frame_owner_element.h
@@ -160,6 +160,7 @@ // Element overrides: bool IsAdRelated() const override; + bool ShouldHighlightAd() const override; // If the iframe is lazy-loaded, initiate its load, and return true if such // a load was initiated.
diff --git a/third_party/blink/renderer/core/html/html_permission_element.cc b/third_party/blink/renderer/core/html/html_permission_element.cc index e682b4eb..ef561836 100644 --- a/third_party/blink/renderer/core/html/html_permission_element.cc +++ b/third_party/blink/renderer/core/html/html_permission_element.cc
@@ -637,11 +637,6 @@ void HTMLPermissionElement::UpdateIcon( PermissionName permnission, HTMLPermissionIconElement::VisualState visual_state) { - if (!RuntimeEnabledFeatures::PermissionElementIconEnabled( - GetDocument().GetExecutionContext())) { - return; - } - permission_internal_icon_->SetIcon(permnission, is_precise_location_, visual_state); } @@ -860,12 +855,9 @@ permission_container_->SetShadowPseudoId( shadow_element_names::kPseudoInternalPermissionContainer); root.AppendChild(permission_container_); - if (RuntimeEnabledFeatures::PermissionElementIconEnabled( - GetDocument().GetExecutionContext())) { - permission_internal_icon_ = - MakeGarbageCollected<HTMLPermissionIconElement>(GetDocument()); - permission_container_->AppendChild(permission_internal_icon_); - } + permission_internal_icon_ = + MakeGarbageCollected<HTMLPermissionIconElement>(GetDocument()); + permission_container_->AppendChild(permission_internal_icon_); permission_text_span_ = MakeGarbageCollected<HTMLSpanElement>(GetDocument()); permission_text_span_->SetShadowPseudoId( shadow_element_names::kPseudoInternalPermissionTextSpan);
diff --git a/third_party/blink/renderer/core/html/media/html_video_element.h b/third_party/blink/renderer/core/html/media/html_video_element.h index bb8e2fe0..0076365 100644 --- a/third_party/blink/renderer/core/html/media/html_video_element.h +++ b/third_party/blink/renderer/core/html/media/html_video_element.h
@@ -53,8 +53,6 @@ DEFINE_WRAPPERTYPEINFO(); public: - enum class Supplements { kVideoFrameCallbackRequester = 0 }; - static const int kNoAlreadyUploadedFrame = -1; explicit HTMLVideoElement(Document&);
diff --git a/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc b/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc index 3dec890e..6e3ebdf 100644 --- a/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc
@@ -1978,6 +1978,9 @@ box->StyleRef().PositionAnchor(); using Type = StylePositionAnchor::Type; switch (position_anchor.GetType()) { + case Type::kNone: + target_object = nullptr; + break; case Type::kAuto: target_object = box->AcceptableImplicitAnchor(); break;
diff --git a/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc b/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc index 9db208f..b855187 100644 --- a/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc +++ b/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc
@@ -249,6 +249,8 @@ DCHECK(anchor_specifier.IsDefault()); using Type = StylePositionAnchor::Type; switch (position_anchor.GetType()) { + case Type::kNone: + return nullptr; case Type::kAuto: if (!implicit_anchor_) { return nullptr;
diff --git a/third_party/blink/renderer/core/layout/anchor_position_scroll_data.cc b/third_party/blink/renderer/core/layout/anchor_position_scroll_data.cc index 09428fe..fd1c8fc 100644 --- a/third_party/blink/renderer/core/layout/anchor_position_scroll_data.cc +++ b/third_party/blink/renderer/core/layout/anchor_position_scroll_data.cc
@@ -24,6 +24,8 @@ const StylePositionAnchor& position_anchor = box.StyleRef().PositionAnchor(); using Type = StylePositionAnchor::Type; switch (position_anchor.GetType()) { + case Type::kNone: + return nullptr; case Type::kAuto: return box.AcceptableImplicitAnchor(); case Type::kName:
diff --git a/third_party/blink/renderer/core/layout/flex/flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/flex/flex_layout_algorithm.cc index fac7f7b..ab14299 100644 --- a/third_party/blink/renderer/core/layout/flex/flex_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/flex/flex_layout_algorithm.cc
@@ -22,6 +22,7 @@ #include "third_party/blink/renderer/core/layout/flex/layout_flexible_box.h" #include "third_party/blink/renderer/core/layout/flex/line_flexer.h" #include "third_party/blink/renderer/core/layout/geometry/box_strut.h" +#include "third_party/blink/renderer/core/layout/geometry/layout_unit_diffuser.h" #include "third_party/blink/renderer/core/layout/geometry/logical_size.h" #include "third_party/blink/renderer/core/layout/layout_box.h" #include "third_party/blink/renderer/core/layout/layout_input_node.h" @@ -1577,22 +1578,23 @@ } } -LayoutUnit ContentDistributionSpace(const StyleContentAlignmentData& data, - LayoutUnit free_space, - unsigned number_of_items) { +LayoutUnitDiffuser ContentDistributionSpace( + const StyleContentAlignmentData& data, + LayoutUnit free_space, + unsigned number_of_items) { if (free_space <= LayoutUnit() || number_of_items <= 1) { - return LayoutUnit(); + return LayoutUnitDiffuser(); } switch (data.Distribution()) { case ContentDistributionType::kDefault: case ContentDistributionType::kStretch: - return LayoutUnit(); + return LayoutUnitDiffuser(); case ContentDistributionType::kSpaceBetween: - return free_space / (number_of_items - 1); + return LayoutUnitDiffuser(free_space, number_of_items - 1); case ContentDistributionType::kSpaceEvenly: - return free_space / (number_of_items + 1); + return LayoutUnitDiffuser(free_space, number_of_items + 1); case ContentDistributionType::kSpaceAround: - return free_space / number_of_items; + return LayoutUnitDiffuser(free_space, number_of_items); } } @@ -1665,7 +1667,7 @@ cross_axis_free_space = LayoutUnit(); } - const LayoutUnit space_between_lines = + LayoutUnitDiffuser space_between_lines = ContentDistributionSpace(align_content, cross_axis_free_space, num_lines); LayoutUnit line_cross_axis_offset = (is_column_ ? BorderScrollbarPadding().inline_start @@ -1699,14 +1701,14 @@ const LayoutUnit main_axis_free_space = should_apply_main_axis_auto_margin ? LayoutUnit() : flex_line.main_axis_free_space; - const LayoutUnit main_axis_auto_margin = + LayoutUnitDiffuser main_axis_auto_margin = should_apply_main_axis_auto_margin - ? flex_line.main_axis_free_space / - flex_line.main_axis_auto_margin_count - : LayoutUnit(); + ? LayoutUnitDiffuser(flex_line.main_axis_free_space, + flex_line.main_axis_auto_margin_count) + : LayoutUnitDiffuser(); const wtf_size_t line_items_size = flex_line.item_indices.size(); - const LayoutUnit space_between_items = ContentDistributionSpace( + LayoutUnitDiffuser space_between_items = ContentDistributionSpace( justify_content, main_axis_free_space, line_items_size); LayoutUnit main_axis_offset = (is_column_ ? BorderScrollbarPadding().block_start @@ -1808,10 +1810,10 @@ // Main-axis margins are distributed to evenly across the whole line. if (is_margin_auto.MainStart()) { - margin.MainStart() = main_axis_auto_margin; + margin.MainStart() = main_axis_auto_margin.Next(); } if (is_margin_auto.MainEnd()) { - margin.MainEnd() = main_axis_auto_margin; + margin.MainEnd() = main_axis_auto_margin.Next(); } } @@ -1864,7 +1866,7 @@ : LogicalOffset(main_axis_offset, cross_axis_offset); main_axis_offset += item.FlexedBorderBoxSize() + margin.MainEnd() + - space_between_items + gap_between_items_; + space_between_items.Next() + gap_between_items_; const BoxStrut logical_margins = physical_margins.ConvertToLogical(writing_direction); @@ -1905,8 +1907,8 @@ item_index_in_line++; } - line_cross_axis_offset += - flex_line.line_cross_size + space_between_lines + gap_between_lines_; + line_cross_axis_offset += flex_line.line_cross_size + + space_between_lines.Next() + gap_between_lines_; } if (auto first_baseline = baseline_accumulator.FirstBaseline())
diff --git a/third_party/blink/renderer/core/layout/inline/text_auto_space.h b/third_party/blink/renderer/core/layout/inline/text_auto_space.h index df9262f..dcf12e0e 100644 --- a/third_party/blink/renderer/core/layout/inline/text_auto_space.h +++ b/third_party/blink/renderer/core/layout/inline/text_auto_space.h
@@ -58,10 +58,6 @@ }; inline TextAutoSpace::TextAutoSpace(const InlineItemsData& data) { - if (!RuntimeEnabledFeatures::CSSTextAutoSpaceEnabled()) { - return; - } - if (data.text_content.Is8Bit() || std::ranges::none_of(data.items, [](const auto& item) {
diff --git a/third_party/blink/renderer/core/layout/inline/text_auto_space_test.cc b/third_party/blink/renderer/core/layout/inline/text_auto_space_test.cc index 5defb1e..87a8113 100644 --- a/third_party/blink/renderer/core/layout/inline/text_auto_space_test.cc +++ b/third_party/blink/renderer/core/layout/inline/text_auto_space_test.cc
@@ -18,7 +18,7 @@ using testing::ElementsAre; using testing::ElementsAreArray; -class TextAutoSpaceTest : public RenderingTest, ScopedCSSTextAutoSpaceForTest { +class TextAutoSpaceTest : public RenderingTest { public: struct AutoSpaceCallback : public TextAutoSpace::Callback { void DidApply(base::span<const OffsetWithSpacing> applied_offsets) final { @@ -30,8 +30,6 @@ Vector<wtf_size_t> offsets; }; - explicit TextAutoSpaceTest() : ScopedCSSTextAutoSpaceForTest(true) {} - LayoutBlockFlow* PreparePageLayoutBlock(String html, String container_css = String()) { html = String(R"HTML(
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.cc b/third_party/blink/renderer/core/layout/layout_box_model_object.cc index cf275cd..198a565 100644 --- a/third_party/blink/renderer/core/layout/layout_box_model_object.cc +++ b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
@@ -84,6 +84,8 @@ const StylePositionAnchor& position_anchor = style.PositionAnchor(); using Type = StylePositionAnchor::Type; switch (position_anchor.GetType()) { + case Type::kNone: + return false; case Type::kAuto: // Now we have `position-anchor: auto`. We need `AnchorPositionScrollData` // only if there's an implicit anchor element to track.
diff --git a/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc b/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc index 3ad29b45..f71cbaa 100644 --- a/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc +++ b/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc
@@ -321,6 +321,8 @@ const StylePositionAnchor& position_anchor = style.PositionAnchor(); using Type = StylePositionAnchor::Type; switch (position_anchor.GetType()) { + case Type::kNone: + return false; case Type::kAuto: return static_cast<bool>(element.ImplicitAnchorElement()); case Type::kName: @@ -410,6 +412,8 @@ const StylePositionAnchor& position_anchor = style.PositionAnchor(); using Type = StylePositionAnchor::Type; switch (position_anchor.GetType()) { + case Type::kNone: + return nullptr; case Type::kAuto: if (const auto* element = DynamicTo<Element>(node.GetDOMNode())) { return element->ImplicitAnchorElement();
diff --git a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc index 409b6b5..c661caa4 100644 --- a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc +++ b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
@@ -10,9 +10,6 @@ #include "base/metrics/histogram_functions.h" #include "base/numerics/safe_conversions.h" #include "base/task/single_thread_task_runner.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metrics.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h" #include "third_party/blink/renderer/core/css/css_font_selector.h" @@ -233,16 +230,6 @@ return image; } -void OffscreenCanvas::RecordIdentifiabilityMetric( - const blink::IdentifiableSurface& surface, - const IdentifiableToken& token) const { - if (!IdentifiabilityStudySettings::Get()->ShouldSampleSurface(surface)) - return; - blink::IdentifiabilityMetricBuilder(GetExecutionContext()->UkmSourceID()) - .Add(surface, token) - .Record(GetExecutionContext()->UkmRecorder()); -} - scoped_refptr<Image> OffscreenCanvas::GetSourceImageForCanvas( SourceImageStatus* status, const gfx::SizeF& size) { @@ -365,10 +352,6 @@ auto* execution_context = ExecutionContext::From(script_state); auto* async_creator = MakeGarbageCollected<CanvasAsyncBlobCreator>( image_bitmap, options, function_type, start_time, execution_context, - IdentifiabilityStudySettings::Get()->ShouldSampleType( - IdentifiableSurface::Type::kCanvasReadback) - ? IdentifiabilityInputDigest(context_) - : 0, resolver); async_creator->ScheduleAsyncBlobCreation(options->quality()); return resolver->Promise();
diff --git a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h index 8ecdc80..01be7ce 100644 --- a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h +++ b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h
@@ -242,9 +242,6 @@ static ContextFactoryVector& RenderingContextFactories(); static CanvasRenderingContextFactory* GetRenderingContextFactory(int); - void RecordIdentifiabilityMetric(const blink::IdentifiableSurface& surface, - const IdentifiableToken& token) const; - Member<CanvasRenderingContext> context_; WeakMember<ExecutionContext> execution_context_;
diff --git a/third_party/blink/renderer/core/paint/box_fragment_painter.cc b/third_party/blink/renderer/core/paint/box_fragment_painter.cc index 45208467..e9ab81a3 100644 --- a/third_party/blink/renderer/core/paint/box_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/box_fragment_painter.cc
@@ -70,6 +70,7 @@ #include "third_party/blink/renderer/platform/graphics/paint/display_item_cache_skipper.h" #include "third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h" #include "third_party/blink/renderer/platform/graphics/paint/scoped_display_item_fragment.h" +#include "third_party/skia/include/utils/SkParsePath.h" namespace blink { @@ -394,6 +395,120 @@ } } +// Paints a highlight overlay for elements identified as ads. This supports the +// "Highlight ads" feature in DevTools. +void PaintAdHighlightIfNeeded(const PaintInfo& paint_info, + const PhysicalOffset& paint_offset, + const PhysicalBoxFragment& fragment, + const DisplayItemClient& display_item_client, + PaintPhase phase) { + // The highlight is an overlay, so it should only be painted during the + // foreground phase, after all element content is drawn. + if (phase != PaintPhase::kForeground) { + return; + } + + const LayoutObject* layout_object = fragment.GetLayoutObject(); + if (!layout_object) { + return; + } + + Element* element = DynamicTo<Element>(layout_object->GetNode()); + if (!element) { + return; + } + + if (!element->ShouldHighlightAd()) { + return; + } + + // Get the bounds of the fragment to paint the overlay over. + gfx::Rect paint_rect( + ToEnclosingRect(PhysicalRect(paint_offset, fragment.Size()))); + + // Check if we can use a cached version of this display item. + if (DrawingRecorder::UseCachedDrawingIfPossible(paint_info.context, + display_item_client, + DisplayItem::kFrameOverlay)) { + return; + } + + // Record these draw operations as a single display item. + DrawingRecorder ad_highlight_recorder(paint_info.context, display_item_client, + DisplayItem::kFrameOverlay, paint_rect); + + GraphicsContext& context = paint_info.context; + + // Paint a red tint overlay. + { + Color red_overlay(255, 0, 0, 128); + context.FillRect(paint_rect, red_overlay, AutoDarkMode::Disabled(), + SkBlendMode::kHardLight); + } + + // Paint an "AD" text overlay. + { + DEFINE_STATIC_LOCAL(SkPath, ad_label_path, ()); + + // Check if we have parsed the path yet. + if (ad_label_path.isEmpty()) { + const char kAdLabelSvgPath[] = + "M36.6 62H21.9l-2.3 6.6H10.1L23.6 32.2h11.2L48.4 " + "68.7H38.9zm-12.3-6.7h10L 29.3 40.8zM62.6 39.3v22.2h3.4q5.7 0 " + "8.8-2.8 3-2.9 3-8.3 0-5.4-3-8.3-3-2.8-8.8-2.8zM53.2 32.2h9.9q8.3 0 " + "12.4 1.2 4.1 1.2 7 4 2.5 2.5 3.8 5.7 1.2 3.2 1.2 7.3 0 4.1-1.2 " + "7.4-1.3 3.2-3.8 5.7-3 2.8-7 4-4.1 1.2-12.3 1.2h-9.9z"; + + bool success = + SkParsePath::FromSVGString(kAdLabelSvgPath, &ad_label_path); + + DCHECK(success) << "Internal Ad Highlight SVG string failed to parse."; + } + + // Calculate the scale and offset to fit the 100x100 SVG path within + // the element's paint_rect, matching CSS + // 'preserveAspectRatio="xMidYMid meet"'. + const float kViewBoxSize = 100.0f; + float target_width = paint_rect.width(); + float target_height = paint_rect.height(); + + // 'meet': Scale down to fit, preserving aspect ratio. + float scale = + std::min(target_width / kViewBoxSize, target_height / kViewBoxSize); + + // Don't render the label if it's too small to be legible. + const float kMinPixelHeight = 10.0f; + float scaled_box_height = kViewBoxSize * scale; + if (scaled_box_height < kMinPixelHeight) { + return; + } + + // 'xMidYMid': Center the scaled SVG path within the target rect. + float scaled_box_width = kViewBoxSize * scale; + float offset_x = paint_rect.x() + (target_width - scaled_box_width) / 2.0f; + float offset_y = + paint_rect.y() + (target_height - scaled_box_height) / 2.0f; + + // Create the transformation matrix: + // 1. Scale the 100x100 path down. + // 2. Translate it to the center of the paint_rect. + AffineTransform transform; + transform.Translate(offset_x, offset_y); + transform.Scale(scale); + + // Set up paint flags for the text. + // Corresponds to CSS: fill="#fff" opacity=".8" + cc::PaintFlags ad_label_flags; + ad_label_flags.setStyle(cc::PaintFlags::kFill_Style); + ad_label_flags.setAntiAlias(true); + ad_label_flags.setColor(SkColorSetARGB(204, 255, 255, 255)); + + // Apply the transform and draw the path. + context.ConcatCTM(transform); + context.DrawPath(ad_label_path, ad_label_flags, AutoDarkMode::Disabled()); + } +} + } // anonymous namespace PhysicalRect BoxFragmentPainter::InkOverflowIncludingFilters() const { @@ -437,6 +552,17 @@ } else { layout_object->Paint(modified_paint_info); } + + PhysicalOffset paint_offset; + if (const FragmentData* fragment_data = fragment.GetFragmentData()) { + paint_offset = fragment_data->PaintOffset(); + } + + // Paint the ad highlight last. For this monolithic path (e.g., <img>, + // <iframe>), the paint_offset is provided by FragmentData and represents the + // fragment's position in the paint layer. + PaintAdHighlightIfNeeded(modified_paint_info, paint_offset, fragment, + *layout_object, paint_info.phase); } void BoxFragmentPainter::Paint(const PaintInfo& paint_info) { @@ -619,6 +745,10 @@ info.phase = original_phase; PaintOverflowControls(info, paint_offset); } + + // Paint the ad highlight last. + PaintAdHighlightIfNeeded(info, paint_offset, box_fragment_, + GetDisplayItemClient(), original_phase); } bool BoxFragmentPainter::PaintOverflowControls(
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc index 1e2cc2b1..db38a3e 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -1797,9 +1797,19 @@ } } - // The layout object for a ::view-transition pseudo is a sibling of the - // originating element's layout object. - return context_.current_effect; + DCHECK(!scope.IsDocumentElement()); + auto* scope_properties = + scope.GetLayoutObject()->FirstFragment().PaintProperties(); + if (!scope_properties) { + return context_.current_effect; + } + + // Make the effect node for the ::view-transition pseudo-element a sibling of + // the ViewTransitionEffect for the scope element. The ViewTransitionEffect is + // guaranteed to exist (see ViewTransition::NeedsViewTransitionEffectNode). + auto* scope_vt_effect = scope_properties->ViewTransitionEffect(); + CHECK(scope_vt_effect && scope_vt_effect->Parent()); + return scope_vt_effect->Parent(); } void FragmentPaintPropertyTreeBuilder::UpdateEffect() {
diff --git a/third_party/blink/renderer/core/paint/timing/container_timing.cc b/third_party/blink/renderer/core/paint/timing/container_timing.cc index 49bad05e..733e7e6 100644 --- a/third_party/blink/renderer/core/paint/timing/container_timing.cc +++ b/third_party/blink/renderer/core/paint/timing/container_timing.cc
@@ -64,24 +64,9 @@ return GetContainerRoot(parent); } -// static -ContainerTiming::Record::NestingPolicy ContainerTiming::Record::ToNestingPolicy( - const AtomicString& str) { - if (EqualIgnoringASCIICase(str, "transparent")) { - return NestingPolicy::kTransparent; - } else if (EqualIgnoringASCIICase(str, "shadowed")) { - return NestingPolicy::kShadowed; - } - // "ignore", "auto" or unset - return NestingPolicy::kIgnore; -} - ContainerTiming::Record::Record(const DOMPaintTimingInfo& paint_timing_info, - const AtomicString& identifier, - const AtomicString& nesting_policy) - : first_paint_timing_info_(paint_timing_info), - identifier_(identifier), - nesting_policy_(ToNestingPolicy(nesting_policy)) {} + const AtomicString& identifier) + : first_paint_timing_info_(paint_timing_info), identifier_(identifier) {} void ContainerTiming::Record::MaybeUpdateLastNewPaintedArea( ContainerTiming* container_timing, @@ -100,25 +85,23 @@ has_pending_changes_ = true; + // A container timing root with the ignore attribute will not report to + // ancestor roots. + if (container_root->FastGetAttribute( + html_names::kContainertimingIgnoreAttr)) { + return; + } + Element* parent_container_root = GetParentContainerRoot(container_root); if (!parent_container_root) { return; } - Element* shadowed_element = container_root; Record* parent_record = container_timing->GetOrCreateRecord( paint_timing_info, parent_container_root); - if (parent_record->nesting_policy_ == NestingPolicy::kIgnore) { - return; - } - - Element* propagated_element = - (parent_record->nesting_policy_ == NestingPolicy::kShadowed) - ? shadowed_element - : element; parent_record->MaybeUpdateLastNewPaintedArea( - container_timing, paint_timing_info, parent_container_root, - propagated_element, enclosing_rect); + container_timing, paint_timing_info, parent_container_root, element, + enclosing_rect); } void ContainerTiming::Record::MaybeEmitPerformanceEntry( @@ -146,9 +129,7 @@ if (it == container_root_records_.end()) { record = MakeGarbageCollected<Record>( paint_timing_info, - container_root->FastGetAttribute(html_names::kContainertimingAttr), - container_root->FastGetAttribute( - html_names::kContainertimingNestingAttr)); + container_root->FastGetAttribute(html_names::kContainertimingAttr)); container_root_records_.insert(container_root, record); } else { record = it->value; @@ -156,24 +137,6 @@ return record; } -void ContainerTiming::MaybeUpdateContainerRootNestingPolicy( - Element* element, - const AtomicString& new_value) { - auto it = container_root_records_.find(element); - if (it != container_root_records_.end()) { - Record* record = it->value; - - Record::NestingPolicy new_nesting_policy = - Record::ToNestingPolicy(new_value); - - if (record->GetNestingPolicy() != new_nesting_policy) { - // If the nesting policy changes, the previous data is useless, drop - // record and start again. - container_root_records_.erase(it); - } - } -} - void ContainerTiming::MaybeUpdateContainerRootIdentifier( Element* element, const AtomicString& new_value) {
diff --git a/third_party/blink/renderer/core/paint/timing/container_timing.h b/third_party/blink/renderer/core/paint/timing/container_timing.h index a1ede3a..0f0c0daa 100644 --- a/third_party/blink/renderer/core/paint/timing/container_timing.h +++ b/third_party/blink/renderer/core/paint/timing/container_timing.h
@@ -35,8 +35,6 @@ } bool CanReportToContainerTiming() const; - void MaybeUpdateContainerRootNestingPolicy(Element* element, - const AtomicString& new_value); void MaybeUpdateContainerRootIdentifier(Element* element, const AtomicString& new_value); @@ -54,15 +52,10 @@ class Record final : public GarbageCollected<Record> { public: Record(const DOMPaintTimingInfo& paint_timing_info, - const AtomicString& identifier, - const AtomicString& nested_policy); + const AtomicString& identifier); Record(const Record&) = delete; Record& operator=(const Record&) = delete; - enum class NestingPolicy { kIgnore, kTransparent, kShadowed }; - static NestingPolicy ToNestingPolicy(const AtomicString& str); - - NestingPolicy GetNestingPolicy() const { return nesting_policy_; } const AtomicString& identifier() const { return identifier_; } void MaybeUpdateLastNewPaintedArea( @@ -79,7 +72,6 @@ private: const DOMPaintTimingInfo first_paint_timing_info_; const AtomicString identifier_; - const NestingPolicy nesting_policy_ = NestingPolicy::kIgnore; DOMPaintTimingInfo last_new_painted_area_paint_timing_info_; WeakMember<Element> last_new_painted_area_element_; cc::Region painted_region_;
diff --git a/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc b/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc index 10be773..ff6dede 100644 --- a/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc +++ b/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc
@@ -38,15 +38,14 @@ static ParsedFeaturePolicies& From(ExecutionContext& context) { ParsedFeaturePolicies* policies = context.GetParsedFeaturePolicies(); if (!policies) { - policies = MakeGarbageCollected<ParsedFeaturePolicies>(context); + policies = MakeGarbageCollected<ParsedFeaturePolicies>(); context.SetParsedFeaturePolicies(policies); } return *policies; } - explicit ParsedFeaturePolicies(ExecutionContext& context) - : execution_context_(context), - policies_(static_cast<size_t>( + ParsedFeaturePolicies() + : policies_(static_cast<size_t>( network::mojom::PermissionsPolicyFeature::kMaxValue) + 1) {} @@ -59,13 +58,9 @@ return false; } - void Trace(Visitor* visitor) const override { - visitor->Trace(execution_context_); - } + void Trace(Visitor* visitor) const override {} private: - Member<ExecutionContext> execution_context_; - // Tracks which permissions policies have already been parsed, so as not to // count them multiple times. Vector<bool> policies_;
diff --git a/third_party/blink/renderer/core/route_matching/route_map.cc b/third_party/blink/renderer/core/route_matching/route_map.cc index 6b1f032e..1700c3c7 100644 --- a/third_party/blink/renderer/core/route_matching/route_map.cc +++ b/third_party/blink/renderer/core/route_matching/route_map.cc
@@ -55,8 +55,6 @@ return it->value; } -// BEGIN Supplement support: - const RouteMap* RouteMap::Get(const Document* document) { if (!document) { return nullptr; @@ -80,8 +78,6 @@ return *route_map; } -// END Supplement support - RouteMap::ParseResult RouteMap::ParseAndApplyRoutes( const String& route_map_text) { RouteMap::ParseResult result = ParseRoutes(route_map_text);
diff --git a/third_party/blink/renderer/core/route_matching/route_map.h b/third_party/blink/renderer/core/route_matching/route_map.h index e712f38..f5643d9 100644 --- a/third_party/blink/renderer/core/route_matching/route_map.h +++ b/third_party/blink/renderer/core/route_matching/route_map.h
@@ -66,8 +66,7 @@ Route* get(const String& route_name); - // Supplement support. Document pointers may be null (in which case null will - // be returned). + // Document pointers may be null (in which case null will be returned). static const RouteMap* Get(const Document*); static RouteMap* Get(Document*); static RouteMap& Ensure(Document&);
diff --git a/third_party/blink/renderer/core/scheduler/dom_scheduler.cc b/third_party/blink/renderer/core/scheduler/dom_scheduler.cc index f367e417..97df197 100644 --- a/third_party/blink/renderer/core/scheduler/dom_scheduler.cc +++ b/third_party/blink/renderer/core/scheduler/dom_scheduler.cc
@@ -73,7 +73,6 @@ DOMScheduler::DOMScheduler(ExecutionContext* context) : ExecutionContextLifecycleObserver(context), - execution_context_(*context), fixed_priority_task_signals_(kWebSchedulingPriorityCount) { if (context->IsContextDestroyed()) { return; @@ -96,7 +95,6 @@ visitor->Trace(signal_to_continuation_queue_map_); ScriptWrappable::Trace(visitor); ExecutionContextLifecycleObserver::Trace(visitor); - visitor->Trace(execution_context_); } ScriptPromise<IDLAny> DOMScheduler::postTask(
diff --git a/third_party/blink/renderer/core/scheduler/dom_scheduler.h b/third_party/blink/renderer/core/scheduler/dom_scheduler.h index 52200e3..ecddcfb 100644 --- a/third_party/blink/renderer/core/scheduler/dom_scheduler.h +++ b/third_party/blink/renderer/core/scheduler/dom_scheduler.h
@@ -166,8 +166,6 @@ // context is used, and the cross-frame case where it's ignored. SchedulerTaskContext* GetSchedulerTaskContextForYield(); - Member<ExecutionContext> execution_context_; - // `fixed_priority_task_queues_` is initialized with one entry per priority, // indexed by priority. This will be empty when the window is detached. FixedPriorityTaskQueueVector fixed_priority_task_queues_;
diff --git a/third_party/blink/renderer/core/scheduler/dom_timer.cc b/third_party/blink/renderer/core/scheduler/dom_timer.cc index 5e2c43c..9e9ca41d7 100644 --- a/third_party/blink/renderer/core/scheduler/dom_timer.cc +++ b/third_party/blink/renderer/core/scheduler/dom_timer.cc
@@ -82,14 +82,13 @@ CHECK(!context.IsWorkletGlobalScope()); DOMTimerCoordinator* coordinator = context.GetDOMTimerCoordinator(); if (!coordinator) { - coordinator = MakeGarbageCollected<DOMTimerCoordinator>(context); + coordinator = MakeGarbageCollected<DOMTimerCoordinator>(); context.SetDOMTimerCoordinator(coordinator); } return *coordinator; } - explicit DOMTimerCoordinator(ExecutionContext& context) - : execution_context_(context) {} + DOMTimerCoordinator() = default; int Install(DOMTimer* timer) { int timeout_id = NextID(); @@ -121,10 +120,7 @@ // deeper timer nesting level, see DOMTimer::DOMTimer. void SetTimerNestingLevel(int level) { timer_nesting_level_ = level; } - void Trace(Visitor* visitor) const final { - visitor->Trace(timers_); - visitor->Trace(execution_context_); - } + void Trace(Visitor* visitor) const final { visitor->Trace(timers_); } private: int NextID() { @@ -141,7 +137,6 @@ } } - Member<ExecutionContext> execution_context_; HeapHashMap<int, Member<DOMTimer>> timers_; int circular_sequential_id_ = 0; int timer_nesting_level_ = 0;
diff --git a/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.cc b/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.cc index 495d18c4..69435bc3 100644 --- a/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.cc +++ b/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.cc
@@ -106,7 +106,6 @@ ScriptedIdleTaskController::ScriptedIdleTaskController( ExecutionContext* context) : ExecutionContextLifecycleStateObserver(context), - execution_context_(*context), scheduler_(ThreadScheduler::Current()) { UpdateStateIfNeeded(); } @@ -118,7 +117,6 @@ void ScriptedIdleTaskController::Trace(Visitor* visitor) const { visitor->Trace(idle_tasks_); ExecutionContextLifecycleStateObserver::Trace(visitor); - visitor->Trace(execution_context_); } int ScriptedIdleTaskController::NextCallbackId() {
diff --git a/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.h b/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.h index 18fd1f6f..2d3675d 100644 --- a/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.h +++ b/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.h
@@ -154,8 +154,6 @@ return !IsHashTraitsEmptyOrDeletedValue<Traits, CallbackId>(id); } - Member<ExecutionContext> execution_context_; - // Not owned. ThreadScheduler* scheduler_;
diff --git a/third_party/blink/renderer/core/style/style_position_anchor.h b/third_party/blink/renderer/core/style/style_position_anchor.h index 0f96bb9..b5c12354 100644 --- a/third_party/blink/renderer/core/style/style_position_anchor.h +++ b/third_party/blink/renderer/core/style/style_position_anchor.h
@@ -19,12 +19,18 @@ DISALLOW_NEW(); public: - enum class Type { kAuto, kName }; + enum class Type { kNone, kAuto, kName }; explicit StylePositionAnchor(Type type) : type_(type) {} explicit StylePositionAnchor(const ScopedCSSName* name) : type_(Type::kName), name_(name) {} + static StylePositionAnchor Initial() { + return RuntimeEnabledFeatures::CSSPositionAnchorNoneEnabled() + ? StylePositionAnchor(StylePositionAnchor::Type::kNone) + : StylePositionAnchor(StylePositionAnchor::Type::kAuto); + } + bool operator==(const StylePositionAnchor& o) const { return type_ == o.type_ && base::ValuesEquivalent(name_, o.name_); } @@ -42,7 +48,7 @@ void Trace(Visitor* visitor) const { visitor->Trace(name_); } private: - Type type_ = Type::kAuto; + Type type_ = Type::kNone; Member<const ScopedCSSName> name_; };
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc b/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc index b011a33..ad58432 100644 --- a/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc +++ b/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc
@@ -35,9 +35,6 @@ namespace { -BASE_FEATURE(kShutdownSoftNavigationContextOnDetach, - base::FEATURE_ENABLED_BY_DEFAULT); - const char kPageLoadInternalSoftNavigationOutcome[] = "PageLoad.Internal.SoftNavigationOutcome"; @@ -264,9 +261,7 @@ const auto viewport_area = CalculateViewportArea(); const auto required_paint_area = CalculateRequiredPaintArea(); for (const auto& context : potential_soft_navigations_) { - if (base::FeatureList::IsEnabled(kShutdownSoftNavigationContextOnDetach)) { - context->Shutdown(); - } + context->Shutdown(); OnSoftNavigationContextWasExhausted(*context.Get(), viewport_area, required_paint_area); }
diff --git a/third_party/blink/renderer/core/view_transition/view_transition.cc b/third_party/blink/renderer/core/view_transition/view_transition.cc index 90f3c7e..c8e6efbf 100644 --- a/third_party/blink/renderer/core/view_transition/view_transition.cc +++ b/third_party/blink/renderer/core/view_transition/view_transition.cc
@@ -828,14 +828,16 @@ bool ViewTransition::NeedsViewTransitionEffectNode( const LayoutObject& object) const { - if (IsTerminalState(state_)) { - return false; - } - - // For a document transition, the scope's effect node is associated with the - // LayoutView rather than the document element. + // The scope always needs an effect node, even if the scope element is not a + // participant in the transition. The reason for this is so that we can place + // the effect node for the ::view-transition pseudo-element as a sibling of + // the scope's effect. For a document transition, the scope's effect node is + // associated with the LayoutView rather than the document element. if (IsA<LayoutView>(object)) { - return has_document_scope_; + return has_document_scope_ && !IsTerminalState(state_); + } + if (!has_document_scope_ && object == scope_->GetLayoutObject()) { + return !IsTerminalState(state_); } // Otherwise check if the layout object has a transition element.
diff --git a/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc b/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc index 0fb3ebf..c1335bf 100644 --- a/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc +++ b/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc
@@ -1772,6 +1772,10 @@ !scope_box->IsLayoutView()) { // TODO(crbug.com/394052227): Should we force compositing on the scope? // If we do, its paint offset will always be zero. + + // Adjust for the scope element's borders and scrollbars. + // TODO(crbug.com/394052227): Is this correct in RTL / all writing modes? + transform.Translate(-scope_box->ClientLeft(), -scope_box->ClientTop()); transform.Translate(-gfx::Vector2dF(scope_fragment.PaintOffset())); }
diff --git a/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.cc b/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.cc index 49e76f9..f8c8108 100644 --- a/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.cc +++ b/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.cc
@@ -16,18 +16,14 @@ CHECK(!execution_context.IsContextDestroyed()); CrosKiosk* supplement = execution_context.GetCrosKiosk(); if (!supplement) { - supplement = MakeGarbageCollected<CrosKiosk>(execution_context); + supplement = MakeGarbageCollected<CrosKiosk>(); execution_context.SetCrosKiosk(supplement); } return *supplement; } -CrosKiosk::CrosKiosk(ExecutionContext& execution_context) - : execution_context_(execution_context) {} - void CrosKiosk::Trace(Visitor* visitor) const { ScriptWrappable::Trace(visitor); - visitor->Trace(execution_context_); } } // namespace blink
diff --git a/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.h b/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.h index 02ed7c7..2f5606e 100644 --- a/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.h +++ b/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.h
@@ -18,12 +18,9 @@ public: static CrosKiosk& From(ExecutionContext&); - explicit CrosKiosk(ExecutionContext&); + CrosKiosk() = default; void Trace(Visitor*) const override; - - private: - Member<ExecutionContext> execution_context_; }; } // namespace blink
diff --git a/third_party/blink/renderer/extensions/webview/web_view_android.cc b/third_party/blink/renderer/extensions/webview/web_view_android.cc index 803c8968..ae96e70 100644 --- a/third_party/blink/renderer/extensions/webview/web_view_android.cc +++ b/third_party/blink/renderer/extensions/webview/web_view_android.cc
@@ -39,7 +39,6 @@ WebViewAndroid::WebViewAndroid(ExecutionContext& execution_context) : ExecutionContextClient(&execution_context), - execution_context_(execution_context), media_integrity_service_remote_(&execution_context) {} void WebViewAndroid::EnsureServiceConnection( @@ -172,7 +171,6 @@ void WebViewAndroid::Trace(Visitor* visitor) const { visitor->Trace(provider_resolvers_); visitor->Trace(media_integrity_service_remote_); - visitor->Trace(execution_context_); ExecutionContextClient::Trace(visitor); ScriptWrappable::Trace(visitor); }
diff --git a/third_party/blink/renderer/extensions/webview/web_view_android.h b/third_party/blink/renderer/extensions/webview/web_view_android.h index c64b9fc..065bd7c 100644 --- a/third_party/blink/renderer/extensions/webview/web_view_android.h +++ b/third_party/blink/renderer/extensions/webview/web_view_android.h
@@ -45,7 +45,6 @@ ScriptPromiseResolver<MediaIntegrityTokenProvider>* resolver, std::optional<mojom::blink::WebViewMediaIntegrityErrorCode> error); - Member<ExecutionContext> execution_context_; HeapHashSet<Member<ScriptPromiseResolver<MediaIntegrityTokenProvider>>> provider_resolvers_; HeapMojoRemote<mojom::blink::WebViewMediaIntegrityService>
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn index b994a7a..242f63a 100644 --- a/third_party/blink/renderer/modules/BUILD.gn +++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -436,7 +436,6 @@ "canvas/canvas2d/canvas_rendering_context_2d_test.cc", "canvas/canvas2d/canvas_style_test_utils.cc", "canvas/canvas2d/canvas_style_test_utils.h", - "canvas/canvas2d/identifiability_study_helper_test.cc", "canvas/htmlcanvas/html_canvas_element_module_test.cc", "canvas/offscreencanvas/offscreen_canvas_rendering_api_ukm_metrics_test.cc", "canvas/offscreencanvas/offscreen_canvas_test.cc",
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index 9a9f5284..ca06e26 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -5450,8 +5450,33 @@ case ax::mojom::blink::Role::kPopUpButton: return ax::mojom::blink::DefaultActionVerb::kOpen; default: - if (action_element == GetNode()) - return ax::mojom::blink::DefaultActionVerb::kClick; + if (action_element == GetNode()) { + if (use_layout_based_action_) { + ui::AXRelativeBounds bounds; + bool clips_children; + PopulateAXRelativeBounds(bounds, &clips_children); + + HitTestRequest request( + HitTestRequest::kReadOnly | HitTestRequest::kActive | + HitTestRequest::kListBased | HitTestRequest::kPenetratingList); + HitTestLocation location(PhysicalRect::EnclosingRect(bounds.bounds)); + HitTestResult result(request, location); + GetDocument()->GetLayoutView()->HitTestNoLifecycleUpdate(location, + result); + const HitTestResult::NodeSet& hits = result.ListBasedTestResult(); + for (Node* hit : hits) { + while (hit) { + if (hit == GetNode()) { + return ax::mojom::DefaultActionVerb::kClickInHitTest; + } + hit = hit->parentNode(); + } + } + return ax::mojom::DefaultActionVerb::kClickNotInHitTest; + } else { + return ax::mojom::DefaultActionVerb::kClick; + } + } return ax::mojom::blink::DefaultActionVerb::kClickAncestor; } } @@ -7395,6 +7420,10 @@ case ax::mojom::blink::Action::kLongClick: case ax::mojom::blink::Action::kScrollToPositionAtRowColumn: return false; // Handled in `RenderAccessibilityImpl`. + case ax::mojom::Action::kRequestLayoutBasedAction: + use_layout_based_action_ = true; + AXObjectCache().MarkAXObjectDirtyWithCleanLayout(this); + return true; } }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h index 867fc7e0..3a8f1d4 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -1556,6 +1556,9 @@ // Only children that are included in tree, maybe rename to children_in_tree_. AXObjectVector children_; bool has_dirty_descendants_ = false; + // When true, actions may use more expensive layout-based computations. + // e.g. DefaultActionVerb::kClickInHitTest. + bool use_layout_based_action_ = false; // The final role, taking into account the ARIA role and native role. ax::mojom::blink::Role role_;
diff --git a/third_party/blink/renderer/modules/ad_auction/navigator_auction.h b/third_party/blink/renderer/modules/ad_auction/navigator_auction.h index a79bb8f..ec75653 100644 --- a/third_party/blink/renderer/modules/ad_auction/navigator_auction.h +++ b/third_party/blink/renderer/modules/ad_auction/navigator_auction.h
@@ -49,7 +49,6 @@ explicit NavigatorAuction(Navigator&); // Gets, or creates, NavigatorAuction supplement on Navigator. - // See platform/Supplementable.h static NavigatorAuction& From(ExecutionContext*, Navigator&); // TODO(crbug.com/1441988): Make `const AuctionAdInterestGroup*` after rename.
diff --git a/third_party/blink/renderer/modules/ai/ai_interface_proxy.cc b/third_party/blink/renderer/modules/ai/ai_interface_proxy.cc index 67aa05c..34f827ff 100644 --- a/third_party/blink/renderer/modules/ai/ai_interface_proxy.cc +++ b/third_party/blink/renderer/modules/ai/ai_interface_proxy.cc
@@ -13,8 +13,7 @@ // TODO(crbug.com/406770758): Consider refactoring to have this class own the // execution context as a member. AIInterfaceProxy::AIInterfaceProxy(ExecutionContext* execution_context) - : execution_context_(*execution_context), - task_runner_( + : task_runner_( execution_context->GetTaskRunner(TaskType::kInternalDefault)), language_detection_model_( MakeGarbageCollected<LanguageDetectionModel>()) {} @@ -22,7 +21,6 @@ AIInterfaceProxy::~AIInterfaceProxy() = default; void AIInterfaceProxy::Trace(Visitor* visitor) const { - visitor->Trace(execution_context_); visitor->Trace(translation_manager_remote_); visitor->Trace(language_detection_driver_); visitor->Trace(language_detection_model_);
diff --git a/third_party/blink/renderer/modules/ai/ai_interface_proxy.h b/third_party/blink/renderer/modules/ai/ai_interface_proxy.h index a2edda32..0e2677a 100644 --- a/third_party/blink/renderer/modules/ai/ai_interface_proxy.h +++ b/third_party/blink/renderer/modules/ai/ai_interface_proxy.h
@@ -73,8 +73,6 @@ HeapMojoRemote<mojom::blink::AIManager>& GetAIManagerRemoteImpl( ExecutionContext* execution_context); - Member<ExecutionContext> execution_context_; - scoped_refptr<base::SequencedTaskRunner> task_runner_; HeapMojoRemote<mojom::blink::TranslationManager> translation_manager_remote_{
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_registration.cc b/third_party/blink/renderer/modules/background_fetch/background_fetch_registration.cc index eedc66a..138177c 100644 --- a/third_party/blink/renderer/modules/background_fetch/background_fetch_registration.cc +++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_registration.cc
@@ -8,8 +8,6 @@ #include <utility> #include "base/compiler_specific.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h" #include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom-blink.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" @@ -356,15 +354,6 @@ V8BackgroundFetchFailureReason BackgroundFetchRegistration::failureReason() const { - blink::IdentifiabilityMetricBuilder(GetExecutionContext()->UkmSourceID()) - .Add( - blink::IdentifiableSurface::FromTypeAndToken( - blink::IdentifiableSurface::Type::kWebFeature, - WebFeature:: - kV8BackgroundFetchRegistration_FailureReason_AttributeGetter), - failure_reason_ == - mojom::BackgroundFetchFailureReason::QUOTA_EXCEEDED) - .Record(GetExecutionContext()->UkmRecorder()); switch (failure_reason_) { case mojom::BackgroundFetchFailureReason::NONE: return V8BackgroundFetchFailureReason(
diff --git a/third_party/blink/renderer/modules/canvas/BUILD.gn b/third_party/blink/renderer/modules/canvas/BUILD.gn index 16ba800..b341a6e1 100644 --- a/third_party/blink/renderer/modules/canvas/BUILD.gn +++ b/third_party/blink/renderer/modules/canvas/BUILD.gn
@@ -32,8 +32,6 @@ "canvas2d/canvas_style.h", "canvas2d/clip_list.cc", "canvas2d/clip_list.h", - "canvas2d/identifiability_study_helper.cc", - "canvas2d/identifiability_study_helper.h", "canvas2d/mesh_2d_buffer.h", "canvas2d/mesh_2d_index_buffer.h", "canvas2d/mesh_2d_uv_buffer.h",
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc index cf2145e..eaa4c83 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
@@ -59,7 +59,6 @@ #include "third_party/blink/renderer/core/style/computed_style.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/modules/canvas/htmlcanvas/canvas_context_creation_attributes_helpers.h" #include "third_party/blink/renderer/modules/webgpu/dawn_conversions.h" #include "third_party/blink/renderer/modules/webgpu/dawn_enum_conversions.h" @@ -89,7 +88,6 @@ #include "third_party/blink/renderer/platform/graphics/video_frame_image_util.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" -#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/text/layout_locale.h" #include "third_party/blink/renderer/platform/text/text_direction.h" @@ -584,14 +582,6 @@ return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kPutImageData, data->width(), data->height(), - data->GetPredefinedColorSpace(), data->GetSkColorType(), dx, dy, - dirty_x, dirty_y, dirty_width, dirty_height); - identifiability_study_helper_.set_encountered_partially_digested_image(); - } - if (dirty_width < 0) { if (dirty_x < 0) { dirty_x = dirty_width = 0; @@ -702,11 +692,6 @@ } void BaseRenderingContext2D::setTextAlign(const V8CanvasTextAlign align) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kSetTextAlign, - IdentifiabilityBenignStringToken(align.AsString())); - } GetState().SetTextAlign(align); } @@ -716,11 +701,6 @@ void BaseRenderingContext2D::setTextBaseline( const V8CanvasTextBaseline baseline) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kSetTextBaseline, - IdentifiabilityBenignStringToken(baseline.AsString())); - } GetState().SetTextBaseline(baseline); } @@ -862,11 +842,6 @@ return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kSetFont, IdentifiabilityBenignStringToken(new_font)); - } - CanvasRenderingContext2DState& state = GetState(); if (new_font == state.UnparsedFont() && CurrentFontResolvedAndUpToDate()) { return; @@ -1071,17 +1046,6 @@ return; } - // TODO(crbug.com/40191831): Remove once identifiability study is removed. - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - paint_type == CanvasRenderingContext2DState::kFillPaintType - ? CanvasOps::kFillText - : CanvasOps::kStrokeText, - IdentifiabilitySensitiveStringToken(text), x, y, - max_width ? *max_width : -1); - identifiability_study_helper_.set_encountered_sensitive_ops(); - } - const Font* font = (cluster_font != nullptr) ? cluster_font : AccessFont(canvas); const SimpleFontData* font_data = font->PrimaryFont(); @@ -1236,9 +1200,6 @@ return; } - // TODO(crbug.com/40191831): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); - state.SetLang(lang_string); // If the font has been realized, reset it to account for the new lang @@ -1262,8 +1223,6 @@ void BaseRenderingContext2D::setLetterSpacing(const String& letter_spacing) { UseCounter::Count(GetTopExecutionContext(), WebFeature::kCanvasRenderingContext2DLetterSpacing); - // TODO(crbug.com/40191831): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); CanvasRenderingContext2DState& state = GetState(); if (!state.HasRealizedFont()) { setFont(font()); @@ -1275,9 +1234,6 @@ void BaseRenderingContext2D::setWordSpacing(const String& word_spacing) { UseCounter::Count(GetTopExecutionContext(), WebFeature::kCanvasRenderingContext2DWordSpacing); - // TODO(crbug.com/1234113): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); - CanvasRenderingContext2DState& state = GetState(); if (!state.HasRealizedFont()) { setFont(font()); @@ -1290,8 +1246,6 @@ const V8CanvasTextRendering& text_rendering) { UseCounter::Count(GetTopExecutionContext(), WebFeature::kCanvasRenderingContext2DTextRendering); - // TODO(crbug.com/1234113): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); CanvasRenderingContext2DState& state = GetState(); if (!state.HasRealizedFont()) { setFont(font()); @@ -1307,8 +1261,6 @@ const V8CanvasFontKerning font_kerning) { UseCounter::Count(GetTopExecutionContext(), WebFeature::kCanvasRenderingContext2DFontKerning); - // TODO(crbug.com/1234113): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); CanvasRenderingContext2DState& state = GetState(); if (!state.HasRealizedFont()) { setFont(font()); @@ -1333,8 +1285,6 @@ const V8CanvasFontStretch& font_stretch) { UseCounter::Count(GetTopExecutionContext(), WebFeature::kCanvasRenderingContext2DFontStretch); - // TODO(crbug.com/1234113): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); CanvasRenderingContext2DState& state = GetState(); if (!state.HasRealizedFont()) { setFont(font()); @@ -1350,8 +1300,6 @@ const V8CanvasFontVariantCaps& font_variant_caps) { UseCounter::Count(GetTopExecutionContext(), WebFeature::kCanvasRenderingContext2DFontVariantCaps); - // TODO(crbug.com/1234113): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); CanvasRenderingContext2DState& state = GetState(); if (!state.HasRealizedFont()) { setFont(font());
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.cc index f9b27eb..965ee61 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.cc
@@ -87,7 +87,6 @@ #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_index_buffer.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_uv_buffer.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_vertex_buffer.h" @@ -125,7 +124,6 @@ #include "third_party/blink/renderer/platform/heap/member.h" #include "third_party/blink/renderer/platform/heap/visitor.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" -#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/transforms/affine_transform.h" #include "third_party/blink/renderer/platform/wtf/casting.h" @@ -402,9 +400,6 @@ if (isContextLost()) [[unlikely]] { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSave); - } ValidateStateStack(); @@ -431,9 +426,6 @@ return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kRestore); - } ValidateStateStack(); if (state_stack_.size() <= 1) { // State stack is empty. Extra `restore()` are silently ignored. @@ -464,8 +456,6 @@ if (isContextLost()) [[unlikely]] { return; } - // TODO(crbug.com/40191831): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); // Make sure we have a recorder and paint canvas. if (!GetOrCreatePaintCanvas()) { @@ -685,8 +675,6 @@ if (isContextLost()) [[unlikely]] { return; } - // TODO(crbug.com/40191831): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); ValidateStateStack(); if (state_stack_.size() <= 1 || layer_count_ <= 0) { @@ -838,9 +826,6 @@ } void Canvas2DRecorderContext::ResetInternal() { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kReset); - } ValidateStateStack(); state_stack_.resize(1); state_stack_.front() = MakeGarbageCollected<CanvasRenderingContext2DState>(); @@ -871,26 +856,6 @@ ResetInternal(); } -void Canvas2DRecorderContext::IdentifiabilityUpdateForStyleUnion( - const V8CanvasStyle& style) { - switch (style.type) { - case V8CanvasStyleType::kCSSColorValue: - break; - case V8CanvasStyleType::kGradient: - identifiability_study_helper_.UpdateBuilder( - style.gradient->GetIdentifiableToken()); - break; - case V8CanvasStyleType::kPattern: - identifiability_study_helper_.UpdateBuilder( - style.pattern->GetIdentifiableToken()); - break; - case V8CanvasStyleType::kString: - identifiability_study_helper_.UpdateBuilder( - IdentifiabilityBenignStringToken(style.string)); - break; - } -} - RespectImageOrientationEnum Canvas2DRecorderContext::RespectImageOrientationInternal( CanvasImageSource* image_source) { @@ -906,26 +871,6 @@ return CanvasStyleToV8(script_state, GetState().StrokeStyle()); } -void Canvas2DRecorderContext:: - UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill( - const V8CanvasStyle& v8_style, - CanvasOps op) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(op); - IdentifiabilityUpdateForStyleUnion(v8_style); - } -} - -void Canvas2DRecorderContext:: - UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill( - v8::Local<v8::String> v8_string, - CanvasOps op) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(op); - identifiability_study_helper_.UpdateBuilder(v8_string->GetIdentityHash()); - } -} - bool Canvas2DRecorderContext::ExtractColorFromV8StringAndUpdateCache( v8::Isolate* isolate, v8::Local<v8::String> v8_string, @@ -980,8 +925,6 @@ // from the string is expensive) so we keep a map of string to color. if (value->IsString()) { v8::Local<v8::String> v8_string = value.As<v8::String>(); - UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill( - v8_string, CanvasOps::kSetStrokeStyle); if (state.IsUnparsedStrokeColor(v8_string)) { return; } @@ -1008,9 +951,6 @@ return; } - UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill( - v8_style, CanvasOps::kSetStrokeStyle); - switch (v8_style.type) { case V8CanvasStyleType::kCSSColorValue: state.SetStrokeColor(v8_style.css_color_value); @@ -1108,8 +1048,6 @@ // details on this. if (value->IsString()) { v8::Local<v8::String> v8_string = value.As<v8::String>(); - UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill( - v8_string, CanvasOps::kSetFillStyle); if (state.IsUnparsedFillColor(v8_string)) { return; } @@ -1132,9 +1070,6 @@ return; } - UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill(v8_style, - CanvasOps::kSetFillStyle); - switch (v8_style.type) { case V8CanvasStyleType::kCSSColorValue: state.SetFillColor(v8_style.css_color_value); @@ -1177,10 +1112,6 @@ if (state.LineWidth() == width) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetLineWidth, - width); - } state.SetLineWidth(ClampTo<float>(width)); } @@ -1197,9 +1128,6 @@ if (state.GetLineCap() == cap) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetLineCap, cap); - } state.SetLineCap(cap); } @@ -1216,9 +1144,6 @@ if (state.GetLineJoin() == join) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetLineJoin, join); - } state.SetLineJoin(join); } @@ -1234,10 +1159,6 @@ if (state.MiterLimit() == limit) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetMiterLimit, - limit); - } state.SetMiterLimit(ClampTo<float>(limit)); } @@ -1259,10 +1180,6 @@ if (state.ShadowOffset().x() == x) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetShadowOffsetX, - x); - } state.SetShadowOffsetX(ClampTo<float>(x)); } @@ -1279,10 +1196,6 @@ if (state.ShadowOffset().y() == y) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetShadowOffsetY, - y); - } state.SetShadowOffsetY(ClampTo<float>(y)); } @@ -1299,10 +1212,6 @@ if (state.ShadowBlur() == blur) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetShadowBlur, - blur); - } state.SetShadowBlur(ClampTo<float>(blur)); } @@ -1322,10 +1231,6 @@ if (state.ShadowColor() == color) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetShadowColor, - color.Rgb()); - } state.SetShadowColor(color); } @@ -1342,10 +1247,6 @@ if (!LineDashSequenceIsValid(dash)) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetLineDash, - base::span(dash)); - } GetState().SetLineDash(dash); } @@ -1358,10 +1259,6 @@ if (!std::isfinite(offset) || state.LineDashOffset() == offset) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetLineDashOffset, - offset); - } state.SetLineDashOffset(ClampTo<float>(offset)); } @@ -1377,10 +1274,6 @@ if (state.GlobalAlpha() == alpha) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetGlobalAlpha, - alpha); - } state.SetGlobalAlpha(alpha); } @@ -1413,10 +1306,6 @@ if (state.GlobalComposite() == sk_blend_mode) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kSetGlobalCompositeOpertion, sk_blend_mode); - } state.SetGlobalComposite(sk_blend_mode); } @@ -1443,16 +1332,9 @@ WebFeature::kCanvasRenderingContext2DCanvasFilter); state.SetCanvasFilter(input->GetAsCanvasFilter()); SnapshotStateForFilter(); - // TODO(crbug.com/40191831): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); break; case V8UnionCanvasFilterOrString::ContentType::kString: { const String& filter_string = input->GetAsString(); - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kSetFilter, - IdentifiabilitySensitiveStringToken(filter_string)); - } if (!state.GetCanvasFilter() && !state.IsFontDirtyForFilter() && filter_string == state.UnparsedCSSFilter()) { return; @@ -1484,9 +1366,6 @@ if (!std::isfinite(sx) || !std::isfinite(sy)) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kScale, sx, sy); - } const CanvasRenderingContext2DState& state = GetState(); AffineTransform new_transform = state.GetTransform(); @@ -1515,10 +1394,6 @@ if (!std::isfinite(angle_in_radians)) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kRotate, - angle_in_radians); - } const CanvasRenderingContext2DState& state = GetState(); AffineTransform new_transform = state.GetTransform(); @@ -1551,9 +1426,6 @@ if (!std::isfinite(tx) || !std::isfinite(ty)) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kTranslate, tx, ty); - } const CanvasRenderingContext2DState& state = GetState(); AffineTransform new_transform = state.GetTransform(); @@ -1596,10 +1468,6 @@ float fm22 = ClampTo<float>(m22); float fdx = ClampTo<float>(dx); float fdy = ClampTo<float>(dy); - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kTransform, fm11, - fm12, fm21, fm22, fdx, fdy); - } AffineTransform transform(fm11, fm12, fm21, fm22, fdx, fdy); const CanvasRenderingContext2DState& state = GetState(); @@ -1629,9 +1497,6 @@ if (!c) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kResetTransform); - } CanvasRenderingContext2DState& state = GetState(); AffineTransform ctm = state.GetTransform(); @@ -1709,9 +1574,6 @@ void Canvas2DRecorderContext::beginPath() { Clear(); - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kBeginPath); - } } void Canvas2DRecorderContext::DrawPathInternal( @@ -1823,9 +1685,6 @@ } void Canvas2DRecorderContext::FillImpl(SkPathFillType winding_rule) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kFill, winding_rule); - } DrawPathInternal(*this, CanvasRenderingContext2DState::kFillPaintType, winding_rule, UsePaintCache::kDisabled); } @@ -1841,27 +1700,16 @@ void Canvas2DRecorderContext::FillPathImpl(Path2D* dom_path, SkPathFillType winding_rule) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kFill__Path, dom_path->GetIdentifiableToken(), winding_rule); - } DrawPathInternal(*dom_path, CanvasRenderingContext2DState::kFillPaintType, winding_rule, path2d_use_paint_cache_); } void Canvas2DRecorderContext::stroke() { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kStroke); - } DrawPathInternal(*this, CanvasRenderingContext2DState::kStrokePaintType, SkPathFillType::kWinding, UsePaintCache::kDisabled); } void Canvas2DRecorderContext::stroke(Path2D* dom_path) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kStroke__Path, dom_path->GetIdentifiableToken()); - } DrawPathInternal(*dom_path, CanvasRenderingContext2DState::kStrokePaintType, SkPathFillType::kWinding, path2d_use_paint_cache_); } @@ -1877,10 +1725,6 @@ if (!GetOrCreatePaintCanvas()) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kFillRect, x, y, - width, height); - } // We are assuming that if the pattern is not accelerated and the current // canvas is accelerated, the texture of the pattern will not be able to be @@ -1944,10 +1788,6 @@ if (!GetOrCreatePaintCanvas()) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kStrokeRect, x, y, - width, height); - } // clamp to float to avoid float cast overflow when used as SkScalar AdjustRectForCanvas(x, y, width, height); @@ -1996,21 +1836,11 @@ } void Canvas2DRecorderContext::clip(const V8CanvasFillRule& winding_rule) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kClip, - IdentifiabilitySensitiveStringToken(winding_rule.AsString())); - } ClipInternal(GetPath(), winding_rule, UsePaintCache::kDisabled); } void Canvas2DRecorderContext::clip(Path2D* dom_path, const V8CanvasFillRule& winding_rule) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kClip__Path, dom_path->GetIdentifiableToken(), - IdentifiabilitySensitiveStringToken(winding_rule.AsString())); - } ClipInternal(dom_path->GetPath(), winding_rule, path2d_use_paint_cache_); } @@ -2125,10 +1955,6 @@ if (!c->getDeviceClipBounds(&clip_bounds)) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kClearRect, x, y, - width, height); - } cc::PaintFlags clear_flags = GetClearFlags(); @@ -2455,12 +2281,6 @@ if (src_rect.IsEmpty()) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kDrawImage, fsx, fsy, fsw, fsh, fdx, fdy, fdw, fdh, - image ? image->width() : 0, image ? image->height() : 0); - identifiability_study_helper_.set_encountered_partially_digested_image(); - } ValidateStateStack(); @@ -2516,11 +2336,8 @@ float fx1 = ClampTo<float>(x1); float fy1 = ClampTo<float>(y1); - auto* gradient = MakeGarbageCollected<CanvasGradient>(gfx::PointF(fx0, fy0), - gfx::PointF(fx1, fy1)); - gradient->SetExecutionContext( - identifiability_study_helper_.execution_context()); - return gradient; + return MakeGarbageCollected<CanvasGradient>(gfx::PointF(fx0, fy0), + gfx::PointF(fx1, fy1)); } CanvasGradient* Canvas2DRecorderContext::createRadialGradient( @@ -2552,11 +2369,8 @@ float fy1 = ClampTo<float>(y1); float fr1 = ClampTo<float>(r1); - auto* gradient = MakeGarbageCollected<CanvasGradient>( - gfx::PointF(fx0, fy0), fr0, gfx::PointF(fx1, fy1), fr1); - gradient->SetExecutionContext( - identifiability_study_helper_.execution_context()); - return gradient; + return MakeGarbageCollected<CanvasGradient>(gfx::PointF(fx0, fy0), fr0, + gfx::PointF(fx1, fy1), fr1); } CanvasGradient* Canvas2DRecorderContext::createConicGradient(double startAngle, @@ -2568,8 +2382,6 @@ !std::isfinite(centerY)) { return nullptr; } - // TODO(crbug.com/40191831): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); // clamp to float to avoid float cast overflow float a = ClampTo<float>(startAngle); @@ -2580,10 +2392,7 @@ // |startAngle| at 0 starts from x-axis. a = Rad2deg(a) + 90; - auto* gradient = MakeGarbageCollected<CanvasGradient>(a, gfx::PointF(x, y)); - gradient->SetExecutionContext( - identifiability_study_helper_.execution_context()); - return gradient; + return MakeGarbageCollected<CanvasGradient>(a, gfx::PointF(x, y)); } CanvasPattern* Canvas2DRecorderContext::createPattern( @@ -2675,8 +2484,6 @@ auto* pattern = MakeGarbageCollected<CanvasPattern>( std::move(image_for_rendering), repeat_mode, origin_clean, source_high_entropy_canvas_op_types); - pattern->SetExecutionContext( - identifiability_study_helper_.execution_context()); return pattern; } @@ -2849,10 +2656,6 @@ if (enabled == state.ImageSmoothingEnabled()) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kSetImageSmoothingEnabled, enabled); - } state.SetImageSmoothingEnabled(enabled); } @@ -2868,11 +2671,6 @@ return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kSetImageSmoothingQuality, - IdentifiabilitySensitiveStringToken(quality.AsString())); - } state.SetImageSmoothingQuality(quality); }
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.h index b40ab91c..2025934 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.h
@@ -95,8 +95,6 @@ class Path2D; class ScriptState; class V8UnionCanvasFilterOrString; -struct V8CanvasStyle; -enum class CanvasOps; enum class ColorParseResult; enum RespectImageOrientationEnum : uint8_t; template <typename T> @@ -662,21 +660,9 @@ virtual std::optional<cc::PaintRecord> FlushCanvas(FlushReason) = 0; - // Only call if identifiability_study_helper_.ShouldUpdateBuilder() returns - // true. - void IdentifiabilityUpdateForStyleUnion(const V8CanvasStyle& style); - RespectImageOrientationEnum RespectImageOrientationInternal( CanvasImageSource*); - // Updates the identifiability study before changing stroke or fill styles. - void UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill( - const V8CanvasStyle& v8_style, - CanvasOps op); - void UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill( - v8::Local<v8::String> v8_string, - CanvasOps op); - // Parses the string as a color and returns the result of parsing. ColorParseResult ParseColorOrCurrentColor(const String& color_string, Color& color) const;
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc index 4b072e35..0be29cc 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc
@@ -26,11 +26,9 @@ #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_color_interpolation_method.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_hue_interpolation_method.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/platform/bindings/exception_code.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" @@ -108,10 +106,6 @@ Gradient::SpreadMethod::kPad, Gradient::PremultipliedAlpha::kUnpremultiplied, Gradient::DegenerateHandling::kDisallow)) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kCreateLinearGradient, p0.x(), p0.y(), p1.x(), p1.y()); - } } CanvasGradient::CanvasGradient(const gfx::PointF& p0, @@ -127,11 +121,6 @@ Gradient::SpreadMethod::kPad, Gradient::PremultipliedAlpha::kUnpremultiplied, Gradient::DegenerateHandling::kDisallow)) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kCreateRadialGradient, p0.x(), p0.y(), r0, p1.x(), p1.y(), - r1); - } } // CanvasRenderingContext2D.createConicGradient only takes one angle argument @@ -164,22 +153,10 @@ "') could not be parsed as a color."); return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kAddColorStop, value, - color.Rgb()); - } gradient_->AddColorStop(value, color); } -IdentifiableToken CanvasGradient::GetIdentifiableToken() const { - return identifiability_study_helper_.GetToken(); -} - -void CanvasGradient::SetExecutionContext(ExecutionContext* context) { - identifiability_study_helper_.SetExecutionContext(context); -} - void CanvasGradient::setColorInterpolationMethod( const V8ColorInterpolationMethod& color_interpolation_method) { color_interpolation_method_ = color_interpolation_method; @@ -198,9 +175,4 @@ hue_interpolation_method_)); } -void CanvasGradient::Trace(Visitor* visitor) const { - visitor->Trace(identifiability_study_helper_); - ScriptWrappable::Trace(visitor); -} - } // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h index 5cfa29e..ca910139 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h
@@ -28,10 +28,8 @@ #define THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_CANVAS_GRADIENT_H_ #include "base/memory/scoped_refptr.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_color_interpolation_method.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_hue_interpolation_method.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/graphics/gradient.h" @@ -47,7 +45,6 @@ namespace blink { class ExceptionState; -class ExecutionContext; class MODULES_EXPORT CanvasGradient final : public ScriptWrappable { DEFINE_WRAPPERTYPEINFO(); @@ -67,13 +64,6 @@ void addColorStop(double value, const String& color, ExceptionState&); - IdentifiableToken GetIdentifiableToken() const; - - // Sets on internal IdentifiabilityStudyHelper. - void SetExecutionContext(ExecutionContext*); - - void Trace(Visitor* visitor) const override; - V8ColorInterpolationMethod colorInterpolationMethod() const { return color_interpolation_method_; } @@ -94,7 +84,6 @@ private: scoped_refptr<Gradient> gradient_; - IdentifiabilityStudyHelper identifiability_study_helper_; V8ColorInterpolationMethod color_interpolation_method_{ V8ColorInterpolationMethod::Enum::kSRGB};
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc index 9dcf2d22..724f2a7 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc
@@ -48,7 +48,6 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_union_dompointinit_unrestricteddouble.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" // IWYU pragma: keep (https://github.com/clangd/clangd/issues/2044) #include "third_party/blink/renderer/core/frame/web_feature.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/platform/bindings/exception_code.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/geometry/float_rounded_rect.h" @@ -57,7 +56,6 @@ #include "third_party/blink/renderer/platform/graphics/canvas_high_entropy_op_type.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h" #include "third_party/blink/renderer/platform/heap/member.h" -#include "third_party/blink/renderer/platform/heap/visitor.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/transforms/affine_transform.h" @@ -88,9 +86,6 @@ return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kClosePath); - } if (IsArc()) { // Only the first close does something. if (!arc_builder_.IsClosed()) { @@ -109,10 +104,6 @@ if (!std::isfinite(x) || !std::isfinite(y)) [[unlikely]] { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kMoveTo, double_x, - double_y); - } gfx::PointF point(x, y); if (!IsTransformInvertible()) [[unlikely]] { point = GetTransform().MapPoint(point); @@ -131,10 +122,6 @@ if (!std::isfinite(x) || !std::isfinite(y)) [[unlikely]] { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kLineTo, double_x, - double_y); - } gfx::PointF p1(x, y); if (!IsTransformInvertible()) [[unlikely]] { @@ -171,11 +158,6 @@ return; } UpdatePathFromLineOrArcIfNecessaryForMutation(); - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kQuadradicCurveTo, - double_cpx, double_cpy, - double_x, double_y); - } gfx::PointF p1(x, y); gfx::PointF cp(cpx, cpy); @@ -209,11 +191,6 @@ return; } UpdatePathFromLineOrArcIfNecessaryForMutation(); - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kBezierCurveTo, double_cp1x, double_cp1y, double_cp2x, - double_cp2y, double_x, double_y); - } gfx::PointF p1(x, y); gfx::PointF cp1(cp1x, cp1y); @@ -254,11 +231,6 @@ return; } UpdatePathFromLineOrArcIfNecessaryForMutation(); - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kArcTo, double_x1, - double_y1, double_x2, double_y2, - double_r); - } gfx::PointF p1(x1, y1); gfx::PointF p2(x2, y2); @@ -475,11 +447,6 @@ } UpdatePathFromLineOrArcIfNecessaryForMutation(); - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kArc, double_x, double_y, double_radius, double_start_angle, - double_end_angle, anticlockwise); - } high_entropy_path_op_types_ |= HighEntropyCanvasOpType::kArc; if (!radius || start_angle == end_angle) [[unlikely]] { @@ -547,12 +514,6 @@ } UpdatePathFromLineOrArcIfNecessaryForMutation(); - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kEllipse, double_x, double_y, double_radius_x, - double_radius_y, double_rotation, double_start_angle, double_end_angle, - anticlockwise); - } CanonicalizeAngle(&start_angle, &end_angle); float adjusted_end_angle = @@ -593,10 +554,6 @@ return; } UpdatePathFromLineOrArcIfNecessaryForMutation(); - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kRect, double_x, double_y, double_width, double_height); - } path_builder_.AddRect(gfx::PointF(x, y), gfx::PointF(x + width, y + height)); } @@ -632,8 +589,6 @@ return; } UpdatePathFromLineOrArcIfNecessaryForMutation(); - // TODO(crbug.com/1234113): Instrument new canvas APIs. - identifiability_study_helper_.set_encountered_skipped_ops(); std::array<gfx::SizeF, kMaxRadii> r; for (int i = 0; i < num_radii; ++i) { @@ -761,10 +716,6 @@ return path_builder_.BoundingRect(); } -void CanvasPath::Trace(Visitor* visitor) const { - visitor->Trace(identifiability_study_helper_); -} - ALWAYS_INLINE gfx::RectF CanvasPath::LineBuilder::BoundingRect() const { DCHECK_NE(state_, State::kEmpty); if (state_ == State::kStartingPoint) {
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h index 50fb811..28cce1c 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h
@@ -33,9 +33,7 @@ #include "base/check.h" #include "base/check_op.h" #include "base/compiler_specific.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/bindings/core/v8/v8_union_dompointinit_unrestricteddouble.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/geometry/path.h" #include "third_party/blink/renderer/platform/geometry/path_builder.h" @@ -138,10 +136,6 @@ return AffineTransform(); } - IdentifiableToken GetIdentifiableToken() const { - return identifiability_study_helper_.GetToken(); - } - // Returns the path types that would result in a high entropy canvas operation // when these are drawn on the canvas. Because of the high entropy associated // with the operation, this reveals information about the user's device and @@ -190,8 +184,6 @@ // than necessary. gfx::RectF BoundingRect() const; - void Trace(Visitor*) const override; - protected: CanvasPath() { path_builder_.SetIsVolatile(true); } explicit CanvasPath(const Path& path) : path_builder_(path) { @@ -219,8 +211,6 @@ // code paths that handle non-invertible transforms. bool is_transform_invertible_ = true; - IdentifiabilityStudyHelper identifiability_study_helper_; - // The path types that would result in a high entropy canvas operation when // these are drawn on the canvas. These could be used for fingerprinting. HighEntropyCanvasOpType high_entropy_path_op_types_ =
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc index afd9810..65ca982a 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc
@@ -27,9 +27,7 @@ #include "base/compiler_specific.h" #include "base/memory/scoped_refptr.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/core/geometry/dom_matrix_read_only.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/platform/bindings/exception_code.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" @@ -74,11 +72,6 @@ : pattern_(Pattern::CreateImagePattern(image, repeat)), origin_clean_(origin_clean), high_entropy_canvas_op_types_(high_entropy_canvas_op_types) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder( - CanvasOps::kCreatePattern, image ? image->width() : 0, - image ? image->height() : 0, repeat); - } } void CanvasPattern::setTransform(DOMMatrix2DInit* transform, @@ -89,25 +82,7 @@ if (!m) { return; } - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(m->m11(), m->m12(), m->m21(), - m->m22(), m->m41(), m->m42()); - } - pattern_transform_ = m->GetAffineTransform(); } -IdentifiableToken CanvasPattern::GetIdentifiableToken() const { - return identifiability_study_helper_.GetToken(); -} - -void CanvasPattern::SetExecutionContext(ExecutionContext* context) { - identifiability_study_helper_.SetExecutionContext(context); -} - -void CanvasPattern::Trace(Visitor* visitor) const { - visitor->Trace(identifiability_study_helper_); - ScriptWrappable::Trace(visitor); -} - } // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h index 825405d..6d72456 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h
@@ -28,7 +28,6 @@ #include "base/memory/scoped_refptr.h" #include "third_party/blink/public/common/privacy_budget/identifiable_token.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/graphics/canvas_high_entropy_op_type.h" @@ -43,7 +42,6 @@ class DOMMatrix2DInit; class ExceptionState; -class ExecutionContext; class Image; class MODULES_EXPORT CanvasPattern final : public ScriptWrappable { @@ -72,19 +70,11 @@ void setTransform(DOMMatrix2DInit*, ExceptionState&); - IdentifiableToken GetIdentifiableToken() const; - - // Sets on internal IdentifiabilityStudyHelper. - void SetExecutionContext(ExecutionContext*); - - void Trace(Visitor* visitor) const override; - private: scoped_refptr<Pattern> pattern_; AffineTransform pattern_transform_; const bool origin_clean_; const HighEntropyCanvasOpType high_entropy_canvas_op_types_; - IdentifiabilityStudyHelper identifiability_study_helper_; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc index 6973792..569e695 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
@@ -59,7 +59,6 @@ #include "gpu/command_buffer/common/shared_image_usage.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/metrics/document_update_reason.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/public/mojom/frame/color_scheme.mojom-blink.h" #include "third_party/blink/public/mojom/scroll/scroll_enums.mojom-blink.h" #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h" @@ -202,8 +201,6 @@ attrs, canvas->GetDocument().GetTaskRunner(TaskType::kInternalDefault)), should_prune_local_font_cache_(false) { - identifiability_study_helper_.SetExecutionContext( - canvas->GetTopExecutionContext()); if (canvas->GetDocument().GetSettings() && canvas->GetDocument().GetSettings()->GetAntialiasedClips2dCanvasEnabled()) clip_antialiasing_ = kAntiAliased; @@ -1042,14 +1039,11 @@ void CanvasRenderingContext2D::drawFocusIfNeeded(Path2D* path2d, Element* element) { - DrawFocusIfNeededInternal(path2d->GetPath(), element, - path2d->GetIdentifiableToken()); + DrawFocusIfNeededInternal(path2d->GetPath(), element); } -void CanvasRenderingContext2D::DrawFocusIfNeededInternal( - const Path& path, - Element* element, - IdentifiableToken path_token) { +void CanvasRenderingContext2D::DrawFocusIfNeededInternal(const Path& path, + Element* element) { if (!FocusRingCallIsValid(path, element)) return; @@ -1057,10 +1051,6 @@ // element->focused(), because element->focused() isn't updated until after // focus events fire. if (element->GetDocument().FocusedElement() == element) { - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kDrawFocusIfNeeded, - path_token); - } ScrollPathIntoViewInternal(path); DrawFocusRing(path, element); }
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h index 9bc8b451..55a1cf7 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h
@@ -35,7 +35,6 @@ #include "base/check.h" #include "base/memory/scoped_refptr.h" #include "cc/paint/paint_record.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h" #include "third_party/blink/renderer/core/html/canvas/canvas_performance_monitor.h" #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h" @@ -45,7 +44,6 @@ #include "third_party/blink/renderer/core/style/filter_operations.h" #include "third_party/blink/renderer/core/svg/svg_resource_client.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/fonts/font_description.h" @@ -246,24 +244,8 @@ ImageDataSettings*, ExceptionState&) final; - IdentifiableToken IdentifiableTextToken() const override { - return identifiability_study_helper_.GetToken(); - } - - bool IdentifiabilityEncounteredSkippedOps() const override { - return identifiability_study_helper_.encountered_skipped_ops(); - } - - bool IdentifiabilityEncounteredSensitiveOps() const override { - return identifiability_study_helper_.encountered_sensitive_ops(); - } - void SendContextLostEventIfNeeded() override; - bool IdentifiabilityEncounteredPartiallyDigestedImage() const override { - return identifiability_study_helper_.encountered_partially_digested_image(); - } - CanvasResourceProvider* GetOrCreateResourceProvider() override; void SetCanvas2DResourceProviderForTesting( std::unique_ptr<CanvasResourceProvider> provider, @@ -319,10 +301,7 @@ void ScrollPathIntoViewInternal(const Path&); - void DrawFocusIfNeededInternal( - const Path&, - Element*, - IdentifiableToken path_hash = IdentifiableToken()); + void DrawFocusIfNeededInternal(const Path&, Element*); bool FocusRingCallIsValid(const Path&, Element*); void DrawFocusRing(const Path&, Element*); void UpdateElementAccessibility(const Path&, Element*);
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc index f8e1a3ea..43445c6 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc
@@ -6,7 +6,6 @@ #include <stdint.h> #include <algorithm> -#include <memory> #include <vector> #include "base/memory/scoped_refptr.h" @@ -14,15 +13,9 @@ #include "cc/paint/refcounted_buffer.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings_provider.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" #include "third_party/blink/renderer/bindings/core/v8/v8_blob_callback.h" -#include "third_party/blink/renderer/bindings/core/v8/v8_canvas_text_align.h" -#include "third_party/blink/renderer/bindings/core/v8/v8_canvas_text_baseline.h" #include "third_party/blink/renderer/bindings/core/v8/v8_image_bitmap_options.h" #include "third_party/blink/renderer/bindings/core/v8/v8_image_data_settings.h" #include "third_party/blink/renderer/bindings/core/v8/v8_union_float16array_float32array_uint8clampedarray.h" // IWYU pragma: keep @@ -43,7 +36,6 @@ #include "third_party/blink/renderer/core/typed_arrays/dom_typed_array.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_style_test_utils.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_index_buffer.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_uv_buffer.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_vertex_buffer.h" @@ -585,340 +577,6 @@ EXPECT_TRUE(canvas->RenderingContext()->IsRenderingContext2D()); } -// A IdentifiabilityStudySettingsProvider implementation that opts-into study -// participation. -class ActiveSettingsProvider : public IdentifiabilityStudySettingsProvider { - public: - explicit ActiveSettingsProvider(bool enabled) : enabled_(enabled) {} - bool IsMetaExperimentActive() const override { return false; } - bool IsActive() const override { return enabled_; } - bool IsAnyTypeOrSurfaceBlocked() const override { return false; } - bool IsSurfaceAllowed(IdentifiableSurface surface) const override { - return true; - } - bool IsTypeAllowed(IdentifiableSurface::Type type) const override { - return true; - } - - private: - const bool enabled_ = true; -}; - -// An RAII class that opts into study participation using -// ActiveSettingsProvider. -class StudyParticipationRaii { - public: - explicit StudyParticipationRaii(bool enabled = true) { - IdentifiabilityStudySettings::SetGlobalProvider( - std::make_unique<ActiveSettingsProvider>(enabled)); - } - ~StudyParticipationRaii() { - IdentifiabilityStudySettings::ResetStateForTesting(); - } -}; - -TEST_F(CanvasRenderingContext2DAPITest, IdentifiabilityStudyMaxOperations) { - StudyParticipationRaii study_participation_raii; - constexpr int kMaxOperations = 5; - IdentifiabilityStudyHelper::ScopedMaxOperationsSetter max_operations_setter( - kMaxOperations); - CreateContext(kNonOpaque); - - int64_t last_digest = INT64_C(0); - for (int i = 0; i < kMaxOperations; i++) { - Context2D()->setFont("Arial"); - EXPECT_NE(last_digest, - Context2D()->IdentifiableTextToken().ToUkmMetricValue()) - << i; - last_digest = Context2D()->IdentifiableTextToken().ToUkmMetricValue(); - } - - Context2D()->setFont("Arial"); - EXPECT_EQ(last_digest, - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -// TODO(crbug.com/1239374): Fix test on Android L and re-enable. -// TODO(crbug.com/1258605): Fix test on Windows and re-enable. -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) -#define MAYBE_IdentifiabilityStudyDigest_Font \ - DISABLED_IdentifiabilityStudyDigest_Font -#else -#define MAYBE_IdentifiabilityStudyDigest_Font IdentifiabilityStudyDigest_Font -#endif // BUILDFLAG(IS_ANDROID) - -TEST_F(CanvasRenderingContext2DAPITest, MAYBE_IdentifiabilityStudyDigest_Font) { - StudyParticipationRaii study_participation_raii; - CreateContext(kNonOpaque); - - Context2D()->setFont("Arial"); - EXPECT_EQ(INT64_C(7339381412423806682), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -TEST_F(CanvasRenderingContext2DAPITest, IdentifiabilityStudyDisabled) { - StudyParticipationRaii study_participation_raii(/*enabled=*/false); - constexpr int64_t kTokenBuilderInitialDigest = INT64_C(6544625333304541877); - - CreateContext(kNonOpaque); - - Context2D()->setFont("Arial"); - EXPECT_EQ(kTokenBuilderInitialDigest, - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -// TODO(crbug.com/1239374): Fix test on Android and re-enable. -// TODO(crbug.com/1258605): Fix test on Windows and re-enable. -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) -#define MAYBE_IdentifiabilityStudyDigest_StrokeText \ - DISABLED_IdentifiabilityStudyDigest_StrokeText -#else -#define MAYBE_IdentifiabilityStudyDigest_StrokeText \ - IdentifiabilityStudyDigest_StrokeText -#endif // BUILDFLAG(IS_ANDROID) - -TEST_F(CanvasRenderingContext2DAPITest, - MAYBE_IdentifiabilityStudyDigest_StrokeText) { - StudyParticipationRaii study_participation_raii; - CreateContext(kNonOpaque); - - Context2D()->strokeText("Sensitive message", 1.0, 1.0); - EXPECT_EQ(INT64_C(8218678546639211996), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -// TODO(crbug.com/1239374): Fix test on Android and re-enable. -// TODO(crbug.com/1258605): Fix test on Windows and re-enable. -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) -#define MAYBE_IdentifiabilityStudyDigest_FillText \ - DISABLED_IdentifiabilityStudyDigest_FillText -#else -#define MAYBE_IdentifiabilityStudyDigest_FillText \ - IdentifiabilityStudyDigest_FillText -#endif // BUILDFLAG(IS_ANDROID) - -TEST_F(CanvasRenderingContext2DAPITest, - MAYBE_IdentifiabilityStudyDigest_FillText) { - StudyParticipationRaii study_participation_raii; - CreateContext(kNonOpaque); - - Context2D()->fillText("Sensitive message", 1.0, 1.0); - EXPECT_EQ(INT64_C(-7525055925911674050), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -// TODO(crbug.com/1239374): Fix test on Android and re-enable. -// TODO(crbug.com/1258605): Fix test on Windows and re-enable. -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) -#define MAYBE_IdentifiabilityStudyDigest_TextAlign \ - DISABLED_IdentifiabilityStudyDigest_TextAlign -#else -#define MAYBE_IdentifiabilityStudyDigest_TextAlign \ - IdentifiabilityStudyDigest_TextAlign -#endif // BUILDFLAG(IS_ANDROID) - -TEST_F(CanvasRenderingContext2DAPITest, - MAYBE_IdentifiabilityStudyDigest_TextAlign) { - StudyParticipationRaii study_participation_raii; - CreateContext(kNonOpaque); - - Context2D()->setTextAlign( - V8CanvasTextAlign(V8CanvasTextAlign::Enum::kCenter)); - EXPECT_EQ(INT64_C(-5618040280239325003), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -// TODO(crbug.com/1239374): Fix test on Android and re-enable. -// TODO(crbug.com/1258605): Fix test on Windows and re-enable. -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) -#define MAYBE_IdentifiabilityStudyDigest_TextBaseline \ - DISABLED_IdentifiabilityStudyDigest_TextBaseline -#else -#define MAYBE_IdentifiabilityStudyDigest_TextBaseline \ - IdentifiabilityStudyDigest_TextBaseline -#endif // BUILDFLAG(IS_ANDROID) - -TEST_F(CanvasRenderingContext2DAPITest, - MAYBE_IdentifiabilityStudyDigest_TextBaseline) { - StudyParticipationRaii study_participation_raii; - CreateContext(kNonOpaque); - - Context2D()->setTextBaseline( - V8CanvasTextBaseline(V8CanvasTextBaseline::Enum::kTop)); - EXPECT_EQ(INT64_C(-6814889525293785691), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -// TODO(crbug.com/1239374): Fix test on Android and re-enable. -// TODO(crbug.com/1258605): Fix test on Windows and re-enable. -// TODO(crbug.com/392441189): Re-enable test with new V8 string hash. -#if true || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) -#define MAYBE_IdentifiabilityStudyDigest_StrokeStyle \ - DISABLED_IdentifiabilityStudyDigest_StrokeStyle -#else -#define MAYBE_IdentifiabilityStudyDigest_StrokeStyle \ - IdentifiabilityStudyDigest_StrokeStyle -#endif // BUILDFLAG(IS_ANDROID) - -TEST_F(CanvasRenderingContext2DAPITest, - MAYBE_IdentifiabilityStudyDigest_StrokeStyle) { - v8::HandleScope handle_scope(GetIsolate()); - StudyParticipationRaii study_participation_raii; - CreateContext(kNonOpaque); - - SetStrokeStyleString(Context2D(), GetScriptState(), "blue"); - EXPECT_EQ(INT64_C(3577524355478740727), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -// TODO(crbug.com/1239374): Fix test on Android and re-enable. -// TODO(crbug.com/1258605): Fix test on Windows and re-enable. -// TODO(crbug.com/392441189): Re-enable test with new V8 string hash. -#if true || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) -#define MAYBE_IdentifiabilityStudyDigest_FillStyle \ - DISABLED_IdentifiabilityStudyDigest_FillStyle -#else -#define MAYBE_IdentifiabilityStudyDigest_FillStyle \ - IdentifiabilityStudyDigest_FillStyle -#endif // BUILDFLAG(IS_ANDROID) - -TEST_F(CanvasRenderingContext2DAPITest, - MAYBE_IdentifiabilityStudyDigest_FillStyle) { - v8::HandleScope handle_scope(GetIsolate()); - StudyParticipationRaii study_participation_raii; - CreateContext(kNonOpaque); - - SetFillStyleString(Context2D(), GetScriptState(), "blue"); - EXPECT_EQ(INT64_C(7953663110297373742), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -// TODO(crbug.com/1239374): Fix test on Android and re-enable. -// TODO(crbug.com/1258605): Fix test on Windows and re-enable. -// TODO(crbug.com/392441189): Re-enable test with new V8 string hash. -#if true || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) -#define MAYBE_IdentifiabilityStudyDigest_Combo \ - DISABLED_IdentifiabilityStudyDigest_Combo -#else -#define MAYBE_IdentifiabilityStudyDigest_Combo IdentifiabilityStudyDigest_Combo -#endif // BUILDFLAG(IS_ANDROID) - -TEST_F(CanvasRenderingContext2DAPITest, - MAYBE_IdentifiabilityStudyDigest_Combo) { - v8::HandleScope handle_scope(GetIsolate()); - StudyParticipationRaii study_participation_raii; - CreateContext(kNonOpaque); - - Context2D()->fillText("Sensitive message", 1.0, 1.0); - EXPECT_EQ(INT64_C(-7525055925911674050), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - Context2D()->setFont("Helvetica"); - Context2D()->setTextBaseline( - V8CanvasTextBaseline(V8CanvasTextBaseline::Enum::kBottom)); - Context2D()->setTextAlign(V8CanvasTextAlign(V8CanvasTextAlign::Enum::kRight)); - SetFillStyleString(Context2D(), GetScriptState(), "red"); - Context2D()->fillText("Bye", 4.0, 3.0); - EXPECT_EQ(INT64_C(-7631959002534825456), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -// TODO(crbug.com/1239374): Fix test on Android L and re-enable. -// TODO(crbug.com/1258605): Fix test on Windows and re-enable. -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) -#define MAYBE_IdentifiabilityStudyDigest_putImageData \ - DISABLED_IdentifiabilityStudyDigest_putImageData -#else -#define MAYBE_IdentifiabilityStudyDigest_putImageData \ - IdentifiabilityStudyDigest_putImageData -#endif // BUILDFLAG(IS_ANDROID) - -TEST_F(CanvasRenderingContext2DAPITest, - MAYBE_IdentifiabilityStudyDigest_putImageData) { - StudyParticipationRaii study_participation_raii; - CreateContext(kNonOpaque); - NonThrowableExceptionState exception_state; - - ImageData* image_data = - Context2D()->createImageData(/*sw=*/1, /*sh=*/1, exception_state); - EXPECT_FALSE(exception_state.HadException()); - Context2D()->putImageData(image_data, /*dx=*/1, /*dy=*/1, exception_state); - EXPECT_EQ(INT64_C(-4824069156106343739), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - -// TODO(crbug.com/1239374): Fix test on Android L and re-enable. -// TODO(crbug.com/1258605): Fix test on Windows and re-enable. -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) -#define MAYBE_IdentifiabilityStudyDigest_drawImage \ - DISABLED_IdentifiabilityStudyDigest_drawImage -#else -#define MAYBE_IdentifiabilityStudyDigest_drawImage \ - IdentifiabilityStudyDigest_drawImage -#endif // BUILDFLAG(IS_ANDROID) - -TEST_F(CanvasRenderingContext2DAPITest, - MAYBE_IdentifiabilityStudyDigest_drawImage) { - StudyParticipationRaii study_participation_raii; - CreateContext(kNonOpaque); - NonThrowableExceptionState exception_state; - - // We can use our own canvas as the image source! - auto* image_source = - MakeGarbageCollected<V8CanvasImageSource>(&CanvasElement()); - Context2D()->drawImage(image_source, /*x=*/1, - /*y=*/1, exception_state); - EXPECT_EQ(INT64_C(-4851825694092845811), - Context2D()->IdentifiableTextToken().ToUkmMetricValue()); - - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps()); - EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps()); - EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage()); -} - using testing::ElementsAre; using testing::IsNull; using testing::Pointee;
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.cc b/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.cc deleted file mode 100644 index 5065ff2..0000000 --- a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.cc +++ /dev/null
@@ -1,42 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" - -#include <cstdint> -#include <initializer_list> - -#include "base/containers/span.h" -#include "base/hash/legacy_hash.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" -#include "third_party/blink/renderer/platform/heap/visitor.h" - -namespace blink { - -// The maximum number of canvas context operations to incorportate into digest -// computation -- constant, but may be overridden by tests using -// IdentifiabilityStudyHelper::ScopedMaxOperationsSetter. -/*static*/ int IdentifiabilityStudyHelper::max_operations_ = 1 << 20; - -void IdentifiabilityStudyHelper::Trace(Visitor* visitor) const { - visitor->Trace(execution_context_); -} - -void IdentifiabilityStudyHelper::AddTokens( - std::initializer_list<IdentifiableToken> tokens) { - for (IdentifiableToken token : tokens) { - partial_[position_++] = token.ToUkmMetricValue(); - if (position_ == 8) { - chaining_value_ = DigestPartialData(); - position_ = 0; - } - } -} - -uint64_t IdentifiabilityStudyHelper::DigestPartialData() const { - return base::legacy::CityHash64WithSeed( - base::as_bytes(base::span(partial_).first(position_)), chaining_value_); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h b/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h deleted file mode 100644 index 6c71950..0000000 --- a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h +++ /dev/null
@@ -1,231 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_IDENTIFIABILITY_STUDY_HELPER_H_ -#define THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_IDENTIFIABILITY_STUDY_HELPER_H_ - -#include <stdint.h> - -#include <array> -#include <initializer_list> - -#include "base/compiler_specific.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" -#include "third_party/blink/renderer/core/execution_context/execution_context.h" -#include "third_party/blink/renderer/modules/modules_export.h" -#include "third_party/blink/renderer/platform/heap/forward.h" // IWYU pragma: keep (blink::Visitor) -#include "third_party/blink/renderer/platform/heap/member.h" -#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" - -// https://github.com/include-what-you-use/include-what-you-use/issues/1546 -// IWYU pragma: no_forward_declare internal::__thisIsHereToForceASemicolonAfterThisMacro - -// IWYU pragma: no_include "third_party/blink/renderer/platform/heap/visitor.h" - -namespace blink { - -// Text operations supported on different canvas types; the intent is to use -// these values (and any input supplied to these operations) to build a running -// hash that reprensents the sequence of text operations performed on the -// canvas. A hash of all other canvas operations is maintained by hashing the -// serialized PaintOps produced by the canvas in CanvasResourceProvider. -// -// If a canvas method to exfiltrate the canvas buffer is called by a script -// (getData(), etc.), this hash will be uploaded to UKM along with a hash of the -// canvas buffer data. -// -// **Don't renumber after the privacy budget study has started to ensure -// consistency.** -enum class CanvasOps { - // CanvasPath operations. - kClosePath = 0, - kMoveTo, - kLineTo, - kQuadradicCurveTo, - kBezierCurveTo, - kArcTo, - kArc, - kEllipse, - kRect, - // Path2D operations. - kAddPath, - // Canvas2DRecorderContext methods. - kSetStrokeStyle, - kSetFillStyle, - kSetLineWidth, - kSetLineCap, - kSetLineJoin, - kSetMiterLimit, - kSetLineDash, - kSetLineDashOffset, - kSetShadowOffsetX, - kSetShadowOffsetY, - kSetShadowBlur, - kSetShadowColor, - kSetGlobalAlpha, - kSetGlobalCompositeOpertion, - kSetFilter, - kSave, - kRestore, - kScale, - kRotate, - kTranslate, - kTransform, - kResetTransform, - kBeginPath, - kFill, - kFill__Path, - kStroke, - kStroke__Path, - kClip, - kClip__Path, - kClearRect, - kFillRect, - kStrokeRect, - kDrawImage, - kCreateLinearGradient, - kCreateRadialGradient, - kCreatePattern, - kPutImageData, - kSetImageSmoothingEnabled, - kSetImageSmoothingQuality, - kSetTextAlign, - kSetTextBaseline, - kReset, - // CanvasRenderingContext2D / OffscreenCanvasRenderingContext2D methods. - kSetFont, - kFillText, - kStrokeText, - kDrawFocusIfNeeded, // CanvasRenderingContext2D only. - // CanvasGradient methods. - kAddColorStop, -}; - -// A helper class to simplify maintaining the current text digest for the canvas -// context. An operation count is also maintained to limit the performance -// impact of the study. -class IdentifiabilityStudyHelper final { - DISALLOW_NEW(); - - public: - // UpdateBuilder() should be called iff ShouldUpdateBuilder() is true, to - // avoid unnecessary copies of parameters and hashing when GetToken() won't be - // called. - ALWAYS_INLINE bool ShouldUpdateBuilder() { - if (!is_canvas_type_allowed_) [[likely]] { - return false; - } - if (!execution_context_ || - execution_context_->IsInRequestAnimationFrame() || - operation_count_ >= max_operations_) { - encountered_skipped_ops_ = true; - return false; - } - return true; - } - - // Do *not* call this method if ShouldUpdateBuilder() is false -- updates - // the internal digest based on the series of digestable parameters. - template <typename... Ts> - void UpdateBuilder(Ts... tokens) { - AddTokens({tokens...}); - operation_count_++; - } - - // Returns an IdentifiableToken representing the internal computed digest. - IdentifiableToken GetToken() const { - if (position_ == 0) { - return chaining_value_; - } - return DigestPartialData(); - } - - [[nodiscard]] bool encountered_skipped_ops() const { - return encountered_skipped_ops_; - } - - [[nodiscard]] bool encountered_sensitive_ops() const { - return encountered_sensitive_ops_; - } - - [[nodiscard]] bool encountered_partially_digested_image() const { - return encountered_partially_digested_image_; - } - - void set_encountered_skipped_ops() { encountered_skipped_ops_ = true; } - - void set_encountered_sensitive_ops() { encountered_sensitive_ops_ = true; } - - void set_encountered_partially_digested_image() { - encountered_partially_digested_image_ = true; - } - - void SetExecutionContext(ExecutionContext* context) { - execution_context_ = context; - } - - ExecutionContext* execution_context() const { - return execution_context_.Get(); - } - - // For testing, allows scoped changing the max number of operations for all - // IdentifiabilityStudyHelper instances. - class ScopedMaxOperationsSetter { - public: - explicit ScopedMaxOperationsSetter(int new_value) - : old_max_operations_(IdentifiabilityStudyHelper::max_operations_) { - IdentifiabilityStudyHelper::max_operations_ = new_value; - } - ~ScopedMaxOperationsSetter() { - IdentifiabilityStudyHelper::max_operations_ = old_max_operations_; - } - - private: - const int old_max_operations_; - }; - - void Trace(Visitor* visitor) const; - - private: - // Note that primitives are implicitly converted to IdentifiableTokens. - void MODULES_EXPORT - AddTokens(std::initializer_list<IdentifiableToken> tokens); - - uint64_t MODULES_EXPORT DigestPartialData() const; - - const bool is_canvas_type_allowed_ = - IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kCanvasReadback); - - Member<ExecutionContext> execution_context_; - - static MODULES_EXPORT int max_operations_; - - int operation_count_ = 0; - - // If true, at least one op was skipped completely, for performance reasons. - bool encountered_skipped_ops_ = false; - - // If true, encountered at least one "sensitive" operation -- for instance, - // strings may contain PII, so we only use a 16-bit digest for such strings. - // - // This must be set manually by calling set_encountered_sensitive_ops(). - bool encountered_sensitive_ops_ = false; - - // If true, at least one op was partially-digested -- for instance, images - // drawn to the canvas have their width, height, etc. digested, but not the - // image contents, for performance and complexity reasons. - bool encountered_partially_digested_image_ = false; - - std::array<int64_t, 8> partial_; - wtf_size_t position_ = 0; - uint64_t chaining_value_ = IdentifiableTokenBuilder::kChainingValueSeed; -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_IDENTIFIABILITY_STUDY_HELPER_H_
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper_test.cc b/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper_test.cc deleted file mode 100644 index e90b64f..0000000 --- a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper_test.cc +++ /dev/null
@@ -1,82 +0,0 @@ -// Copyright 2024 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" - -#include <stdint.h> - -#include <array> - -#include "testing/gtest/include/gtest/gtest.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" - -// GoogleTest macros trigger a bug in IWYU: -// https://github.com/include-what-you-use/include-what-you-use/issues/1546 -// IWYU pragma: no_include <string> - -namespace blink { - -namespace { -constexpr uint64_t max_uint = UINT64_C(0xFFFFFFFFFFFFFFFF); -} - -TEST(IdentifiabilityStudyHelperTest, GetTokenTwice) { - IdentifiabilityStudyHelper helper; - helper.UpdateBuilder(1246); - EXPECT_EQ(helper.GetToken(), helper.GetToken()); -} - -TEST(IdentifiabilityStudyHelperTest, UpdateBuilderAfterGetToken) { - IdentifiabilityStudyHelper helper1; - IdentifiabilityStudyHelper helper2; - helper1.UpdateBuilder(1246); - helper2.UpdateBuilder(1246); - - helper1.GetToken(); - - helper1.UpdateBuilder(52); - helper2.UpdateBuilder(52); - EXPECT_EQ(helper1.GetToken(), helper1.GetToken()); -} - -TEST(IdentifiabilityStudyHelperTest, SameHashAsIdentifiableTokenBuilder_Empty) { - IdentifiableTokenBuilder builder; - IdentifiabilityStudyHelper helper; - EXPECT_EQ(helper.GetToken(), builder.GetToken()); -} - -TEST(IdentifiabilityStudyHelperTest, - SameHashAsIdentifiableTokenBuilder_Aligned) { - std::array<uint64_t, 8> tokens = {0, 1, max_uint, 45, 83, 123, 0, 3567}; - IdentifiabilityStudyHelper helper1; - IdentifiabilityStudyHelper helper2; - IdentifiableTokenBuilder builder; - helper1.UpdateBuilder(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], - tokens[5], tokens[6], tokens[7]); - for (uint64_t item : tokens) { - helper2.UpdateBuilder(item); - builder.AddToken(item); - } - EXPECT_EQ(helper1.GetToken(), builder.GetToken()); - EXPECT_EQ(helper2.GetToken(), builder.GetToken()); -} - -TEST(IdentifiabilityStudyHelperTest, - SameHashAsIdentifiableTokenBuilder_Unaligned) { - std::array<uint64_t, 10> tokens = {0, 1, max_uint, 45, 83, - 123, 0, 3567, max_uint, 2}; - IdentifiabilityStudyHelper helper1; - IdentifiabilityStudyHelper helper2; - IdentifiableTokenBuilder builder; - helper1.UpdateBuilder(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], - tokens[5], tokens[6], tokens[7], tokens[8], tokens[9]); - for (uint64_t item : tokens) { - helper2.UpdateBuilder(item); - builder.AddToken(item); - } - EXPECT_EQ(helper1.GetToken(), builder.GetToken()); - EXPECT_EQ(helper2.GetToken(), builder.GetToken()); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.cc index b3f776c3..22012936 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.cc
@@ -11,7 +11,6 @@ namespace blink { void Path2D::Trace(Visitor* visitor) const { - visitor->Trace(identifiability_study_helper_); visitor->Trace(context_); ScriptWrappable::Trace(visitor); CanvasPath::Trace(visitor);
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h b/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h index 9ab04bb..4410b10 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h
@@ -38,7 +38,6 @@ #include "third_party/blink/renderer/core/geometry/dom_matrix_read_only.h" #include "third_party/blink/renderer/core/svg/svg_path_utilities.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/geometry/path.h" @@ -89,10 +88,6 @@ !std::isfinite(matrix->m42())) return; GetModifiablePath().AddPath(path->GetPath(), matrix->GetAffineTransform()); - if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] { - identifiability_study_helper_.UpdateBuilder(CanvasOps::kAddPath, - path->GetIdentifiableToken()); - } } void Trace(Visitor*) const override; @@ -103,19 +98,16 @@ explicit Path2D(ScriptState* script_state) : context_(ExecutionContext::From(script_state)) { - identifiability_study_helper_.SetExecutionContext(context_.Get()); GetModifiablePath().SetIsVolatile(false); } Path2D(ScriptState* script_state, const Path& path) : CanvasPath(path), context_(ExecutionContext::From(script_state)) { - identifiability_study_helper_.SetExecutionContext(context_.Get()); GetModifiablePath().SetIsVolatile(false); } Path2D(ScriptState* script_state, Path2D* path) : Path2D(script_state, path->GetPath()) {} Path2D(ScriptState* script_state, const String& path_data) : context_(ExecutionContext::From(script_state)) { - identifiability_study_helper_.SetExecutionContext(context_.Get()); GetModifiablePath() = PathBuilder(BuildPathFromString(path_data)); GetModifiablePath().SetIsVolatile(false); }
diff --git a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc index a8b19ff1..4f9221c 100644 --- a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc +++ b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc
@@ -289,15 +289,12 @@ ImageBitmapFactories& ImageBitmapFactories::From(ExecutionContext& context) { ImageBitmapFactories* supplement = context.GetImageBitmapFactories(); if (!supplement) { - supplement = MakeGarbageCollected<ImageBitmapFactories>(context); + supplement = MakeGarbageCollected<ImageBitmapFactories>(); context.SetImageBitmapFactories(supplement); } return *supplement; } -ImageBitmapFactories::ImageBitmapFactories(ExecutionContext& context) - : execution_context_(context) {} - void ImageBitmapFactories::AddLoader(ImageBitmapLoader* loader) { pending_loaders_.insert(loader); } @@ -309,7 +306,6 @@ void ImageBitmapFactories::Trace(Visitor* visitor) const { visitor->Trace(pending_loaders_); - visitor->Trace(execution_context_); } ImageBitmapFactories::ImageBitmapLoader::ImageBitmapLoader(
diff --git a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h index 4d82de6..18176e2d 100644 --- a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h +++ b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h
@@ -66,7 +66,7 @@ public NameClient, public GarbageCollectedMixin { public: - explicit ImageBitmapFactories(ExecutionContext& context); + ImageBitmapFactories() = default; static ScriptPromise<ImageBitmap> CreateImageBitmap( ScriptState*, @@ -144,7 +144,6 @@ } private: - Member<ExecutionContext> execution_context_; static ScriptPromise<ImageBitmap> CreateImageBitmap( ScriptState*, ImageBitmapSource*,
diff --git a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc index 711a9e5..1f08d2f 100644 --- a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc
@@ -105,8 +105,6 @@ attrs, canvas->GetTopExecutionContext()->GetTaskRunner( TaskType::kInternalDefault)) { - identifiability_study_helper_.SetExecutionContext( - canvas->GetTopExecutionContext()); is_valid_size_ = Host()->IsValidImageSize(); ExecutionContext* execution_context = canvas->GetTopExecutionContext();
diff --git a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h index 2405ad36..0c3584b5 100644 --- a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h +++ b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h
@@ -13,12 +13,10 @@ #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context_factory.h" #include "third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h" -#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/graphics/canvas_2d_color_params.h" #include "third_party/blink/renderer/platform/graphics/canvas_resource_provider.h" #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h" -#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h" namespace blink { @@ -120,22 +118,6 @@ CanvasRenderingContextHost* GetCanvasRenderingContextHost() const override; ExecutionContext* GetTopExecutionContext() const override; - IdentifiableToken IdentifiableTextToken() const override { - return identifiability_study_helper_.GetToken(); - } - - bool IdentifiabilityEncounteredSkippedOps() const override { - return identifiability_study_helper_.encountered_skipped_ops(); - } - - bool IdentifiabilityEncounteredSensitiveOps() const override { - return identifiability_study_helper_.encountered_sensitive_ops(); - } - - bool IdentifiabilityEncounteredPartiallyDigestedImage() const override { - return identifiability_study_helper_.encountered_partially_digested_image(); - } - std::optional<cc::PaintRecord> FlushCanvas(FlushReason) override; protected:
diff --git a/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.cc b/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.cc index 44ac08a..81b2637 100644 --- a/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.cc +++ b/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.cc
@@ -43,7 +43,6 @@ PressureObserverManager::PressureObserverManager(ExecutionContext* context) : ExecutionContextLifecycleStateObserver(context), - execution_context_(*context), pressure_manager_(context) { UpdateStateIfNeeded(); for (const auto& source : PressureObserver::knownSources()) { @@ -105,7 +104,6 @@ visitor->Trace(pressure_manager_); visitor->Trace(source_to_client_); ExecutionContextLifecycleStateObserver::Trace(visitor); - visitor->Trace(execution_context_); } void PressureObserverManager::EnsureConnection(
diff --git a/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.h b/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.h index 2a0a428..7b98cad 100644 --- a/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.h +++ b/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.h
@@ -60,8 +60,6 @@ void DidAddClient(V8PressureSource::Enum, device::mojom::blink::PressureManagerAddClientResult); - Member<ExecutionContext> execution_context_; - // Connection to the browser side implementation. HeapMojoRemote<mojom::blink::WebPressureManager> pressure_manager_;
diff --git a/third_party/blink/renderer/modules/content_extraction/inner_html_agent.cc b/third_party/blink/renderer/modules/content_extraction/inner_html_agent.cc index 52a58b28..9c48aee 100644 --- a/third_party/blink/renderer/modules/content_extraction/inner_html_agent.cc +++ b/third_party/blink/renderer/modules/content_extraction/inner_html_agent.cc
@@ -31,8 +31,7 @@ } InnerHtmlAgent::InnerHtmlAgent(base::PassKey<InnerHtmlAgent>, LocalFrame& frame) - : Supplement<Document>(*frame.GetDocument()), - receiver_set_(this, frame.DomWindow()) {} + : document_(*frame.GetDocument()), receiver_set_(this, frame.DomWindow()) {} InnerHtmlAgent::~InnerHtmlAgent() = default; @@ -42,16 +41,16 @@ // a response to the user. receiver_set_.Add( std::move(receiver), - GetSupplementable()->GetTaskRunner(TaskType::kInternalUserInteraction)); + document_->GetTaskRunner(TaskType::kInternalUserInteraction)); } void InnerHtmlAgent::Trace(Visitor* visitor) const { + visitor->Trace(document_); visitor->Trace(receiver_set_); - Supplement<Document>::Trace(visitor); } void InnerHtmlAgent::GetInnerHtml(GetInnerHtmlCallback callback) { - LocalFrame* frame = GetSupplementable()->GetFrame(); + LocalFrame* frame = document_->GetFrame(); CHECK(frame); std::move(callback).Run(InnerHtmlBuilder::Build(*frame)); }
diff --git a/third_party/blink/renderer/modules/content_extraction/inner_html_agent.h b/third_party/blink/renderer/modules/content_extraction/inner_html_agent.h index c7a6af64..cb26eb8 100644 --- a/third_party/blink/renderer/modules/content_extraction/inner_html_agent.h +++ b/third_party/blink/renderer/modules/content_extraction/inner_html_agent.h
@@ -10,7 +10,6 @@ #include "third_party/blink/public/mojom/content_extraction/inner_html.mojom-blink.h" #include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h" #include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" -#include "third_party/blink/renderer/platform/supplementable.h" namespace blink { @@ -21,7 +20,7 @@ // to InnerHtmlBuilder to handle building of the text. class InnerHtmlAgent final : public GarbageCollected<InnerHtmlAgent>, public mojom::blink::InnerHtmlAgent, - public Supplement<Document> { + public GarbageCollectedMixin { public: static const unsigned kSupplementIndex; static InnerHtmlAgent* From(Document&); @@ -42,6 +41,7 @@ private: void Bind(mojo::PendingReceiver<mojom::blink::InnerHtmlAgent> receiver); + Member<Document> document_; HeapMojoReceiverSet<mojom::blink::InnerHtmlAgent, InnerHtmlAgent> receiver_set_; };
diff --git a/third_party/blink/renderer/modules/content_extraction/testing/internals_content_extraction.cc b/third_party/blink/renderer/modules/content_extraction/testing/internals_content_extraction.cc index c05a008..dac7007 100644 --- a/third_party/blink/renderer/modules/content_extraction/testing/internals_content_extraction.cc +++ b/third_party/blink/renderer/modules/content_extraction/testing/internals_content_extraction.cc
@@ -29,7 +29,6 @@ return nullptr; } - // AiPageContentAgent is a Supplement on Document. AIPageContentAgent* agent = AIPageContentAgent::GetOrCreateForTesting(document); if (!agent) {
diff --git a/third_party/blink/renderer/modules/cookie_store/global_cookie_store.cc b/third_party/blink/renderer/modules/cookie_store/global_cookie_store.cc index 5e6d9cdb..d1c7dfac 100644 --- a/third_party/blink/renderer/modules/cookie_store/global_cookie_store.cc +++ b/third_party/blink/renderer/modules/cookie_store/global_cookie_store.cc
@@ -70,8 +70,6 @@ // static CookieStore* GlobalCookieStore::cookieStore(ServiceWorkerGlobalScope& worker) { - // ServiceWorkerGlobalScope is Supplementable<WorkerGlobalScope>, not - // Supplementable<ServiceWorkerGlobalScope>. return GlobalCookieStoreImpl<WorkerGlobalScope>::From(worker).GetCookieStore( worker); }
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h index a3d58015..3bb310e 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h
@@ -36,8 +36,7 @@ : public GarbageCollected<PaintWorkletProxyClient>, public PaintWorkletPainter { public: - // blink::Supplement hook to retrieve the PaintWorkletProxyClient for a given - // WorkerClients. + // Hook to etrieve the PaintWorkletProxyClient for a given WorkerClients. static PaintWorkletProxyClient* From(WorkerClients*);
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.cc b/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.cc index 66a9b4d..7fb1027 100644 --- a/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.cc +++ b/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.cc
@@ -23,13 +23,10 @@ } FileSystemAccessManager::FileSystemAccessManager(ExecutionContext* context) - : ExecutionContextClient(context), - execution_context_(*context), - remote_(context) {} + : ExecutionContextClient(context), remote_(context) {} void FileSystemAccessManager::Trace(Visitor* visitor) const { visitor->Trace(remote_); - visitor->Trace(execution_context_); ExecutionContextClient::Trace(visitor); }
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.h b/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.h index 73504917..8872dfc8 100644 --- a/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.h +++ b/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.h
@@ -43,7 +43,6 @@ void EnsureConnection(); - Member<ExecutionContext> execution_context_; HeapMojoRemote<mojom::blink::FileSystemAccessManager> remote_; };
diff --git a/third_party/blink/renderer/modules/media_capabilities/BUILD.gn b/third_party/blink/renderer/modules/media_capabilities/BUILD.gn index d7fcaa4..830b332 100644 --- a/third_party/blink/renderer/modules/media_capabilities/BUILD.gn +++ b/third_party/blink/renderer/modules/media_capabilities/BUILD.gn
@@ -10,8 +10,6 @@ sources = [ "media_capabilities.cc", "media_capabilities.h", - "media_capabilities_identifiability_metrics.cc", - "media_capabilities_identifiability_metrics.h", ] deps = [ "//media",
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc index 43351115..a022e99 100644 --- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc +++ b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc
@@ -54,7 +54,6 @@ #include "third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.h" #include "third_party/blink/renderer/modules/encryptedmedia/media_key_system_access.h" #include "third_party/blink/renderer/modules/encryptedmedia/media_key_system_access_initializer_base.h" -#include "third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.h" #include "third_party/blink/renderer/modules/media_capabilities_names.h" #include "third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" @@ -153,8 +152,6 @@ ScriptState* script_state, const MediaDecodingConfiguration* config) { MediaCapabilitiesDecodingInfo* info = CreateDecodingInfoWith(value); - media_capabilities_identifiability_metrics::ReportDecodingInfoResult( - ExecutionContext::From(script_state), config, info); return ToResolvedPromise<MediaCapabilitiesDecodingInfo>(script_state, info); } @@ -769,12 +766,10 @@ MediaCapabilities::PendingCallbackState::PendingCallbackState( ScriptPromiseResolverBase* resolver, MediaKeySystemAccess* access, - const base::TimeTicks& request_time, - std::optional<IdentifiableToken> input_token) + const base::TimeTicks& request_time) : resolver(resolver), key_system_access(access), - request_time(request_time), - input_token(input_token) {} + request_time(request_time) {} void MediaCapabilities::PendingCallbackState::Trace( blink::Visitor* visitor) const { @@ -823,7 +818,7 @@ pending_cb_map_.insert( callback_id, MakeGarbageCollected<MediaCapabilities::PendingCallbackState>( - resolver, nullptr, request_time, std::nullopt)); + resolver, nullptr, request_time)); std::optional<webrtc::SdpAudioFormat> sdp_audio_format = config->hasAudio() @@ -902,8 +897,6 @@ // MediaKeySystemAccess. MediaCapabilitiesDecodingInfo* info = CreateEncryptedDecodingInfoWith(false, nullptr); - media_capabilities_identifiability_metrics::ReportDecodingInfoResult( - ExecutionContext::From(script_state), config, info); return ToResolvedPromise<MediaCapabilitiesDecodingInfo>(script_state, info); } @@ -1055,7 +1048,7 @@ pending_cb_map_.insert( callback_id, MakeGarbageCollected<MediaCapabilities::PendingCallbackState>( - resolver, nullptr, request_time, std::nullopt)); + resolver, nullptr, request_time)); std::optional<webrtc::SdpAudioFormat> sdp_audio_format = config->hasAudio() @@ -1322,8 +1315,6 @@ // Audio-only is always smooth and power efficient. MediaCapabilitiesDecodingInfo* info = CreateDecodingInfoWith(true); info->setKeySystemAccess(access); - media_capabilities_identifiability_metrics::ReportDecodingInfoResult( - execution_context, decoding_config, info); resolver->Resolve(info); return; } @@ -1342,8 +1333,6 @@ if (!EnsurePerfHistoryService(execution_context)) { MediaCapabilitiesDecodingInfo* info = CreateDecodingInfoWith(true); - media_capabilities_identifiability_metrics::ReportDecodingInfoResult( - execution_context, decoding_config, info); resolver->Resolve(WrapPersistent(info)); return; } @@ -1352,9 +1341,7 @@ pending_cb_map_.insert( callback_id, MakeGarbageCollected<MediaCapabilities::PendingCallbackState>( - resolver, access, request_time, - media_capabilities_identifiability_metrics:: - ComputeDecodingInfoInputToken(decoding_config))); + resolver, access, request_time)); media::mojom::blink::PredictionFeaturesPtr features = media::mojom::blink::PredictionFeatures::New( @@ -1506,8 +1493,6 @@ process_time); } - media_capabilities_identifiability_metrics::ReportDecodingInfoResult( - execution_context, pending_cb->input_token, info); pending_cb->resolver->DowncastTo<MediaCapabilitiesDecodingInfo>()->Resolve( std::move(info)); pending_cb_map_.erase(callback_id);
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h index 343cab0..97716d05d 100644 --- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h +++ b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h
@@ -12,7 +12,6 @@ #include "media/base/video_color_space.h" #include "media/mojo/mojom/video_decode_perf_history.mojom-blink.h" #include "media/mojo/mojom/webrtc_video_perf.mojom-blink.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_video_configuration.h" @@ -69,8 +68,7 @@ public: PendingCallbackState(ScriptPromiseResolverBase* resolver, MediaKeySystemAccess* access, - const base::TimeTicks& request_time, - std::optional<IdentifiableToken> input_token); + const base::TimeTicks& request_time); virtual void Trace(blink::Visitor* visitor) const; Member<ScriptPromiseResolverBase> resolver; @@ -83,7 +81,6 @@ std::optional<bool> is_gpu_factories_supported; std::optional<bool> is_builtin_video_codec; base::TimeTicks request_time; - std::optional<IdentifiableToken> input_token; }; FRIEND_TEST_ALL_PREFIXES(MediaCapabilitiesTests,
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.cc b/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.cc deleted file mode 100644 index 10ef0147..0000000 --- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.cc +++ /dev/null
@@ -1,294 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.h" - -#include "base/bit_cast.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_audio_configuration.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_key_system_track_configuration.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_media_capabilities_decoding_info.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_media_capabilities_key_system_configuration.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_media_decoding_configuration.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_media_key_system_access.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_media_key_system_configuration.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_media_key_system_media_capability.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_video_configuration.h" -#include "third_party/blink/renderer/core/execution_context/execution_context.h" -#include "third_party/blink/renderer/modules/encryptedmedia/media_key_system_access.h" -#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h" - -namespace blink { -namespace media_capabilities_identifiability_metrics { -namespace { - -bool IsDecodingInfoTypeAllowed() { - return IdentifiabilityStudySettings::Get()->ShouldSampleType( - IdentifiableSurface::Type::kMediaCapabilities_DecodingInfo); -} - -bool ShouldSampleDecodingInfoType() { - return IdentifiabilityStudySettings::Get()->ShouldSampleType( - IdentifiableSurface::Type::kMediaCapabilities_DecodingInfo); -} - -void RecordDecodingIdentifiabilityMetric(ExecutionContext* context, - IdentifiableToken input_token, - IdentifiableToken output_token) { - DCHECK(IsDecodingInfoTypeAllowed()); - IdentifiabilityMetricBuilder(context->UkmSourceID()) - .Add(IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kMediaCapabilities_DecodingInfo, - input_token), - output_token) - .Record(context->UkmRecorder()); -} - -// The various ComputeToken methods create digests of each of the objects, -// returning the special empty value when an input is nullptr. -IdentifiableToken ComputeToken(const VideoConfiguration* configuration) { - DCHECK(IsDecodingInfoTypeAllowed()); - if (!configuration) - return IdentifiableToken(); - - // `IdentifiableTokenBuilder::AddValue()` requires - // `std::has_unique_object_representations_v<>`, which doesn't hold for - // floating-point values. Work around by reinterpreting as an integral type of - // the same size, without changing the underlying bit pattern. - static_assert(sizeof(decltype(configuration->framerate())) == - sizeof(int64_t)); - IdentifiableTokenBuilder builder; - builder - .AddToken(IdentifiabilityBenignStringToken(configuration->contentType())) - .AddValue(configuration->width()) - .AddValue(configuration->height()) - .AddValue(configuration->bitrate()) - .AddValue(base::bit_cast<int64_t>(configuration->framerate())); - - // While the above are always present, we need to check the other properties' - // presence explicitly. - builder.AddValue(configuration->hasHdrMetadataType()) - .AddValue(configuration->hasColorGamut()) - .AddValue(configuration->hasTransferFunction()) - .AddValue(configuration->hasScalabilityMode()); - if (configuration->hasHdrMetadataType()) { - builder.AddToken(IdentifiabilityBenignStringToken( - configuration->hdrMetadataType().AsString())); - } - if (configuration->hasColorGamut()) { - builder.AddToken(IdentifiabilityBenignStringToken( - configuration->colorGamut().AsString())); - } - if (configuration->hasTransferFunction()) { - builder.AddToken(IdentifiabilityBenignStringToken( - configuration->transferFunction().AsString())); - } - if (configuration->hasScalabilityMode()) { - builder.AddToken( - IdentifiabilityBenignStringToken(configuration->scalabilityMode())); - } - return builder.GetToken(); -} - -IdentifiableToken ComputeToken(const AudioConfiguration* configuration) { - DCHECK(IsDecodingInfoTypeAllowed()); - if (!configuration) - return IdentifiableToken(); - - IdentifiableTokenBuilder builder; - builder.AddToken( - IdentifiabilityBenignStringToken(configuration->contentType())); - - // While the strings above will be null if not present, we need to check - // the presence of numerical types explicitly. - builder.AddValue(configuration->hasChannels()) - .AddValue(configuration->hasBitrate()) - .AddValue(configuration->hasSamplerate()); - if (configuration->hasChannels()) { - builder.AddToken( - IdentifiabilityBenignStringToken(configuration->channels())); - } - if (configuration->hasBitrate()) - builder.AddValue(configuration->bitrate()); - if (configuration->hasSamplerate()) - builder.AddValue(configuration->samplerate()); - return builder.GetToken(); -} - -IdentifiableToken ComputeToken( - const KeySystemTrackConfiguration* configuration) { - DCHECK(IsDecodingInfoTypeAllowed()); - if (!configuration) - return IdentifiableToken(); - - IdentifiableTokenBuilder builder; - builder.AddToken( - IdentifiabilityBenignStringToken(configuration->robustness())); - return builder.GetToken(); -} - -IdentifiableToken ComputeToken( - const MediaKeySystemMediaCapability* capability) { - DCHECK(IsDecodingInfoTypeAllowed()); - if (!capability) - return IdentifiableToken(); - - IdentifiableTokenBuilder builder; - builder.AddToken(IdentifiabilityBenignStringToken(capability->contentType())) - .AddToken(IdentifiabilityBenignStringToken(capability->robustness())) - .AddToken( - IdentifiabilityBenignStringToken(capability->encryptionScheme())); - return builder.GetToken(); -} - -IdentifiableToken ComputeToken( - const MediaKeySystemConfiguration* configuration) { - DCHECK(IsDecodingInfoTypeAllowed()); - if (!configuration) - return IdentifiableToken(); - - IdentifiableTokenBuilder builder; - builder.AddToken(IdentifiabilityBenignStringToken(configuration->label())) - .AddValue(configuration->hasInitDataTypes()) - .AddValue(configuration->hasAudioCapabilities()) - .AddValue(configuration->hasVideoCapabilities()) - .AddToken(IdentifiabilityBenignStringToken( - configuration->distinctiveIdentifier().AsString())) - .AddToken(IdentifiabilityBenignStringToken( - configuration->persistentState().AsString())) - .AddValue(configuration->hasSessionTypes()); - if (configuration->hasInitDataTypes()) { - builder.AddToken( - IdentifiabilityBenignStringVectorToken(configuration->initDataTypes())); - } - if (configuration->hasAudioCapabilities()) { - const HeapVector<Member<MediaKeySystemMediaCapability>>& - audio_capabilities = configuration->audioCapabilities(); - builder.AddValue(audio_capabilities.size()); - for (const auto& elem : audio_capabilities) - builder.AddToken(ComputeToken(elem.Get())); - } - if (configuration->hasVideoCapabilities()) { - const HeapVector<Member<MediaKeySystemMediaCapability>>& - video_capabilities = configuration->videoCapabilities(); - builder.AddValue(video_capabilities.size()); - for (const auto& elem : video_capabilities) - builder.AddToken(ComputeToken(elem.Get())); - } - if (configuration->hasSessionTypes()) { - builder.AddToken( - IdentifiabilityBenignStringVectorToken(configuration->sessionTypes())); - } - return builder.GetToken(); -} - -IdentifiableToken ComputeToken(const MediaKeySystemAccess* access) { - DCHECK(IsDecodingInfoTypeAllowed()); - if (!access) - return IdentifiableToken(); - - IdentifiableTokenBuilder builder; - builder.AddToken(IdentifiabilityBenignStringToken(access->keySystem())) - .AddToken(ComputeToken(access->getConfiguration())); - return builder.GetToken(); -} - -IdentifiableToken ComputeToken( - const MediaCapabilitiesKeySystemConfiguration* configuration) { - DCHECK(IsDecodingInfoTypeAllowed()); - if (!configuration) - return IdentifiableToken(); - - IdentifiableTokenBuilder builder; - builder.AddToken(IdentifiabilityBenignStringToken(configuration->keySystem())) - .AddToken(IdentifiabilityBenignStringToken(configuration->initDataType())) - .AddToken(IdentifiabilityBenignStringToken( - configuration->distinctiveIdentifier().AsString())) - .AddToken(IdentifiabilityBenignStringToken( - configuration->persistentState().AsString())) - .AddValue(configuration->hasSessionTypes()) - .AddValue(configuration->hasAudio()) - .AddValue(configuration->hasVideo()); - if (configuration->hasSessionTypes()) { - builder.AddToken( - IdentifiabilityBenignStringVectorToken(configuration->sessionTypes())); - } - if (configuration->hasAudio()) - builder.AddToken(ComputeToken(configuration->audio())); - if (configuration->hasVideo()) - builder.AddToken(ComputeToken(configuration->video())); - return builder.GetToken(); -} - -IdentifiableToken ComputeToken( - const MediaDecodingConfiguration* configuration) { - DCHECK(IsDecodingInfoTypeAllowed()); - if (!configuration) - return IdentifiableToken(); - - IdentifiableTokenBuilder builder; - builder - .AddToken( - IdentifiabilityBenignStringToken(configuration->type().AsString())) - .AddValue(configuration->hasKeySystemConfiguration()) - .AddValue(configuration->hasAudio()) - .AddValue(configuration->hasVideo()); - if (configuration->hasKeySystemConfiguration()) - builder.AddToken(ComputeToken(configuration->keySystemConfiguration())); - if (configuration->hasAudio()) - builder.AddToken(ComputeToken(configuration->audio())); - if (configuration->hasVideo()) - builder.AddToken(ComputeToken(configuration->video())); - return builder.GetToken(); -} - -IdentifiableToken ComputeToken(const MediaCapabilitiesDecodingInfo* info) { - DCHECK(IsDecodingInfoTypeAllowed()); - if (!info) - return IdentifiableToken(); - - IdentifiableTokenBuilder builder; - builder.AddValue(info->supported()) - .AddValue(info->smooth()) - .AddValue(info->powerEfficient()) - .AddToken(ComputeToken(info->keySystemAccess())); - return builder.GetToken(); -} - -} // namespace - -void ReportDecodingInfoResult(ExecutionContext* context, - const MediaDecodingConfiguration* input, - const MediaCapabilitiesDecodingInfo* output) { - if (!IsDecodingInfoTypeAllowed() || !ShouldSampleDecodingInfoType()) - return; - - RecordDecodingIdentifiabilityMetric(context, ComputeToken(input), - ComputeToken(output)); -} - -void ReportDecodingInfoResult(ExecutionContext* context, - std::optional<IdentifiableToken> input_token, - const MediaCapabilitiesDecodingInfo* output) { - DCHECK_EQ(IsDecodingInfoTypeAllowed(), input_token.has_value()); - if (!input_token.has_value() || !ShouldSampleDecodingInfoType()) - return; - - RecordDecodingIdentifiabilityMetric(context, input_token.value(), - IdentifiableToken()); -} - -std::optional<IdentifiableToken> ComputeDecodingInfoInputToken( - const MediaDecodingConfiguration* input) { - if (!IsDecodingInfoTypeAllowed() || !ShouldSampleDecodingInfoType()) - return std::nullopt; - - return ComputeToken(input); -} - -} // namespace media_capabilities_identifiability_metrics -} // namespace blink
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.h b/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.h deleted file mode 100644 index 3c914553..0000000 --- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.h +++ /dev/null
@@ -1,48 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_MEDIA_CAPABILITIES_IDENTIFIABILITY_METRICS_H_ -#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_MEDIA_CAPABILITIES_IDENTIFIABILITY_METRICS_H_ - -#include <optional> - -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" - -namespace blink { - -class ExecutionContext; -class MediaCapabilitiesDecodingInfo; -class MediaDecodingConfiguration; - -// Defines methods used to emit UKM events for the identifiability study to -// determine whether MediaCapabilities::decodingInfo() calls can be used for -// fingerprinting users and, if so, how much entropy is exposed by the API. Only -// emits these events when the study is active. -namespace media_capabilities_identifiability_metrics { - -// Reports that a call to decodingInfo() occurred that had the given |input|, -// resulted in |output| and was performed on the |context|. -void ReportDecodingInfoResult(ExecutionContext*, - const MediaDecodingConfiguration*, - const MediaCapabilitiesDecodingInfo*); - -// Reports that a call to decodingInfo() occurred that had an input with a -// digest of |input_token.value()|, resulted in |output| and was performed on -// the |context|. However, |input_token| should be std::nullopt if the study -// is not active. These calls should be used when the input object may have -// been destroyed by the time the output is determined. See -// ComputeDecodingInfoInputToken below. -void ReportDecodingInfoResult(ExecutionContext*, - std::optional<IdentifiableToken>, - const MediaCapabilitiesDecodingInfo*); - -// Returns a digest of the |input| for use in ReportDecodingInfoResult() -// above. Returns std::nullopt if the identifiability study is not active. -std::optional<IdentifiableToken> ComputeDecodingInfoInputToken( - const MediaDecodingConfiguration*); - -} // namespace media_capabilities_identifiability_metrics -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_MEDIA_CAPABILITIES_IDENTIFIABILITY_METRICS_H_
diff --git a/third_party/blink/renderer/modules/mediarecorder/media_recorder.cc b/third_party/blink/renderer/modules/mediarecorder/media_recorder.cc index 93c73a9..49e7e03 100644 --- a/third_party/blink/renderer/modules/mediarecorder/media_recorder.cc +++ b/third_party/blink/renderer/modules/mediarecorder/media_recorder.cc
@@ -8,9 +8,6 @@ #include <limits> #include "base/time/time.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/renderer/bindings/core/v8/dictionary.h" @@ -33,7 +30,6 @@ #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_descriptor.h" #include "third_party/blink/renderer/platform/network/mime/content_type.h" -#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/text/strcat.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -406,16 +402,6 @@ bool result = handler->CanSupportMimeType( content_type.GetType(), content_type.Parameter("codecs"), MediaRecorderHandler::CanSupportMimeTypeCaller::kIsTypeSupported); - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kMediaRecorder_IsTypeSupported)) { - blink::IdentifiabilityMetricBuilder(context->UkmSourceID()) - .Add(blink::IdentifiableSurface::FromTypeAndToken( - blink::IdentifiableSurface::Type:: - kMediaRecorder_IsTypeSupported, - IdentifiabilityBenignStringToken(type)), - result) - .Record(context->UkmRecorder()); - } return result; }
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.cc b/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.cc index df01868..ce8c33d 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.cc
@@ -127,7 +127,6 @@ RtcTransportDependencies::RtcTransportDependencies(ExecutionContext& context, PassKey) : ExecutionContextLifecycleObserver(&context), - execution_context_(context), p2p_socket_dispatcher_(P2PSocketDispatcher::From(context)), webrtc_environment_(webrtc::EnvironmentFactory().Create()) { // Start initialization on the network thread. @@ -230,7 +229,6 @@ } void RtcTransportDependencies::Trace(Visitor* visitor) const { - visitor->Trace(execution_context_); ExecutionContextLifecycleObserver::Trace(visitor); visitor->Trace(p2p_socket_dispatcher_); }
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.h b/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.h index dd6042b..f969013 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.h +++ b/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.h
@@ -53,7 +53,6 @@ Vector<base::OnceClosure> initialized_callback_list_; void RunOnceInitialized(base::OnceClosure initialized_callback); - Member<ExecutionContext> execution_context_; Member<P2PSocketDispatcher> p2p_socket_dispatcher_; std::unique_ptr<IpcNetworkManager> network_manager_; std::unique_ptr<IpcPacketSocketFactory> socket_factory_;
diff --git a/third_party/blink/renderer/modules/presentation/presentation_controller.h b/third_party/blink/renderer/modules/presentation/presentation_controller.h index 026f2285..fff263c4 100644 --- a/third_party/blink/renderer/modules/presentation/presentation_controller.h +++ b/third_party/blink/renderer/modules/presentation/presentation_controller.h
@@ -45,7 +45,7 @@ static PresentationController* From(LocalDOMWindow&); static PresentationController* FromContext(ExecutionContext*); - // Implementation of Supplement. + // Implementation of GarbageCollectedMixin. void Trace(Visitor*) const override; // Called by the Presentation object to advertize itself to the controller.
diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis.cc b/third_party/blink/renderer/modules/speech/speech_synthesis.cc index a2b1584..764b01b 100644 --- a/third_party/blink/renderer/modules/speech/speech_synthesis.cc +++ b/third_party/blink/renderer/modules/speech/speech_synthesis.cc
@@ -28,10 +28,6 @@ #include <tuple> #include "build/build_config.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h" #include "third_party/blink/public/platform/browser_interface_broker_proxy.h" #include "third_party/blink/public/platform/platform.h" @@ -48,7 +44,6 @@ #include "third_party/blink/renderer/modules/speech/speech_synthesis_event.h" #include "third_party/blink/renderer/modules/speech/speech_synthesis_voice.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" -#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h" namespace blink { @@ -100,32 +95,9 @@ const HeapVector<Member<SpeechSynthesisVoice>>& SpeechSynthesis::getVoices() { // Kick off initialization here to ensure voice list gets populated. std::ignore = TryEnsureMojomSynthesis(); - RecordVoicesForIdentifiability(); return voice_list_; } -void SpeechSynthesis::RecordVoicesForIdentifiability() const { - constexpr IdentifiableSurface surface = IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kWebFeature, - WebFeature::kSpeechSynthesis_GetVoices_Method); - if (!IdentifiabilityStudySettings::Get()->ShouldSampleSurface(surface)) - return; - if (!local_dom_window_->GetFrame()) { - return; - } - - IdentifiableTokenBuilder builder; - for (const auto& voice : voice_list_) { - builder.AddToken(IdentifiabilityBenignStringToken(voice->voiceURI())); - builder.AddToken(IdentifiabilityBenignStringToken(voice->lang())); - builder.AddToken(IdentifiabilityBenignStringToken(voice->name())); - builder.AddToken(voice->localService()); - } - IdentifiabilityMetricBuilder(local_dom_window_->UkmSourceID()) - .Add(surface, builder.GetToken()) - .Record(local_dom_window_->UkmRecorder()); -} - bool SpeechSynthesis::Speaking() const { // If we have a current speech utterance, then that means we're assumed to be // in a speaking state. This state is independent of whether the utterance
diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis.h b/third_party/blink/renderer/modules/speech/speech_synthesis.h index f3aa894d..736a316 100644 --- a/third_party/blink/renderer/modules/speech/speech_synthesis.h +++ b/third_party/blink/renderer/modules/speech/speech_synthesis.h
@@ -131,8 +131,6 @@ bool IsAllowedToStartByAutoplay() const; - void RecordVoicesForIdentifiability() const; - void SetMojomSynthesisForTesting( mojo::PendingRemote<mojom::blink::SpeechSynthesis>); mojom::blink::SpeechSynthesis* TryEnsureMojomSynthesis();
diff --git a/third_party/blink/renderer/modules/webcodecs/background_readback.cc b/third_party/blink/renderer/modules/webcodecs/background_readback.cc index 3ca7b90..050050da 100644 --- a/third_party/blink/renderer/modules/webcodecs/background_readback.cc +++ b/third_party/blink/renderer/modules/webcodecs/background_readback.cc
@@ -90,10 +90,8 @@ THREAD_CHECKER(thread_checker_); }; -BackgroundReadback::BackgroundReadback(base::PassKey<BackgroundReadback> key, - ExecutionContext& context) - : execution_context_(context), - sync_readback_impl_(base::MakeRefCounted<SyncReadbackThread>()), +BackgroundReadback::BackgroundReadback(base::PassKey<BackgroundReadback> key) + : sync_readback_impl_(base::MakeRefCounted<SyncReadbackThread>()), worker_task_runner_(base::ThreadPool::CreateSingleThreadTaskRunner( {base::WithBaseSyncPrimitives()}, base::SingleThreadTaskRunnerThreadMode::DEDICATED)) {} @@ -107,7 +105,7 @@ BackgroundReadback* supplement = context.GetBackgroundReadback(); if (!supplement) { supplement = MakeGarbageCollected<BackgroundReadback>( - base::PassKey<BackgroundReadback>(), context); + base::PassKey<BackgroundReadback>()); context.SetBackgroundReadback(supplement); } return supplement;
diff --git a/third_party/blink/renderer/modules/webcodecs/background_readback.h b/third_party/blink/renderer/modules/webcodecs/background_readback.h index 2cd7ea73..9ea59558 100644 --- a/third_party/blink/renderer/modules/webcodecs/background_readback.h +++ b/third_party/blink/renderer/modules/webcodecs/background_readback.h
@@ -33,8 +33,7 @@ base::OnceCallback<void(scoped_refptr<media::VideoFrame>)>; using ReadbackDoneCallback = base::OnceCallback<void(bool)>; - explicit BackgroundReadback(base::PassKey<BackgroundReadback> key, - ExecutionContext& context); + explicit BackgroundReadback(base::PassKey<BackgroundReadback> key); virtual ~BackgroundReadback(); static BackgroundReadback* From(ExecutionContext& context); @@ -50,9 +49,7 @@ base::span<uint8_t> dest_buffer, ReadbackDoneCallback done_cb); - void Trace(Visitor* visitor) const override { - visitor->Trace(execution_context_); - } + void Trace(Visitor* visitor) const override {} private: void ReadbackOnThread(scoped_refptr<media::VideoFrame> txt_frame, @@ -89,8 +86,6 @@ ReadbackDoneCallback done_cb, bool success); - Member<ExecutionContext> execution_context_; - // Lives and dies on the worker thread. scoped_refptr<SyncReadbackThread> sync_readback_impl_; scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner_;
diff --git a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc index 92b0202..a16140f 100644 --- a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc
@@ -11,9 +11,6 @@ #include "base/numerics/checked_math.h" #include "base/numerics/safe_conversions.h" #include "gpu/command_buffer/client/gles2_interface.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" -#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" #include "third_party/blink/public/platform/web_graphics_context_3d_provider.h" #include "third_party/blink/renderer/bindings/modules/v8/webgl_any.h" #include "third_party/blink/renderer/core/dom/document.h" @@ -656,7 +653,6 @@ auto values = base::HeapArray<GLint>::WithSize(length); ContextGL()->GetInternalformativ(target, internalformat, GL_SAMPLES, length, values.data()); - RecordInternalFormatParameter(internalformat, values.data(), length); return WebGLAny(script_state, DOMInt32Array::Create(values)); } default: @@ -666,30 +662,6 @@ } } -// TODO(crbug.com/351564777): should be UNSAFE_BUFFER_USAGE. -void WebGL2RenderingContextBase::RecordInternalFormatParameter( - GLenum internalformat, - GLint* values, - GLint length) { - if (!IdentifiabilityStudySettings::Get()->ShouldSampleType( - IdentifiableSurface::Type::kWebGLInternalFormatParameter)) - return; - // SAFETY: required from caller. - const base::span<GLint> values_span = - UNSAFE_BUFFERS(base::span(values, base::checked_cast<size_t>(length))); - const auto& ukm_params = GetUkmParameters(); - IdentifiableTokenBuilder builder; - for (const auto& value : values_span) { - builder.AddValue(value); - } - IdentifiabilityMetricBuilder(ukm_params.source_id) - .Add(IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kWebGLInternalFormatParameter, - internalformat), - builder.GetToken()) - .Record(ukm_params.ukm_recorder); -} - bool WebGL2RenderingContextBase::CheckAndTranslateAttachments( const char* function_name, GLenum target,
diff --git a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.h index 88a9ccfd..b50684b6 100644 --- a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.h +++ b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.h
@@ -1088,11 +1088,6 @@ GLint pack_skip_rows_; GLint unpack_image_height_; GLint unpack_skip_images_; - - private: - void RecordInternalFormatParameter(GLenum internalformat, - GLint* values, - GLint length); }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc index bd9a720f..a885d13bf 100644 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -52,8 +52,6 @@ #include "media/base/video_frame.h" #include "media/renderers/paint_canvas_video_renderer.h" #include "third_party/blink/public/common/features.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" -#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h" #include "third_party/blink/public/mojom/gpu/gpu.mojom-blink.h" #include "third_party/blink/public/platform/platform.h" @@ -145,7 +143,6 @@ #include "third_party/blink/renderer/platform/heap/disallow_new_wrapper.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/member.h" -#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" @@ -1009,17 +1006,6 @@ } make_xr_compatible_resolver_ = nullptr; - - if (IdentifiabilityStudySettings::Get()->ShouldSampleSurface( - IdentifiableSurface::FromTypeAndToken( - IdentifiableSurface::Type::kWebFeature, - WebFeature::kWebGLRenderingContextMakeXRCompatible))) { - const auto& ukm_params = GetUkmParameters(); - IdentifiabilityMetricBuilder(ukm_params.source_id) - .AddWebFeature(WebFeature::kWebGLRenderingContextMakeXRCompatible, - exception_code == DOMExceptionCode::kNoError) - .Record(ukm_params.ukm_recorder); - } } } @@ -3768,93 +3754,6 @@ return ScriptValue::CreateNull(script_state->GetIsolate()); } -namespace { - -// WebGL parameters which can be used to identify users. -// These parameters should each be uniquely defined, -// see third_party/khronos/GLES2/gl2.h for their definitions. -static const GLenum kIdentifiableGLParams[] = { - // getParameter() - GL_ALIASED_LINE_WIDTH_RANGE, // GetWebGLFloatArrayParameter - GL_ALIASED_POINT_SIZE_RANGE, // GetWebGLFloatArrayParameter - GL_ALPHA_BITS, // GetIntParameter - GL_BLUE_BITS, // GetIntParameter - GL_DEPTH_BITS, // GetIntParameter - GL_GREEN_BITS, // GetIntParameter - GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, // GetIntParameter - GL_MAX_CUBE_MAP_TEXTURE_SIZE, // GetIntParameter - GL_MAX_FRAGMENT_UNIFORM_VECTORS, // GetIntParameter - GL_MAX_RENDERBUFFER_SIZE, // GetIntParameter - GL_MAX_TEXTURE_IMAGE_UNITS, // GetIntParameter - GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, // GetFloatParameter - GL_MAX_TEXTURE_SIZE, // GetIntParameter - GL_MAX_VARYING_VECTORS, // GetIntParameter - GL_MAX_VERTEX_ATTRIBS, // GetIntParameter - GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, // GetIntParameter - GL_MAX_VERTEX_UNIFORM_VECTORS, // GetIntParameter - GL_MAX_VIEWPORT_DIMS, // GetWebGLIntArrayParameter - GL_RED_BITS, // GetIntParameter - GL_SHADING_LANGUAGE_VERSION, - GL_STENCIL_BITS, // GetIntParameter - GL_VERSION, - WebGLDebugRendererInfo::kUnmaskedRendererWebgl, - WebGLDebugRendererInfo::kUnmaskedVendorWebgl, - - // getRenderBufferParameter() - GL_RENDERBUFFER_GREEN_SIZE, - GL_RENDERBUFFER_BLUE_SIZE, - GL_RENDERBUFFER_RED_SIZE, - GL_RENDERBUFFER_ALPHA_SIZE, - GL_RENDERBUFFER_DEPTH_SIZE, - GL_RENDERBUFFER_STENCIL_SIZE, - GL_RENDERBUFFER_SAMPLES, -}; - -bool ShouldMeasureGLParam(GLenum pname) { - return IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLParameter) && - base::Contains(kIdentifiableGLParams, pname); -} - -} // namespace - -void WebGLRenderingContextBase::RecordIdentifiableGLParameterDigest( - GLenum pname, - IdentifiableToken value) { - DCHECK(IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLParameter)); - const auto ukm_params = GetUkmParameters(); - blink::IdentifiabilityMetricBuilder(ukm_params.source_id) - .Add(blink::IdentifiableSurface::FromTypeAndToken( - blink::IdentifiableSurface::Type::kWebGLParameter, pname), - value) - .Record(ukm_params.ukm_recorder); -} - -void WebGLRenderingContextBase::RecordShaderPrecisionFormatForStudy( - GLenum shader_type, - GLenum precision_type, - WebGLShaderPrecisionFormat* format) { - DCHECK(IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLShaderPrecisionFormat)); - - const auto& ukm_params = GetUkmParameters(); - IdentifiableTokenBuilder builder; - auto surface_token = - builder.AddValue(shader_type).AddValue(precision_type).GetToken(); - auto sample_token = builder.AddValue(format->rangeMin()) - .AddValue(format->rangeMax()) - .AddValue(format->precision()) - .GetToken(); - - blink::IdentifiabilityMetricBuilder(ukm_params.source_id) - .Add(blink::IdentifiableSurface::FromTypeAndToken( - blink::IdentifiableSurface::Type::kWebGLShaderPrecisionFormat, - surface_token), - sample_token) - .Record(ukm_params.ukm_recorder); -} - void WebGLRenderingContextBase::RecordANGLEImplementation() { DCHECK(drawing_buffer_.get()); const Platform::WebGLContextInfo& context_info = @@ -4005,12 +3904,6 @@ case GL_SCISSOR_TEST: return GetBooleanParameter(script_state, pname); case GL_SHADING_LANGUAGE_VERSION: - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLParameter)) { - RecordIdentifiableGLParameterDigest( - pname, IdentifiabilityBenignStringToken(String( - ContextGL()->GetString(GL_SHADING_LANGUAGE_VERSION)))); - } return WebGLAny( script_state, StrCat({"WebGL GLSL ES 1.0 (", @@ -4073,12 +3966,6 @@ case GL_VENDOR: return WebGLAny(script_state, String("WebKit")); case GL_VERSION: - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLParameter)) { - RecordIdentifiableGLParameterDigest( - pname, IdentifiabilityBenignStringToken( - String(ContextGL()->GetString(GL_VERSION)))); - } return WebGLAny( script_state, StrCat({"WebGL 1.0 (", String(ContextGL()->GetString(GL_VERSION)), @@ -4095,12 +3982,6 @@ return ScriptValue::CreateNull(script_state->GetIsolate()); case WebGLDebugRendererInfo::kUnmaskedRendererWebgl: if (ExtensionEnabled(kWebGLDebugRendererInfoName)) { - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLParameter)) { - RecordIdentifiableGLParameterDigest( - pname, IdentifiabilityBenignStringToken( - String(ContextGL()->GetString(GL_RENDERER)))); - } return WebGLAny(script_state, String(ContextGL()->GetString(GL_RENDERER))); } @@ -4110,12 +3991,6 @@ return ScriptValue::CreateNull(script_state->GetIsolate()); case WebGLDebugRendererInfo::kUnmaskedVendorWebgl: if (ExtensionEnabled(kWebGLDebugRendererInfoName)) { - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLParameter)) { - RecordIdentifiableGLParameterDigest( - pname, IdentifiabilityBenignStringToken( - String(ContextGL()->GetString(GL_VENDOR)))); - } return WebGLAny(script_state, String(ContextGL()->GetString(GL_VENDOR))); } @@ -4338,10 +4213,6 @@ case GL_RENDERBUFFER_DEPTH_SIZE: case GL_RENDERBUFFER_STENCIL_SIZE: ContextGL()->GetRenderbufferParameteriv(target, pname, &value); - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLParameter)) { - RecordIdentifiableGLParameterDigest(pname, value); - } return WebGLAny(script_state, value); case GL_RENDERBUFFER_INTERNAL_FORMAT: return WebGLAny(script_state, renderbuffer_binding_->InternalFormat()); @@ -4421,13 +4292,8 @@ GLint precision = 0; ContextGL()->GetShaderPrecisionFormat(shader_type, precision_type, range, &precision); - auto* result = MakeGarbageCollected<WebGLShaderPrecisionFormat>( - range[0], range[1], precision); - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLShaderPrecisionFormat)) { - RecordShaderPrecisionFormatForStudy(shader_type, precision_type, result); - } - return result; + return MakeGarbageCollected<WebGLShaderPrecisionFormat>(range[0], range[1], + precision); } String WebGLRenderingContextBase::getShaderSource(WebGLShader* shader) { @@ -5268,15 +5134,6 @@ return; } ContextGL()->ReadPixels(x, y, width, height, format, type, data); - - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - IdentifiableSurface::Type::kWebFeature)) { - const auto& ukm_params = GetUkmParameters(); - IdentifiabilityMetricBuilder(ukm_params.source_id) - .AddWebFeature(WebFeature::kWebGLRenderingContextReadPixels, - IdentifiableToken()) - .Record(ukm_params.ukm_recorder); - } } } @@ -7700,11 +7557,8 @@ ScriptState* script_state, GLenum pname) { GLfloat value = 0; - if (!isContextLost()) + if (!isContextLost()) { ContextGL()->GetFloatv(pname, &value); - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLParameter)) { - RecordIdentifiableGLParameterDigest(pname, value); } return WebGLAny(script_state, value); } @@ -7728,10 +7582,6 @@ break; } } - if (IdentifiabilityStudySettings::Get()->ShouldSampleType( - blink::IdentifiableSurface::Type::kWebGLParameter)) { - RecordIdentifiableGLParameterDigest(pname, value); - } return WebGLAny(script_state, value); } @@ -7773,18 +7623,6 @@ default: NOTIMPLEMENTED(); } - if (ShouldMeasureGLParam(pname)) { - // `IdentifiableTokenBuilder::AddValue()` requires - // `std::has_unique_object_representations_v<>`, which doesn't hold for - // floating-point values. Work around by reinterpreting as an integral type - // of the same size, without changing the underlying bit pattern. - static_assert(sizeof(decltype(value)::value_type) == sizeof(int32_t)); - blink::IdentifiableTokenBuilder builder; - for (unsigned i = 0; i < length; i++) { - builder.AddValue(base::bit_cast<int32_t>(value[i])); - } - RecordIdentifiableGLParameterDigest(pname, builder.GetToken()); - } return WebGLAny(script_state, DOMFloat32Array::Create(base::span(value).first(length))); } @@ -7807,13 +7645,6 @@ default: NOTIMPLEMENTED(); } - if (ShouldMeasureGLParam(pname)) { - blink::IdentifiableTokenBuilder builder; - for (unsigned i = 0; i < length; i++) { - builder.AddValue(value[i]); - } - RecordIdentifiableGLParameterDigest(pname, builder.GetToken()); - } return WebGLAny(script_state, DOMInt32Array::Create(base::span(value).first(length))); }
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h index 6df0cd8..4750592 100644 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
@@ -35,6 +35,7 @@ #include "base/memory/scoped_refptr.h" #include "base/numerics/checked_math.h" #include "device/vr/public/mojom/vr_service.mojom-blink-forward.h" +#include "third_party/blink/public/common/privacy_budget/identifiable_token.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/web_graphics_context_3d_provider.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" @@ -42,7 +43,6 @@ #include "third_party/blink/renderer/bindings/modules/v8/v8_webgl_context_attributes.h" #include "third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h" #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h" -#include "third_party/blink/renderer/core/html/canvas/ukm_parameters.h" #include "third_party/blink/renderer/core/layout/content_change_type.h" #include "third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h" #include "third_party/blink/renderer/core/typed_arrays/dom_typed_array.h" @@ -140,10 +140,6 @@ HTMLCanvasElement* canvas() const; - const UkmParameters GetUkmParameters() const { - return Host()->GetUkmParameters(); - } - virtual String ContextName() const = 0; virtual void RegisterContextExtensions() = 0; @@ -2004,13 +2000,6 @@ WebGraphicsContext3DProvider* context_provider); static unsigned CurrentMaxGLContexts(); - void RecordIdentifiableGLParameterDigest(GLenum pname, - IdentifiableToken value); - - void RecordShaderPrecisionFormatForStudy(GLenum shader_type, - GLenum precision_type, - WebGLShaderPrecisionFormat* format); - void Dispose() override; // PushFrameWithCopy will make a potential copy if the resource is accelerated
diff --git a/third_party/blink/renderer/modules/webshare/navigator_share.h b/third_party/blink/renderer/modules/webshare/navigator_share.h index 3e324579..1bc0fd1 100644 --- a/third_party/blink/renderer/modules/webshare/navigator_share.h +++ b/third_party/blink/renderer/modules/webshare/navigator_share.h
@@ -34,7 +34,6 @@ ~NavigatorShare() = default; // Gets, or creates, NavigatorShare supplement on Navigator. - // See platform/Supplementable.h static NavigatorShare& From(Navigator&); // Navigator partial interface
diff --git a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper_fuzzer.cc b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper_fuzzer.cc index 56c52e9..d1743139 100644 --- a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper_fuzzer.cc +++ b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper_fuzzer.cc
@@ -9,6 +9,7 @@ #include <unicode/ustring.h> #include "base/command_line.h" +#include "base/logging/logging_settings.h" #include "third_party/blink/renderer/platform/fonts/font.h" #include "third_party/blink/renderer/platform/fonts/font_cache.h" #include "third_party/blink/renderer/platform/fonts/plain_text_node.h"
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher_test.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher_test.cc index ad3bf3a..50e860c 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher_test.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher_test.cc
@@ -23,6 +23,7 @@ #include "third_party/blink/renderer/platform/testing/testing_platform_support.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/skia/include/core/SkSurface.h" +#include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/mojom/presentation_feedback.mojom-blink.h" using testing::_; @@ -423,8 +424,9 @@ const auto* texture_quad = static_cast<const viz::TextureDrawQuad*>(quad); - EXPECT_EQ(texture_quad->uv_top_left, gfx::PointF(0.0f, 0.0f)); - EXPECT_EQ(texture_quad->uv_bottom_right, gfx::PointF(1.0f, 1.0f)); + EXPECT_EQ(texture_quad->GetNormalizedTexCoords( + gfx::Size(kWidth, kHeight)), + gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f)); // CanvasResourceSharedImage::CreateSoftware() creates a resource // whose origin is top-left.
diff --git a/third_party/blink/renderer/platform/mhtml/mhtml_archive.cc b/third_party/blink/renderer/platform/mhtml/mhtml_archive.cc index e9b1bac9..b70fecda 100644 --- a/third_party/blink/renderer/platform/mhtml/mhtml_archive.cc +++ b/third_party/blink/renderer/platform/mhtml/mhtml_archive.cc
@@ -34,7 +34,6 @@ #include "base/containers/contains.h" #include "base/i18n/time_formatting.h" -#include "base/metrics/histogram_macros.h" #include "base/numerics/safe_conversions.h" #include "base/strings/stringprintf.h" #include "build/build_config.h" @@ -202,23 +201,8 @@ MHTMLArchive::MHTMLArchive() : load_result_(MHTMLLoadResult::kInvalidArchive) {} // static -void MHTMLArchive::ReportLoadResult(MHTMLLoadResult result) { - UMA_HISTOGRAM_ENUMERATION("PageSerialization.MhtmlLoading.LoadResult", - result); -} - -// static MHTMLArchive* MHTMLArchive::Create(const KURL& url, scoped_refptr<const SharedBuffer> data) { - MHTMLArchive* archive = CreateArchive(url, data); - ReportLoadResult(archive->LoadResult()); - return archive; -} - -// static -MHTMLArchive* MHTMLArchive::CreateArchive( - const KURL& url, - scoped_refptr<const SharedBuffer> data) { MHTMLArchive* archive = MakeGarbageCollected<MHTMLArchive>(); archive->archive_url_ = url;
diff --git a/third_party/blink/renderer/platform/mhtml/mhtml_archive.h b/third_party/blink/renderer/platform/mhtml/mhtml_archive.h index e7a473cb..e8f9b89 100644 --- a/third_party/blink/renderer/platform/mhtml/mhtml_archive.h +++ b/third_party/blink/renderer/platform/mhtml/mhtml_archive.h
@@ -112,10 +112,6 @@ blink::mojom::MHTMLLoadResult LoadResult() const { return load_result_; } private: - static MHTMLArchive* CreateArchive(const KURL&, - scoped_refptr<const SharedBuffer>); - static void ReportLoadResult(blink::mojom::MHTMLLoadResult result); - void SetMainResource(ArchiveResource*); void AddSubresource(ArchiveResource*); static bool CanLoadArchive(const KURL&);
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index d8e1003..718bd1c 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1259,7 +1259,7 @@ { // Let transforms affect anchor() and anchor-size() functions. name: "CSSAnchorWithTransforms", - status: "experimental", + status: "stable", }, { // Whether <image> values are allowed as counter style <symbol> @@ -1510,6 +1510,10 @@ name: "CSSParserIgnoreCharsetForURLs", }, { + name: "CSSPositionAnchorNone", + status: "stable", + }, + { name: "CSSPositionStickyStaticScrollPosition", status: "test", }, @@ -1670,11 +1674,6 @@ status: "experimental", }, { - // crbug.com/1463890: CSS `text-autospace` property - name: "CSSTextAutoSpace", - status: "stable", - }, - { // crbug.com/40321528 name: "CssTextJustify", status: "test", @@ -1682,7 +1681,6 @@ { // crbug.com/1463890, crbug.com/1463891: CSS `text-spacing` shorthand name: "CSSTextSpacing", - depends_on: ["CSSTextAutoSpace"], status: "test", }, { @@ -3799,16 +3797,6 @@ implied_by: ["GeolocationElement", "InstallElement"], }, { - // Tracking bug for the implementation: crbug.com/352249547 - // This flag adds having the option to show an icon in the Permission - // element, if developers want to. - // The flag will enable us to land the feature over multiple CLs, and will - // be enabled after the feature has been fully implemented. - name: "PermissionElementIcon", - status: "stable", - depends_on: ["PermissionElement"], - }, - { name: "Permissions", public: true, status: "stable", @@ -4378,8 +4366,7 @@ { // https://github.com/WICG/view-transitions/blob/main/scoped-transitions.md name: "ScopedViewTransitions", - depends_on: ["CSSAnchorWithTransforms", "OriginatingElementIsImplicitAnchor"], - status: "experimental", + status: "experimental" }, { // https://github.com/w3c/window-management/issues/149 @@ -4903,7 +4890,7 @@ }, { name: "SvgAnchorElementAttributes", - status: "experimental", + status: "stable", }, { name: "SvgAnchorElementDownloadAttribute",
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 300895c..c09c4b6 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -1551,11 +1551,6 @@ # ====== Style team owned tests to here ====== -# Failing WPT tests with the RunSnapshotPostLayoutStateSteps flag enabled -crbug.com/384523570 virtual/run-snapshot-post-layout/external/wpt/scroll-animations/scroll-timelines/effect-updateTiming.html [ Failure ] -crbug.com/384523570 virtual/run-snapshot-post-layout/external/wpt/scroll-animations/scroll-timelines/scroll-animation-effect-phases.tentative.html [ Failure ] -crbug.com/384523570 virtual/run-snapshot-post-layout/external/wpt/scroll-animations/scroll-timelines/updating-the-finished-state.html [ Pass Timeout ] - # Tests only passing with RunSnapshotPostLayoutStateSteps enabled crbug.com/384523570 virtual/run-snapshot-post-layout/external/wpt/scroll-animations/scroll-timelines/scroll-timeline-snapshotting.html [ Pass ] crbug.com/384523570 virtual/run-snapshot-post-layout/fast/animation/scroll-animations/scroll-timeline-snapshotting.html [ Pass ] @@ -3717,8 +3712,8 @@ crbug.com/415666471 [ Mac ] external/wpt/speech-api/SpeechRecognition-installOnDevice.https.html [ Failure Timeout ] crbug.com/415666471 [ Mac ] virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-installOnDevice.https.html [ Failure Timeout ] crbug.com/417576322 [ Mac14 ] external/wpt/scroll-animations/css/animation-timeline-view-functional-notation.tentative.html [ Timeout ] -crbug.com/417576322 [ Mac15-arm64 ] virtual/threaded/external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ] -crbug.com/417576322 [ Mac14-arm64 ] virtual/threaded/external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ] +crbug.com/40275016 [ Mac ] external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ] +crbug.com/40275016 [ Mac ] virtual/threaded/external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ] [ Win11 ] external/wpt/css/css-display/display-contents-inline-002.html [ Failure ] [ Win11-arm64 ] external/wpt/css/css-display/display-contents-inline-002.html [ Failure ] [ Win10.20h2 ] external/wpt/css/css-display/display-contents-inline-002.html [ Failure ] @@ -6622,6 +6617,33 @@ crbug.com/1314514 [ Mac15-arm64 ] css3/blending/svg-blend-multiply.html [ Failure ] crbug.com/1314514 [ Win11-arm64 ] css3/blending/svg-blend-multiply.html [ Failure ] +# Following tests fail on mac*-arm64 +crbug.com/461638750 [ Mac12-arm64 ] http/tests/subresource_filter/ad-highlight.html [ Failure Pass ] +crbug.com/461638750 [ Mac13-arm64 ] http/tests/subresource_filter/ad-highlight.html [ Failure Pass ] +crbug.com/461638750 [ Mac14-arm64 ] http/tests/subresource_filter/ad-highlight.html [ Failure Pass ] +crbug.com/461638750 [ Mac15-arm64 ] http/tests/subresource_filter/ad-highlight.html [ Failure Pass ] +crbug.com/461638750 [ Win11-arm64 ] http/tests/subresource_filter/ad-highlight.html [ Failure Pass ] +crbug.com/461638750 [ Mac12-arm64 ] http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html [ Failure Pass ] +crbug.com/461638750 [ Mac13-arm64 ] http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html [ Failure Pass ] +crbug.com/461638750 [ Mac14-arm64 ] http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html [ Failure Pass ] +crbug.com/461638750 [ Mac15-arm64 ] http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html [ Failure Pass ] +crbug.com/461638750 [ Win11-arm64 ] http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html [ Failure Pass ] +crbug.com/461638750 [ Mac12-arm64 ] http/tests/subresource_filter/ad-highlight-frame-resized.html [ Failure Pass ] +crbug.com/461638750 [ Mac13-arm64 ] http/tests/subresource_filter/ad-highlight-frame-resized.html [ Failure Pass ] +crbug.com/461638750 [ Mac14-arm64 ] http/tests/subresource_filter/ad-highlight-frame-resized.html [ Failure Pass ] +crbug.com/461638750 [ Mac15-arm64 ] http/tests/subresource_filter/ad-highlight-frame-resized.html [ Failure Pass ] +crbug.com/461638750 [ Win11-arm64 ] http/tests/subresource_filter/ad-highlight-frame-resized.html [ Failure Pass ] +crbug.com/461638750 [ Mac12-arm64 ] http/tests/subresource_filter/ad-highlight-image.html [ Failure Pass ] +crbug.com/461638750 [ Mac13-arm64 ] http/tests/subresource_filter/ad-highlight-image.html [ Failure Pass ] +crbug.com/461638750 [ Mac14-arm64 ] http/tests/subresource_filter/ad-highlight-image.html [ Failure Pass ] +crbug.com/461638750 [ Mac15-arm64 ] http/tests/subresource_filter/ad-highlight-image.html [ Failure Pass ] +crbug.com/461638750 [ Win11-arm64 ] http/tests/subresource_filter/ad-highlight-image.html [ Failure Pass ] +crbug.com/461638750 [ Mac12-arm64 ] http/tests/subresource_filter/ad-highlight-span-background-image.html [ Failure Pass ] +crbug.com/461638750 [ Mac13-arm64 ] http/tests/subresource_filter/ad-highlight-span-background-image.html [ Failure Pass ] +crbug.com/461638750 [ Mac14-arm64 ] http/tests/subresource_filter/ad-highlight-span-background-image.html [ Failure Pass ] +crbug.com/461638750 [ Mac15-arm64 ] http/tests/subresource_filter/ad-highlight-span-background-image.html [ Failure Pass ] +crbug.com/461638750 [ Win11-arm64 ] http/tests/subresource_filter/ad-highlight-span-background-image.html [ Failure Pass ] + # Following tests fail on mac12-arm64 crbug.com/40197500 [ Mac12-arm64 ] compositing/overflow/rotate-clip.html [ Failure ] crbug.com/40197500 [ Mac12-arm64 ] compositing/overflow/rotate-then-clip.html [ Failure ] @@ -7164,8 +7186,6 @@ crbug.com/1446711 [ Win ] virtual/media-foundation-for-clear-dcomp/media/controls/accessibility-playback-speed-button.html [ Timeout ] crbug.com/1472813 [ Mac ] virtual/close-watcher/external/wpt/close-watcher/user-activation-shared.html?CloseWatcher [ Timeout ] crbug.com/1491472 [ Mac ] virtual/shared-storage-fenced-frame-mparch/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script.js [ Skip Timeout ] -crbug.com/1462683 [ Mac13-arm64 ] virtual/threaded/external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ] -crbug.com/1462683 [ Mac12-arm64 ] virtual/threaded/external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ] crbug.com/324293120 [ Debug Linux ] external/wpt/webstorage/event_case_sensitive.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-ignore.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-ignore.html index 43c6e7ad..e4861879 100644 --- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-ignore.html +++ b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-ignore.html
@@ -29,7 +29,6 @@ // Add a div that is the container timing root const div1 = document.createElement('div'); div1.setAttribute('containertiming', 'div1_ct'); - div1.setAttribute('containertiming-nesting', 'transparent'); document.body.appendChild(div1); // Intermediate div with containertiming-ignore blocking propagation to
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-intermediate-nesting-transparent.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-intermediate-nesting-transparent.html deleted file mode 100644 index bff241b..0000000 --- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-intermediate-nesting-transparent.html +++ /dev/null
@@ -1,55 +0,0 @@ -<!DOCTYPE HTML> -<meta charset=utf-8> -<title>Container Timing: two nested containertiming nodes, with a child img inside of the inner, and an intermediate nesting policy that is not used</title> -<body> -<style> -body { - margin: 0; -} -</style> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/container-timing/resources/container-timing-helpers.js"></script> -<script src="/element-timing/resources/element-timing-helpers.js"></script> -<script> - let beforeRender; - async_test(function (t) { - assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented"); - const observer = new PerformanceObserver( - t.step_func_done(function(entryList) { - assert_equals(entryList.getEntries().length, 1, 'one entry expected for the image, for the inner containertiming'); - const entry = entryList.getEntries()[0]; - checkContainerEntry(entry, 'div3_ct', 'img_id', beforeRender) - checkRect(entry, [0, 100, 0, 100]) - checkContainerSize(entry, 10000); - }) - ); - observer.observe({entryTypes: ['container']}); - - // Add a div that is the container timing root - const div1 = document.createElement('div'); - div1.setAttribute('containertiming', 'div1_ct'); - document.body.appendChild(div1); - - // Add an intermediate div between container timing roots, that sets a - // nesting policy. This should be ignored. - const div2 = document.createElement('div'); - div2.setAttribute('containertiming-nesting', 'transparent'); - div1.appendChild(div2); - - // Add another div, child of the first, that is also a container root - const div3 = document.createElement('div'); - div3.setAttribute('containertiming', 'div3_ct'); - div2.appendChild(div3); - - // Add image of width equal to 100 and height equal to 100. - img = document.createElement('img'); - img.src = '/container-timing/resources/square100.png'; - img.setAttribute('id', 'img_id'); - div3.appendChild(img); - - beforeRender = performance.now(); - }, 'A parent containertiming root with default nesting policy does not get paints from children containertiming roots, even if an intermediate node could set a different nesting policy.'); -</script> - -</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img.html index 9a81d7d..74c74e56 100644 --- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img.html +++ b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img.html
@@ -17,11 +17,18 @@ assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented"); const observer = new PerformanceObserver( t.step_func_done(function(entryList) { - assert_equals(entryList.getEntries().length, 1, 'one entry expected for the image, for the inner containertiming'); - const entry = entryList.getEntries()[0]; - checkContainerEntry(entry, 'div2_ct', 'img_id', beforeRender) - checkRect(entry, [0, 100, 0, 100]) - checkContainerSize(entry, 10000); + assert_equals(entryList.getEntries().length, 2, 'two entries expected for the image, one for each containertiming'); + const entries = entryList.getEntries(); + + const entry_div1 = entries.find(e => e.identifier == 'div1_ct'); + checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender) + checkRect(entry_div1, [0, 100, 0, 100]) + checkContainerSize(entry_div1, 10000); + + const entry_div2 = entries.find(e => e.identifier == 'div2_ct'); + checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender) + checkRect(entry_div2, [0, 100, 0, 100]) + checkContainerSize(entry_div2, 10000); }) ); observer.observe({entryTypes: ['container']});
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-from-invalid.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-from-invalid.html deleted file mode 100644 index 318b663..0000000 --- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-from-invalid.html +++ /dev/null
@@ -1,59 +0,0 @@ -<!DOCTYPE HTML> -<meta charset=utf-8> -<title>Container Timing: two nested containertiming nodes, parent gets invalid, then transparent nesting policy, with a child img inside of the inner</title> -<body> -<style> -body { - margin: 0; -} -</style> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/container-timing/resources/container-timing-helpers.js"></script> -<script src="/element-timing/resources/element-timing-helpers.js"></script> -<script> - let beforeRender; - async_test(function (t) { - assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented"); - const observer = new PerformanceObserver( - t.step_func_done(function(entryList) { - assert_equals(entryList.getEntries().length, 2, 'one entry expected for each of the containertiming roots'); - const entries = entryList.getEntries(); - - const entry_div1 = entries.find(e => e.identifier == 'div1_ct'); - checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender) - checkRect(entry_div1, [0, 100, 0, 100]) - checkContainerSize(entry_div1, 10000); - - const entry_div2 = entries.find(e => e.identifier == 'div2_ct'); - checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender) - checkRect(entry_div2, [0, 100, 0, 100]) - checkContainerSize(entry_div2, 10000); - }) - ); - observer.observe({entryTypes: ['container']}); - - // Add a div that is the container timing root, set invalid nesting, then - // transparent - const div1 = document.createElement('div'); - div1.setAttribute('containertiming', 'div1_ct'); - div1.setAttribute('containertiming-nesting', 'invalid'); - document.body.appendChild(div1); - div1.setAttribute('containertiming-nesting', 'transparent'); - - // Add another div, child of the first, that is also a container root - const div2 = document.createElement('div'); - div2.setAttribute('containertiming', 'div2_ct'); - div1.appendChild(div2); - - // Add image of width equal to 100 and height equal to 100. - img = document.createElement('img'); - img.src = '/container-timing/resources/square100.png'; - img.setAttribute('id', 'img_id'); - div2.appendChild(img); - - beforeRender = performance.now(); - }, 'A parent containertiming root switches from invalid nesting policy to transparent, generating one painting from each container timing root.'); -</script> - -</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-to-invalid.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-with-ignore.html similarity index 74% rename from third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-to-invalid.html rename to third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-with-ignore.html index 4735709..13776bf 100644 --- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-to-invalid.html +++ b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-with-ignore.html
@@ -1,6 +1,6 @@ <!DOCTYPE HTML> <meta charset=utf-8> -<title>Container Timing: two nested containertiming nodes, parent switching from transparent to invalid nesting policy, with a child img inside of the inner</title> +<title>Container Timing: two nested containertiming nodes, with a child img inside of the inner, and a containertiming-ignore in the descendant root</title> <body> <style> body { @@ -29,13 +29,14 @@ // Add a div that is the container timing root const div1 = document.createElement('div'); div1.setAttribute('containertiming', 'div1_ct'); - div1.setAttribute('containertiming-nesting', 'transparent'); document.body.appendChild(div1); - div1.setAttribute('containertiming-nesting', 'invalid'); - // Add another div, child of the first, that is also a container root + // Intermediate container timing root with containertiming-ignore blocking + // propagation to the parent containertiming root but still receiving paints + // from children const div2 = document.createElement('div'); div2.setAttribute('containertiming', 'div2_ct'); + div2.setAttribute('containertiming-ignore', ''); div1.appendChild(div2); // Add image of width equal to 100 and height equal to 100. @@ -45,7 +46,7 @@ div2.appendChild(img); beforeRender = performance.now(); - }, 'A parent containertiming root switches from transparent nesting policy to invalid, generating only a paint for the inner container timing.'); + }, 'A parent containertiming root with transparent nesting policy does not get paints from children containertiming roots with ignore.'); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-containertiming-child-img.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-containertiming-child-img.html deleted file mode 100644 index 692f5015..0000000 --- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-containertiming-child-img.html +++ /dev/null
@@ -1,58 +0,0 @@ -<!DOCTYPE HTML> -<meta charset=utf-8> -<title>Container Timing: two nested containertiming nodes, parent with shadowed mode, with a child img inside of the inner</title> -<body> -<style> -body { - margin: 0; -} -</style> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/container-timing/resources/container-timing-helpers.js"></script> -<script src="/element-timing/resources/element-timing-helpers.js"></script> -<script> - let beforeRender; - async_test(function (t) { - assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented"); - const observer = new PerformanceObserver( - t.step_func_done(function(entryList) { - assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each container timing'); - const entries = entryList.getEntries(); - - const entry_div1 = entries.find(e => e.identifier == 'div1_ct'); - checkContainerEntry(entry_div1, 'div1_ct', 'div2_id', beforeRender) - checkRect(entry_div1, [0, 100, 0, 100]) - checkContainerSize(entry_div1, 10000); - - const entry_div2 = entries.find(e => e.identifier == 'div2_ct'); - checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender) - checkRect(entry_div2, [0, 100, 0, 100]) - checkContainerSize(entry_div2, 10000); - }) - ); - observer.observe({entryTypes: ['container']}); - - // Add a div that is the container timing root - const div1 = document.createElement('div'); - div1.setAttribute('containertiming', 'div1_ct'); - div1.setAttribute('containertiming-nesting', 'shadowed'); - document.body.appendChild(div1); - - // Add another div, child of the first, that is also a container root - const div2 = document.createElement('div'); - div2.setAttribute('id', 'div2_id'); - div2.setAttribute('containertiming', 'div2_ct'); - div1.appendChild(div2); - - // Add image of width equal to 100 and height equal to 100. - img = document.createElement('img'); - img.src = '/container-timing/resources/square100.png'; - img.setAttribute('id', 'img_id'); - div2.appendChild(img); - - beforeRender = performance.now(); - }, 'A parent containertiming root with shadowed nesting policy gets only child containertiming paints without element data.'); -</script> - -</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-to-transparent-containertiming-child-img.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-to-transparent-containertiming-child-img.html deleted file mode 100644 index ef20345..0000000 --- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-to-transparent-containertiming-child-img.html +++ /dev/null
@@ -1,59 +0,0 @@ -<!DOCTYPE HTML> -<meta charset=utf-8> -<title>Container Timing: two nested containertiming nodes, parent with shadowed mode changed to transparent mode, with a child img inside of the inner</title> -<body> -<style> -body { - margin: 0; -} -</style> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/container-timing/resources/container-timing-helpers.js"></script> -<script src="/element-timing/resources/element-timing-helpers.js"></script> -<script> - let beforeRender; - async_test(function (t) { - assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented"); - const observer = new PerformanceObserver( - t.step_func_done(function(entryList) { - assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each containertiming'); - const entries = entryList.getEntries(); - - const entry_div1 = entries.find(e => e.identifier == 'div1_ct'); - checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender) - checkRect(entry_div1, [0, 100, 0, 100]) - checkContainerSize(entry_div1, 10000); - - const entry_div2 = entries.find(e => e.identifier == 'div2_ct'); - checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender) - checkRect(entry_div2, [0, 100, 0, 100]) - checkContainerSize(entry_div2, 10000); - }) - ); - observer.observe({entryTypes: ['container']}); - - // Add a div that is the container timing root - const div1 = document.createElement('div'); - div1.setAttribute('containertiming', 'div1_ct'); - div1.setAttribute('containertiming-nesting', 'shadowed'); - document.body.appendChild(div1); - - // Add another div, child of the first, that is also a container root - const div2 = document.createElement('div'); - div2.setAttribute('containertiming', 'div2_ct'); - div1.appendChild(div2); - - div1.setAttribute('containertiming-nesting', 'transparent'); - - // Add image of width equal to 100 and height equal to 100. - img = document.createElement('img'); - img.src = '/container-timing/resources/square100.png'; - img.setAttribute('id', 'img_id'); - div2.appendChild(img); - - beforeRender = performance.now(); - }, 'A parent containertiming root with shadowed then transparent nesting policy gets child containertiming paints with element data.'); -</script> - -</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img-with-intermediate-ignore.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img-with-intermediate-ignore.html deleted file mode 100644 index 3a0a64b6..0000000 --- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img-with-intermediate-ignore.html +++ /dev/null
@@ -1,54 +0,0 @@ -<!DOCTYPE HTML> -<meta charset=utf-8> -<title>Container Timing: two nested containertiming nodes, parent with transparent mode, with a child img inside of the inner, and an intermediate ignore node</title> -<body> -<style> -body { - margin: 0; -} -</style> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/container-timing/resources/container-timing-helpers.js"></script> -<script src="/element-timing/resources/element-timing-helpers.js"></script> -<script> - let beforeRender; - async_test(function (t) { - assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented"); - const observer = new PerformanceObserver( - t.step_func_done(function(entryList) { - assert_equals(entryList.getEntries().length, 1, 'only inner containertiming gets events, ignore breaks propagation to parent even if nesting is set to transparent'); - const entry = entryList.getEntries()[0]; - checkContainerEntry(entry, 'div3_ct', 'img_id', beforeRender) - checkRect(entry, [0, 100, 0, 100]) - checkContainerSize(entry, 10000); - }) - ); - observer.observe({entryTypes: ['container']}); - - // Add a div that is the container timing root - const div1 = document.createElement('div'); - div1.setAttribute('containertiming', 'div1_ct'); - div1.setAttribute('containertiming-nesting', 'transparent'); - document.body.appendChild(div1); - - const div2 = document.createElement('div'); - div2.setAttribute('containertiming-ignore', ''); - div1.appendChild(div2); - - // Add another div, child of the first, that is also a container root - const div3 = document.createElement('div'); - div3.setAttribute('containertiming', 'div3_ct'); - div2.appendChild(div3); - - // Add image of width equal to 100 and height equal to 100. - img = document.createElement('img'); - img.src = '/container-timing/resources/square100.png'; - img.setAttribute('id', 'img_id'); - div3.appendChild(img); - - beforeRender = performance.now(); - }, 'A parent containertiming root with transparent nesting policy and child containertiming including image, an intermediate ignore blocks paints to parent root.'); -</script> - -</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img.html deleted file mode 100644 index 9523cc88..0000000 --- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img.html +++ /dev/null
@@ -1,57 +0,0 @@ -<!DOCTYPE HTML> -<meta charset=utf-8> -<title>Container Timing: two nested containertiming nodes, parent with transparent mode, with a child img inside of the inner</title> -<body> -<style> -body { - margin: 0; -} -</style> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/container-timing/resources/container-timing-helpers.js"></script> -<script src="/element-timing/resources/element-timing-helpers.js"></script> -<script> - let beforeRender; - async_test(function (t) { - assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented"); - const observer = new PerformanceObserver( - t.step_func_done(function(entryList) { - assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each containertiming'); - const entries = entryList.getEntries(); - - const entry_div1 = entries.find(e => e.identifier == 'div1_ct'); - checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender) - checkRect(entry_div1, [0, 100, 0, 100]) - checkContainerSize(entry_div1, 10000); - - const entry_div2 = entries.find(e => e.identifier == 'div2_ct'); - checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender) - checkRect(entry_div2, [0, 100, 0, 100]) - checkContainerSize(entry_div2, 10000); - }) - ); - observer.observe({entryTypes: ['container']}); - - // Add a div that is the container timing root - const div1 = document.createElement('div'); - div1.setAttribute('containertiming', 'div1_ct'); - div1.setAttribute('containertiming-nesting', 'transparent'); - document.body.appendChild(div1); - - // Add another div, child of the first, that is also a container root - const div2 = document.createElement('div'); - div2.setAttribute('containertiming', 'div2_ct'); - div1.appendChild(div2); - - // Add image of width equal to 100 and height equal to 100. - img = document.createElement('img'); - img.src = '/container-timing/resources/square100.png'; - img.setAttribute('id', 'img_id'); - div2.appendChild(img); - - beforeRender = performance.now(); - }, 'A parent containertiming root with transparent nesting policy gets child containertiming paints with element data.'); -</script> - -</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-to-shadowed-containertiming-child-img.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-to-shadowed-containertiming-child-img.html deleted file mode 100644 index 250f779..0000000 --- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-to-shadowed-containertiming-child-img.html +++ /dev/null
@@ -1,60 +0,0 @@ -<!DOCTYPE HTML> -<meta charset=utf-8> -<title>Container Timing: two nested containertiming nodes, parent with transparent mode, changed to shadowed mode, with a child img inside of the inner</title> -<body> -<style> -body { - margin: 0; -} -</style> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/container-timing/resources/container-timing-helpers.js"></script> -<script src="/element-timing/resources/element-timing-helpers.js"></script> -<script> - let beforeRender; - async_test(function (t) { - assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented"); - const observer = new PerformanceObserver( - t.step_func_done(function(entryList) { - assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each container timing'); - const entries = entryList.getEntries(); - - const entry_div1 = entries.find(e => e.identifier == 'div1_ct'); - checkContainerEntry(entry_div1, 'div1_ct', 'div2_id', beforeRender) - checkRect(entry_div1, [0, 100, 0, 100]) - checkContainerSize(entry_div1, 10000); - - const entry_div2 = entries.find(e => e.identifier == 'div2_ct'); - checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender) - checkRect(entry_div2, [0, 100, 0, 100]) - checkContainerSize(entry_div2, 10000); - }) - ); - observer.observe({entryTypes: ['container']}); - - // Add a div that is the container timing root - const div1 = document.createElement('div'); - div1.setAttribute('containertiming', 'div1_ct'); - div1.setAttribute('containertiming-nesting', 'transparent'); - document.body.appendChild(div1); - - // Add another div, child of the first, that is also a container root - const div2 = document.createElement('div'); - div2.setAttribute('id', 'div2_id'); - div2.setAttribute('containertiming', 'div2_ct'); - div1.appendChild(div2); - - div1.setAttribute('containertiming-nesting', 'shadowed'); - - // Add image of width equal to 100 and height equal to 100. - img = document.createElement('img'); - img.src = '/container-timing/resources/square100.png'; - img.setAttribute('id', 'img_id'); - div2.appendChild(img); - - beforeRender = performance.now(); - }, 'A parent containertiming root with transparent then shadowed nesting policy gets child containertiming paints without element data.'); -</script> - -</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html index 443093e..ecac6aa6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html
@@ -16,6 +16,7 @@ width: 100px; height: 100px; position: absolute; + position-anchor: auto; } #target.moved { margin-top: 200px;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-transition-attr.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-transition-attr.tentative.html index 824c75c..2c2d99c5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-transition-attr.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-transition-attr.tentative.html
@@ -25,6 +25,7 @@ } #anchored { position: absolute; + position-anchor: auto; width: anchor-size(width); height: anchor-size(height); top: anchor(top);
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-anchor-basics.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-anchor-basics.html index 8039903..c6d9c1f2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-anchor-basics.html +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-anchor-basics.html
@@ -15,10 +15,10 @@ <script> // position-anchor: <anchor-element> -// <anchor-element> = auto | <dashed-ident> +// <anchor-element> = none | auto | <dashed-ident> test_valid_value('position-anchor', 'auto'); test_valid_value('position-anchor', '--foo'); -test_invalid_value('position-anchor', 'none'); +test_valid_value('position-anchor', 'none'); test_invalid_value('position-anchor', 'foo-bar'); test_invalid_value('position-anchor', '--foo --bar') test_invalid_value('position-anchor', '--foo, --bar') @@ -26,12 +26,13 @@ test_invalid_value('position-anchor', '100%'); // Computed value: as specified +test_computed_value('position-anchor', 'none'); test_computed_value('position-anchor', 'auto'); test_computed_value('position-anchor', '--foo'); -// Initial: auto +// Initial: none // Inherited: no -assert_not_inherited('position-anchor', 'auto', '--foo'); +assert_not_inherited('position-anchor', 'none', '--foo'); // Animation type: discrete test_no_interpolation({
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor-dynamic.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor-dynamic.html index 2ee47aa6..053eac5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor-dynamic.html +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor-dynamic.html
@@ -15,6 +15,7 @@ width: 100px; height: 100px; position: absolute; + position-anchor: auto; } #target.moved { margin-top: 100px;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html index bac3e658..449540aba 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html
@@ -15,6 +15,7 @@ width: 100px; height: 100px; position: absolute; + position-anchor: auto; } #target::before { position-area: center right;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor-center.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor-center.html index e3506be..e5407bb 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor-center.html +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor-center.html
@@ -13,6 +13,7 @@ #anchor::after { content: ""; position: absolute; + position-anchor: auto; width: 100px; height: 100px; background: green;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor.html index a719267..2a9dcd50 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor.html +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor.html
@@ -6,6 +6,7 @@ #anchor::after { content: ""; position: absolute; + position-anchor: auto; width: 100px; height: 100px; bottom: anchor(top);
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-content-rounding.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-content-rounding.html new file mode 100644 index 0000000..5fdbe44 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-content-rounding.html
@@ -0,0 +1,39 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel="help" href="https://crbug.com/40437604"> +<style> +#flex { + display: flex; + flex-wrap: wrap; + width: 10px; + height: 40px; + align-content: space-between; + outline: solid 1px; +} +#flex > div { + width: 10px; + height: 5px; + background: lime; +} +</style> +<div id="flex"> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div id="last"></div> +</div> +<script> +test(function() { + /* Increase the flexbox by 0.1px increments. */ + for (let i = 0; i < 10; i++) { + const height = (40 + i/10) + 'px'; + flex.style.height = height; + assert_equals(last.getBoundingClientRect().bottom, flex.getBoundingClientRect().bottom, height); + } +}, 'The last item should match the end edge.'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/justify-content-rounding.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/justify-content-rounding.html new file mode 100644 index 0000000..d4ac31a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/justify-content-rounding.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel="help" href="https://crbug.com/40437604"> +<style> +#flex { + display: flex; + width: 40px; + justify-content: space-between; + outline: solid 1px; +} +#flex > div { + width: 5px; + height: 10px; + background: lime; +} +</style> +<div id="flex"> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div id="last"></div> +</div> +<script> +test(function() { + /* Increase the flexbox by 0.1px increments. */ + for (let i = 0; i < 10; i++) { + const width = (40 + i/10) + 'px'; + flex.style.width = width; + assert_equals(last.getBoundingClientRect().right, flex.getBoundingClientRect().right, width); + } +}, 'The last item should match the end edge.'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/main-axis-margin-rounding.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/main-axis-margin-rounding.html new file mode 100644 index 0000000..00d9c57 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/main-axis-margin-rounding.html
@@ -0,0 +1,38 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel="help" href="https://crbug.com/40437604"> +<style> +#flex { + display: flex; + width: 40px; + height: 10px; + outline: solid 1px; +} +#flex > div { + width: 5px; + height: 10px; + margin-left: auto; + background: lime; +} +</style> +<div id="flex"> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div id="last"></div> +</div> +<script> +test(function() { + /* Increase the flexbox by 0.1px increments. */ + for (let i = 0; i < 10; i++) { + const width = (40 + i/10) + 'px'; + flex.style.width = width; + assert_equals(last.getBoundingClientRect().right, flex.getBoundingClientRect().right, width); + } +}, 'The last item should match the end edge.'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031-ref.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031-ref.html new file mode 100644 index 0000000..ec5fe7b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031-ref.html
@@ -0,0 +1,61 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + #flexbox>* { + background-color: rgb(96 139 168 / 0.2); + } + + #flexbox { + display: flex; + column-gap: 10px; + row-gap: 30px; + height: 130px; + width: 230px; + flex-wrap: wrap; + align-content: center; + } + + .items { + width: 70px; + height: 50px; + writing-mode: vertical-rl; + } + + .row-rule { + position: absolute; + height: 30px; + width: 70px; + background: blue; + top: 50px; + } + + .col-rule { + position: absolute; + width: 10px; + height: 50px; + background: red; + } +</style> + +<div class="row-rule" style="left: 0px;"></div> +<div class="row-rule" style="left: 80px;"></div> +<div class="row-rule" style="left: 160px;"></div> + +<div class="col-rule" style="left: 70px;"></div> +<div class="col-rule" style="left: 70px; top: 80px;"></div> +<div class="col-rule" style="left: 150px;"></div> +<div class="col-rule" style="left: 150px; top: 80px;"></div> + +<div id="flexbox"> + <div class="items">One</div> + <div class="items">Two</div> + <div class="items">Three</div> + <div class="items">Four</div> + <div class="items">Five</div> + <div class="items">Six</div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031.html new file mode 100644 index 0000000..57f3ad2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031.html
@@ -0,0 +1,47 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: flex column and row gaps are painted with rule break intersection and orthogonal items. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="match" href="flex-gap-decorations-031-ref.html"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + #flexbox>* { + background-color: rgb(96 139 168 / 0.2); + } + + #flexbox { + display: flex; + column-gap: 10px; + column-rule: 10px solid red; + column-rule-break: intersection; + column-rule-inset: 0; + row-gap: 30px; + row-rule: 30px solid blue; + row-rule-break: intersection; + row-rule-inset: 0; + height: 130px; + width: 230px; + flex-wrap: wrap; + align-content: center; + } + + .items { + width: 70px; + height: 50px; + writing-mode: vertical-rl; + } +</style> + +<div id="flexbox"> + <div class="items">One</div> + <div class="items">Two</div> + <div class="items">Three</div> + <div class="items">Four</div> + <div class="items">Five</div> + <div class="items">Six</div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032-ref.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032-ref.html new file mode 100644 index 0000000..90ae251e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032-ref.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + #flexbox>* { + background-color: rgb(96 139 168 / 0.2); + } + + #flexbox { + display: flex; + column-gap: 10px; + row-gap: 30px; + height: 130px; + width: 230px; + flex-wrap: wrap; + align-content: center; + } + + .items { + width: 70px; + height: 50px; + writing-mode: vertical-rl; + } + + .row-rule { + position: absolute; + height: 30px; + width: 230px; + background: blue; + top: 50px; + } + + .col-rule { + position: absolute; + width: 10px; + height: 130px; + background: red; + } +</style> + + +<div class="col-rule" style="left: 70px;"></div> +<div class="col-rule" style="left: 150px;"></div> + +<div class="row-rule" style="left: 0px;"></div> + +<div id="flexbox"> + <div class="items">One</div> + <div class="items">Two</div> + <div class="items">Three</div> + <div class="items">Four</div> + <div class="items">Five</div> + <div class="items">Six</div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032.html new file mode 100644 index 0000000..46b0d8b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032.html
@@ -0,0 +1,43 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: flex column and row gaps are painted with orthogonal items. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="match" href="flex-gap-decorations-032-ref.html"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + #flexbox>* { + background-color: rgb(96 139 168 / 0.2); + } + + #flexbox { + display: flex; + column-gap: 10px; + column-rule: 10px solid red; + row-gap: 30px; + row-rule: 30px solid blue; + height: 130px; + width: 230px; + flex-wrap: wrap; + align-content: center; + } + + .items { + width: 70px; + height: 50px; + writing-mode: vertical-rl; + } +</style> + +<div id="flexbox"> + <div class="items">One</div> + <div class="items">Two</div> + <div class="items">Three</div> + <div class="items">Four</div> + <div class="items">Five</div> + <div class="items">Six</div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024-ref.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024-ref.html new file mode 100644 index 0000000..5250625 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024-ref.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + .container { + width: 200px; + height: 150px; + column-count: 3; + column-width: 60px; + column-height: 70px; + column-gap: 10px; + row-gap: 10px; + column-wrap: wrap; + } + + .items { + background: rgb(96 139 168 / 0.2); + height: 70px; + width: 60px; + margin: 0px; + writing-mode: vertical-rl; + } + + .col-rule { + position: absolute; + top: 0px; + height: 150px; + width: 10px; + background: blue; + } + + .row-rule { + position: absolute; + height: 10px; + width: 200px; + background: gold; + left: 0px; + top: 70px; + } +</style> + +<div class="col-rule" style="left: 60px;"></div> +<div class="col-rule" style="left: 130px;"></div> + +<div class="row-rule"></div> + +<div class="container"> + <div class="items"></div> + <div class="items"></div> + <div class="items"></div> + <div class="items"></div> + <div class="items"></div> + <div class="items"></div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024.html new file mode 100644 index 0000000..8684e48 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024.html
@@ -0,0 +1,42 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: Multicolumn gap decorations painted with column-wrap and orthogonal items. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="match" href="multicol-gap-decorations-024-ref.html"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + .container { + width: 200px; + height: 150px; + column-count: 3; + column-width: 60px; + column-height: 70px; + column-gap: 10px; + row-gap: 10px; + column-rule: 10px solid blue; + row-rule: 10px solid gold; + column-wrap: wrap; + } + + .items { + background: rgb(96 139 168 / 0.2); + height: 70px; + width: 60px; + margin: 0px; + writing-mode: vertical-rl; + } +</style> + +<div class="container"> + <div class="items"></div> + <div class="items"></div> + <div class="items"></div> + <div class="items"></div> + <div class="items"></div> + <div class="items"></div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/content-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/content-ref.html index 47a055a..1216fdf 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/content-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/content-ref.html
@@ -6,7 +6,7 @@ body { margin: 20px } #scope { position: relative; z-index: 0; background: pink; - border: 5px solid yellow; padding: 5px; + border: 5px dashed purple; padding: 5px; width: 180px; height: 120px; } #part {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/container-query-2..html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/container-query-2..html deleted file mode 100644 index f3fd4fe..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/container-query-2..html +++ /dev/null
@@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html class="test-wait"> -<style> - #scope { - container-type: inline-size; - position: absolute; - } -</style> -<div id="scope"> - <span>Crash?</span> -</div> -</body> -<script> - window.onload = async () => { - const vt = scope.startViewTransition(() => { - scope.querySelector('span').style.backgroundColor = "green"; - }); - await vt.ready; - document.documentElement.classList.remove("test-wait"); - }; -</script> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/to-scale-zero.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/to-scale-zero.html similarity index 86% rename from third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/to-scale-zero.html rename to third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/to-scale-zero.html index b3a3577b..531cb08 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/to-scale-zero.html +++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/to-scale-zero.html
@@ -1,12 +1,14 @@ <!DOCTYPE html> -<html> +<html class="reftest-wait"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="match" href="empty-ref.html"> <title>Scoped view-transition to scale 0</title> <!-- TODO update link --> <link rel="help" href="https://www.w3.org/TR/css-view-transitions-2/"> </head> +<script src="/common/reftest-wait.js"></script> <script src="/dom/events/scrolling/scroll_support.js"></script> <style> #target { @@ -40,10 +42,10 @@ const target = document.getElementById('target'); await waitForCompositorReady(); const vt = target.startViewTransition(() => { - // Transform becomes singular. Object is no longer rendered. target.classList.toggle('collapsed'); }); - await vt.finished; + await vt.ready; + requestAnimationFrame(takeScreenshot); }; </script> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/view-transition-is-anchor-auto.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/view-transition-is-anchor-auto.html deleted file mode 100644 index 9f8d7ea..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/view-transition-is-anchor-auto.html +++ /dev/null
@@ -1,20 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <link rel="help" href="https://www.w3.org/TR/css-view-transitions-2/"> - <meta name="author" content="vmpstr@chromium.org"> - <title>Position anchor is auto on view transition</title> -</head> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> - -<div id="scope" class="block"></div> - -<script> -promise_test(() => { - return scope.startViewTransition().ready.then(() => { - assert_equals(getComputedStyle(scope, "::view-transition").positionAnchor, "auto"); - }); -}); -</script> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/effect-updateTiming.html b/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/effect-updateTiming.html index a7a0b5a..a5aa14ba 100644 --- a/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/effect-updateTiming.html +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/effect-updateTiming.html
@@ -466,6 +466,7 @@ await anim.ready; scroller.scrollTop = maxScroll * 0.07 await waitForNextFrame(); + await waitForNextFrame(); assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.07, 'progress before updating direction'); @@ -520,6 +521,7 @@ await anim.ready; scroller.scrollTop = maxScroll * 0.17 // 34% through first iteration await waitForNextFrame(); + await waitForNextFrame(); assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.34, 'progress before updating direction'); @@ -541,6 +543,7 @@ await anim.ready; scroller.scrollTop = maxScroll * 0.17 await waitForNextFrame(); + await waitForNextFrame(); // anim.currentTime = 17000; // 34% through first iteration assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.34, 'progress before updating direction'); @@ -616,6 +619,7 @@ scroller.scrollTop = maxScroll * 0.875 await waitForNextFrame(); + await waitForNextFrame(); assert_equals(anim.effect.getComputedTiming().progress, 0.5, 'change currentTime to active phase');
diff --git a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt index 50aeaa7..1b5b048e 100644 --- a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt +++ b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt
@@ -324,7 +324,7 @@ perspective-origin: 384.5px 0px pointer-events: auto position: static -position-anchor: auto +position-anchor: none position-area: none position-try-fallbacks: none position-try-order: normal
diff --git a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt index 2eff4e3a..629c0057 100644 --- a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt +++ b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
@@ -324,7 +324,7 @@ perspective-origin: 50% 50% pointer-events: auto position: static -position-anchor: auto +position-anchor: none position-area: none position-try-fallbacks: none position-try-order: normal
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-expected.png b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-expected.png index 33a1af44..5fe716f8 100644 --- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-expected.png +++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport-expected.png b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport-expected.png index 60e9327..21f534a 100644 --- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport-expected.png +++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html index 17a1f5e..479dabd 100644 --- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html +++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html
@@ -22,10 +22,15 @@ // Scroll down to verify that the overlay is drawn correctly for the portion of the // frame that is larger than the viewport. window.scrollTo(0, 400); -// Finish the test once the ad frame is loaded. + ad_frame.onload = function () { - if (window.testRunner) - testRunner.notifyDone(); + // Finish the test after the ad highlight is drawn. + requestAnimationFrame(function() { + requestAnimationFrame(function() { + if (window.testRunner) + testRunner.notifyDone(); + }); + }); } ad_frame.src = "about:blank";
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized-expected.png b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized-expected.png index 9ff235b..7c6fe58 100644 --- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized-expected.png +++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized.html b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized.html index 5a194f60..32df781 100644 --- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized.html +++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized.html
@@ -10,12 +10,18 @@ ad_frame = createAdFrame(); ad_frame.width = 100; ad_frame.height = 200; -// Finish the test once the ad frame is loaded. + ad_frame.onload = function () { // Resize the frame to verify that the highlight is also resized. ad_frame.width = 300; - if (window.testRunner) - testRunner.notifyDone(); + + // Finish the test after the ad highlight is drawn. + requestAnimationFrame(function() { + requestAnimationFrame(function() { + if (window.testRunner) + testRunner.notifyDone(); + }); + }); } ad_frame.src = "about:blank";
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image-expected.png b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image-expected.png new file mode 100644 index 0000000..1c9ad6f --- /dev/null +++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image.html b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image.html new file mode 100644 index 0000000..bfca177 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image.html
@@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> +<body> +<script type="text/javascript"> +if (window.testRunner) { + testRunner.setHighlightAds(); + + // Tag 'alpha.png' as an ad resource. + testRunner.setDisallowedSubresourcePathSuffixes(["alpha.png"], false /* block_subresources */); +} + +const img = document.createElement('img'); +img.width = 100; +img.height = 200; +img.src = "resources/alpha.png"; + +img.onload = function () { + // Finish the test after the ad highlight is drawn. + requestAnimationFrame(function() { + requestAnimationFrame(function() { + if (window.testRunner) + testRunner.notifyDone(); + }); + }); +} + +document.body.appendChild(img); + +if (window.testRunner) + testRunner.waitUntilDone(); + +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image-expected.png b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image-expected.png new file mode 100644 index 0000000..85480ecc --- /dev/null +++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image.html b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image.html new file mode 100644 index 0000000..4cf3edf9 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image.html
@@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> +<body> +<script type="text/javascript"> +if (window.testRunner) { + testRunner.setHighlightAds(); + + // Tag 'alpha.png' as an ad resource. + testRunner.setDisallowedSubresourcePathSuffixes(["alpha.png"], false /* block_subresources */); +} + +// Create an Image object to preload the resource. +const preloader = new Image(); + +// Define the onload callback for the preloader. +// This fires when the image is downloaded and decoded. +preloader.onload = function () { + // Now that the image is loaded, create the span. + const span = document.createElement('span'); + + span.style.display = "block"; + span.style.width = "100px"; + span.style.height = "200px"; + span.style.backgroundImage = "url(resources/alpha.png)"; + + document.body.appendChild(span); + + // Finish the test after the ad highlight is drawn. + requestAnimationFrame(function() { + requestAnimationFrame(function() { + if (window.testRunner) + testRunner.notifyDone(); + }); + }); +} + +preloader.src = "resources/alpha.png"; + +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight.html b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight.html index 7d5e4f55..064eceb 100644 --- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight.html +++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight.html
@@ -10,10 +10,15 @@ ad_frame = createAdFrame(); ad_frame.width = 100; ad_frame.height = 200; -// Finish the test once the ad frame is loaded. + ad_frame.onload = function () { - if (window.testRunner) - testRunner.notifyDone(); + // Finish the test after the ad highlight is drawn. + requestAnimationFrame(function() { + requestAnimationFrame(function() { + if (window.testRunner) + testRunner.notifyDone(); + }); + }); } ad_frame.src = "about:blank";
diff --git a/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt b/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt index 5d7c76e9..90fdb66 100644 --- a/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt +++ b/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt
@@ -324,7 +324,7 @@ perspective-origin: 0px 0px pointer-events: auto position: static -position-anchor: auto +position-anchor: none position-area: none position-try-fallbacks: none position-try-order: normal
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt index 945d49b..451602c 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt
@@ -1574,14 +1574,18 @@ property getCTM property getScreenCTM property href + property hreflang property interestForElement property nearestViewportElement + property ping + property referrerPolicy property rel property relList property requiredExtensions property systemLanguage property target property transform + property type svg element animate property beginElement property beginElementAt
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt index a701742..6cbb04bf 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -7599,15 +7599,23 @@ attribute @@toStringTag getter download getter href + getter hreflang getter interestForElement + getter ping + getter referrerPolicy getter rel getter relList getter target + getter type method constructor setter download + setter hreflang setter interestForElement + setter ping + setter referrerPolicy setter rel setter relList + setter type interface SVGAngle attribute @@toStringTag attribute SVG_ANGLETYPE_DEG
diff --git a/third_party/blink/web_tests/virtual/threaded/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt b/third_party/blink/web_tests/virtual/threaded/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt index 59b7357..1ce22d32 100644 --- a/third_party/blink/web_tests/virtual/threaded/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt +++ b/third_party/blink/web_tests/virtual/threaded/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
@@ -190,13 +190,13 @@ [0] : { specificity : { a : 0 - b : 1 + b : 0 c : 1 } - text : :root::view-transition + text : ::view-transition } ] - text : :root::view-transition + text : ::view-transition } startingStyles : [ ] @@ -2402,13 +2402,13 @@ [0] : { specificity : { a : 0 - b : 1 + b : 0 c : 1 } - text : :root::view-transition + text : ::view-transition } ] - text : :root::view-transition + text : ::view-transition } startingStyles : [ ]
diff --git a/third_party/blink/web_tests/virtual/view-transition-mpa-serialization/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt b/third_party/blink/web_tests/virtual/view-transition-mpa-serialization/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt index 59b7357..1ce22d32 100644 --- a/third_party/blink/web_tests/virtual/view-transition-mpa-serialization/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt +++ b/third_party/blink/web_tests/virtual/view-transition-mpa-serialization/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
@@ -190,13 +190,13 @@ [0] : { specificity : { a : 0 - b : 1 + b : 0 c : 1 } - text : :root::view-transition + text : ::view-transition } ] - text : :root::view-transition + text : ::view-transition } startingStyles : [ ] @@ -2402,13 +2402,13 @@ [0] : { specificity : { a : 0 - b : 1 + b : 0 c : 1 } - text : :root::view-transition + text : ::view-transition } ] - text : :root::view-transition + text : ::view-transition } startingStyles : [ ]
diff --git a/third_party/blink/web_tests/virtual/view-transition-wide-gamut/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt b/third_party/blink/web_tests/virtual/view-transition-wide-gamut/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt index 59b7357..1ce22d32 100644 --- a/third_party/blink/web_tests/virtual/view-transition-wide-gamut/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt +++ b/third_party/blink/web_tests/virtual/view-transition-wide-gamut/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
@@ -190,13 +190,13 @@ [0] : { specificity : { a : 0 - b : 1 + b : 0 c : 1 } - text : :root::view-transition + text : ::view-transition } ] - text : :root::view-transition + text : ::view-transition } startingStyles : [ ] @@ -2402,13 +2402,13 @@ [0] : { specificity : { a : 0 - b : 1 + b : 0 c : 1 } - text : :root::view-transition + text : ::view-transition } ] - text : :root::view-transition + text : ::view-transition } startingStyles : [ ]
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt index 3424a297..dab7315 100644 --- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -113,7 +113,6 @@ property computedStyleMap property containerTiming property containerTimingIgnore - property containerTimingNesting property contains property contentEditable property currentCSSZoom @@ -1439,7 +1438,6 @@ property computedStyleMap property containerTiming property containerTimingIgnore - property containerTimingNesting property contains property currentCSSZoom property currentPatch
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index e2848a8..9dae303 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -2502,7 +2502,6 @@ getter computedRole getter containerTiming getter containerTimingIgnore - getter containerTimingNesting getter currentCSSZoom getter currentPatch getter elementTiming @@ -2659,7 +2658,6 @@ setter className setter containerTiming setter containerTimingIgnore - setter containerTimingNesting setter elementTiming setter headingOffset setter headingReset
diff --git a/third_party/boringssl/src b/third_party/boringssl/src index 9b86817..61ca3f24 160000 --- a/third_party/boringssl/src +++ b/third_party/boringssl/src
@@ -1 +1 @@ -Subproject commit 9b86817b23dfbf6e0837df8862a4112c51b4ea3b +Subproject commit 61ca3f2493360393f534d9775b0e80fb39fd2153
diff --git a/third_party/crashpad/crashpad/handler/handler_main.cc b/third_party/crashpad/crashpad/handler/handler_main.cc index 6eca8415..05f9c34 100644 --- a/third_party/crashpad/crashpad/handler/handler_main.cc +++ b/third_party/crashpad/crashpad/handler/handler_main.cc
@@ -32,6 +32,7 @@ #include "base/files/file_path.h" #include "base/files/scoped_file.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/metrics/persistent_histogram_allocator.h" #include "base/scoped_generic.h" #include "base/strings/string_number_conversions.h"
diff --git a/third_party/crashpad/crashpad/test/gtest_main.cc b/third_party/crashpad/crashpad/test/gtest_main.cc index 63f13c5..f74ba42 100644 --- a/third_party/crashpad/crashpad/test/gtest_main.cc +++ b/third_party/crashpad/crashpad/test/gtest_main.cc
@@ -13,6 +13,7 @@ // limitations under the License. #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "build/build_config.h" #include "gtest/gtest.h" #include "test/main_arguments.h"
diff --git a/third_party/crossbench b/third_party/crossbench index 1572106..6945a4d 160000 --- a/third_party/crossbench +++ b/third_party/crossbench
@@ -1 +1 @@ -Subproject commit 1572106a98d0970b6ae54e2ac8b1ae00ec9437e4 +Subproject commit 6945a4d9f99a39970cd6e10e5794b675cf092fa6
diff --git a/third_party/dawn b/third_party/dawn index e05063e..026bc05 160000 --- a/third_party/dawn +++ b/third_party/dawn
@@ -1 +1 @@ -Subproject commit e05063e54542a646fd297a3e8d8c9f2faf8685e5 +Subproject commit 026bc053ee69caf59c9767756415560327cd4169
diff --git a/third_party/depot_tools b/third_party/depot_tools index 565cc4e..b8f2030 160000 --- a/third_party/depot_tools +++ b/third_party/depot_tools
@@ -1 +1 @@ -Subproject commit 565cc4ee354f0c394d0d83301e6658b1fc979c99 +Subproject commit b8f203014fd4a509eed94dfca84934136f5d26e5
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src index e5c1166..51f0ad7 160000 --- a/third_party/devtools-frontend/src +++ b/third_party/devtools-frontend/src
@@ -1 +1 @@ -Subproject commit e5c11667c31285d64f215bfc2cd4affce30a97e8 +Subproject commit 51f0ad70911e7688153c37f590cb12a8f12ec4d0
diff --git a/third_party/glslang/src b/third_party/glslang/src index 7099c12..14be844 160000 --- a/third_party/glslang/src +++ b/third_party/glslang/src
@@ -1 +1 @@ -Subproject commit 7099c123729e02f81d70559e79ee4360096fdfe5 +Subproject commit 14be844d5effc487de8c15d0507d65ce3d19c994
diff --git a/third_party/lit/v3_0/BUILD.gn b/third_party/lit/v3_0/BUILD.gn index 2bc363df..bb3be7a0 100644 --- a/third_party/lit/v3_0/BUILD.gn +++ b/third_party/lit/v3_0/BUILD.gn
@@ -81,6 +81,7 @@ "//chrome/browser/resources/suggest_internals:build_ts", "//chrome/browser/resources/tab_group_home:build_ts", "//chrome/browser/resources/tab_search:build_ts", + "//chrome/browser/resources/updater:build_ts", "//chrome/browser/resources/user_education_internals:build_ts", "//chrome/browser/resources/watermark:build_ts", "//chrome/browser/resources/webui_browser:build_ts",
diff --git a/third_party/openscreen/src b/third_party/openscreen/src index 3fbbb54..39fa0ff 160000 --- a/third_party/openscreen/src +++ b/third_party/openscreen/src
@@ -1 +1 @@ -Subproject commit 3fbbb548aa18f2fb2b5c4453377cafe48f782bcc +Subproject commit 39fa0ff22414b59df16a6d8f032b2595c73c6d59
diff --git a/third_party/perfetto b/third_party/perfetto index 10ac9fc..60767b0 160000 --- a/third_party/perfetto +++ b/third_party/perfetto
@@ -1 +1 @@ -Subproject commit 10ac9fc0b09895e39f29d6ef444d496c510856d1 +Subproject commit 60767b0bac8bea553a5cb85a5a79a0a36ee52547
diff --git a/third_party/puffin/src/chromium_main.cc b/third_party/puffin/src/chromium_main.cc index 6cf9bb5..14d41e2 100644 --- a/third_party/puffin/src/chromium_main.cc +++ b/third_party/puffin/src/chromium_main.cc
@@ -16,6 +16,7 @@ #include "base/command_line.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/strings/sys_string_conversions.h" #include "puffin/file_stream.h"
diff --git a/third_party/re2/OWNERS b/third_party/re2/OWNERS index e542f4ad..d86ef942 100644 --- a/third_party/re2/OWNERS +++ b/third_party/re2/OWNERS
@@ -1,2 +1,2 @@ -junyer@chromium.org +hans@chromium.org thakis@chromium.org
diff --git a/third_party/skia b/third_party/skia index ca90609..f3ddc70 160000 --- a/third_party/skia +++ b/third_party/skia
@@ -1 +1 @@ -Subproject commit ca906091e1997742fab665d567a448c7639bcac6 +Subproject commit f3ddc700abc7e8711f7942af73c22b867dfde432
diff --git a/third_party/spirv-tools/src b/third_party/spirv-tools/src index 2c1fd89..fb74718 160000 --- a/third_party/spirv-tools/src +++ b/third_party/spirv-tools/src
@@ -1 +1 @@ -Subproject commit 2c1fd8974f5d9c04629fd51bd4468fce5fed104d +Subproject commit fb7471844504abb16b732dc4fc0837119a32ec24
diff --git a/third_party/vulkan-deps b/third_party/vulkan-deps index 14e2627..e66c42f 160000 --- a/third_party/vulkan-deps +++ b/third_party/vulkan-deps
@@ -1 +1 @@ -Subproject commit 14e2627bfd234012a8a4a24f150b84af390d1b3a +Subproject commit e66c42f2bb26e9c388dd30c6f10eba8d2cb9fd3b
diff --git a/third_party/vulkan-validation-layers/src b/third_party/vulkan-validation-layers/src index 9c7428d3..b1bf1ca 160000 --- a/third_party/vulkan-validation-layers/src +++ b/third_party/vulkan-validation-layers/src
@@ -1 +1 @@ -Subproject commit 9c7428d35816443597f9e66035774ab7c6da2cd6 +Subproject commit b1bf1caabfaef4eebc15ee00c6ee952eaeeb12d6
diff --git a/third_party/webrtc b/third_party/webrtc index d3dc334..59391e5 160000 --- a/third_party/webrtc +++ b/third_party/webrtc
@@ -1 +1 @@ -Subproject commit d3dc33415dba12a7b26bae4b667970468fcb256b +Subproject commit 59391e5e8ae6c4da9aa464d199d57e4a62a7d961
diff --git a/third_party/win_virtual_display/controller/DEPS b/third_party/win_virtual_display/controller/DEPS index 5678bebf..95f9ccf 100644 --- a/third_party/win_virtual_display/controller/DEPS +++ b/third_party/win_virtual_display/controller/DEPS
@@ -1,3 +1,4 @@ include_rules = [ '+base/logging.h', + '+base/logging/logging_settings.h', ]
diff --git a/third_party/win_virtual_display/controller/display_driver_controller_main.cc b/third_party/win_virtual_display/controller/display_driver_controller_main.cc index d9b8f08..246b3e2 100644 --- a/third_party/win_virtual_display/controller/display_driver_controller_main.cc +++ b/third_party/win_virtual_display/controller/display_driver_controller_main.cc
@@ -8,6 +8,7 @@ #include <vector> #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "third_party/win_virtual_display/controller/display_driver_controller.h" namespace {
diff --git a/third_party/wireplumber/3pp/3pp.pb b/third_party/wireplumber/3pp/3pp.pb index 9aa842be..7f70ab26 100644 --- a/third_party/wireplumber/3pp/3pp.pb +++ b/third_party/wireplumber/3pp/3pp.pb
@@ -12,7 +12,7 @@ build { dep: "chromium/third_party/glib" - dep: "chromium/third_party/pipewire-1.4" + dep: "chromium/third_party/pipewire" install: "install.sh" external_tool: "infra/3pp/tools/cpython3/${platform}@3@3.11.10.chromium.35" }
diff --git a/tools/android/forwarder2/daemon.cc b/tools/android/forwarder2/daemon.cc index 33d13e4..032dad04 100644 --- a/tools/android/forwarder2/daemon.cc +++ b/tools/android/forwarder2/daemon.cc
@@ -23,6 +23,7 @@ #include "base/check_op.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/posix/eintr_wrapper.h" #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h"
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec index 037c379..448a1fa 100644 --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec
@@ -780,6 +780,10 @@ "META": {"sizes": {"includes": [5]}}, "includes": [5270], }, + "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/updater/resources.grd": { + "META": {"sizes": {"includes": [30]}}, + "includes": [5280], + }, # END chrome/ WebUI resources section # START chrome/ miscellaneous section.
diff --git a/tools/licenses/licenses.py b/tools/licenses/licenses.py index 514be06..7f22f02d 100755 --- a/tools/licenses/licenses.py +++ b/tools/licenses/licenses.py
@@ -108,8 +108,6 @@ os.path.join('third_party', 'wix'), # See crbug.com/350472 os.path.join('chrome', 'browser', 'resources', 'chromeos', 'quickoffice'), - # Chrome for Android proprietary code. - os.path.join('clank'), # Proprietary barcode detection library. os.path.join('third_party', 'barhopper'), @@ -147,7 +145,7 @@ # A list of paths that contain license information but that would otherwise # not be included. Possible reasons include: -# - Third party directories in //clank which are considered to be Google-owned +# - Third party directories in //internal which are considered to be Google-owned # - Directories that are directly checked out from upstream, and thus # don't have a README.chromium # - Directories that contain example code, or build tooling.
diff --git a/tools/mac/power/power_sampler/power_sampler_main.cc b/tools/mac/power/power_sampler/power_sampler_main.cc index 071ec70..57e2150 100644 --- a/tools/mac/power/power_sampler/power_sampler_main.cc +++ b/tools/mac/power/power_sampler/power_sampler_main.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include <signal.h> + #include <cstdio> #include <iostream> #include <memory> @@ -11,6 +12,7 @@ #include "base/files/file.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/power_monitor/iopm_power_source_sampling_event_source.h" #include "base/power_monitor/timer_sampling_event_source.h" #include "base/process/process_handle.h"
diff --git a/tools/memory/simulator/memory_simulator_main.cc b/tools/memory/simulator/memory_simulator_main.cc index 91073a8..8f2ba48 100644 --- a/tools/memory/simulator/memory_simulator_main.cc +++ b/tools/memory/simulator/memory_simulator_main.cc
@@ -12,6 +12,7 @@ #include "base/functional/callback_forward.h" #include "base/location.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h"
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 5d5551be..0911a519b 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -8160,6 +8160,8 @@ <int value="-2098150649" label="ForceListTabSwitcher:enabled"/> <int value="-2097906903" label="ArcNearbySharing:disabled"/> <int value="-2097895488" label="NotificationScrollBar:enabled"/> + <int value="-2097822155" + label="ProfileCreationFrictionReductionExperiment:enabled"/> <int value="-2097737027" label="SkiaGraphite:disabled"/> <int value="-2097515669" label="disable-cast"/> <int value="-2097013050" label="WaylandTextInputV3:disabled"/> @@ -20233,6 +20235,8 @@ <int value="2117485960" label="SupportPepperVideoDecoderDevAPI:disabled"/> <int value="2118287149" label="HelpAppSearchServiceIntegration:enabled"/> <int value="2118374092" label="MessagesForAndroidReaderMode:disabled"/> + <int value="2119256759" + label="ProfileCreationFrictionReductionExperiment:disabled"/> <int value="2119575519" label="ComposeUiRefinement:enabled"/> <int value="2119964154" label="enable-download-resumption"/> <int value="2120179658" label="FeedHeaderRemoval:enabled"/>
diff --git a/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml b/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml index c459211..b8efe0c6 100644 --- a/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml +++ b/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml
@@ -456,28 +456,6 @@ </token> </histogram> -<histogram name="Conversions.DbVersionOnReportSentAndDeleted" units="Report" - expires_after="2026-04-26"> - <owner>tquintanilla@chromium.org</owner> - <owner>measurement-api-dev+metrics@google.com</owner> - <summary> - Records the DB version every time `AttributionStorageSql::DeleteReport` is - invoked, i.e. whenever a report is sent or hits the max number of send - attempts and is subsequently deleted. This metric was added starting with DB - version 58. - </summary> -</histogram> - -<histogram name="Conversions.DbVersionOnSourceStored" units="Source" - expires_after="2026-04-26"> - <owner>tquintanilla@chromium.org</owner> - <owner>measurement-api-dev+metrics@google.com</owner> - <summary> - Records the DB version on every successful source or noised source stored. - This metric was added starting with version 56. - </summary> -</histogram> - <histogram name="Conversions.DebugReport.HttpResponseOrNetErrorCodeAggregatable" enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-02-04">
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml index 67b4aca..94d3053 100644 --- a/tools/metrics/histograms/metadata/autofill/histograms.xml +++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -7905,6 +7905,29 @@ </histogram> <histogram + name="Autofill.TouchToFill.Bnpl.SelectIssuerScreen.NumberOfIssuersShown" + units="issuers" expires_after="2026-06-01"> + <owner>vinnypersky@google.com</owner> + <owner>viplavkadam@google.com</owner> + <owner>payments-autofill-team@google.com</owner> + <summary> + Records the number of all BNPL issuers shown in the BNPL issuer selection + bottom sheet. Logs when the user is on the issuer selection bottom sheet. + </summary> +</histogram> + +<histogram name="Autofill.TouchToFill.Bnpl.SelectIssuerScreen.Shown" + enum="BooleanShown" expires_after="2026-06-01"> + <owner>vinnypersky@google.com</owner> + <owner>viplavkadam@google.com</owner> + <owner>payments-autofill-team@google.com</owner> + <summary> + Records the number of times the BNPL issuer selection bottom sheet is shown. + Logs true when the BNPL issuer selection bottom sheet is shown. + </summary> +</histogram> + +<histogram name="Autofill.TouchToFill.Bnpl.SelectIssuerScreen.UnlinkedIssuerSelected" enum="BnplIssuerId" expires_after="2026-06-01"> <owner>vinnypersky@google.com</owner> @@ -8051,7 +8074,7 @@ </histogram> <histogram name="Autofill.TouchToFill.LoyaltyCard.Affiliated.SelectedIndex" - units="index" expires_after="2025-12-31"> + units="index" expires_after="2026-06-01"> <owner>tchudakov@google.com</owner> <owner>osaul@google.com</owner> <owner>payments-autofill-team@google.com</owner> @@ -8063,7 +8086,7 @@ </histogram> <histogram name="Autofill.TouchToFill.LoyaltyCard.All.SelectedIndex" - units="index" expires_after="2025-12-31"> + units="index" expires_after="2026-06-01"> <owner>tchudakov@google.com</owner> <owner>osaul@google.com</owner> <owner>payments-autofill-team@google.com</owner> @@ -8076,7 +8099,7 @@ <histogram name="Autofill.TouchToFill.LoyaltyCard.NumberOfAffiliatedLoyaltyCardsShown" - units="loyalty cards" expires_after="2025-12-31"> + units="loyalty cards" expires_after="2026-06-01"> <owner>tchudakov@google.com</owner> <owner>osaul@google.com</owner> <owner>payments-autofill-team@google.com</owner> @@ -8087,7 +8110,7 @@ </histogram> <histogram name="Autofill.TouchToFill.LoyaltyCard.NumberOfLoyaltyCardsShown" - units="loyalty cards" expires_after="2025-12-31"> + units="loyalty cards" expires_after="2026-06-01"> <owner>tchudakov@google.com</owner> <owner>osaul@google.com</owner> <owner>payments-autofill-team@google.com</owner> @@ -8100,7 +8123,7 @@ </histogram> <histogram name="Autofill.TouchToFill.LoyaltyCard.Outcome" - enum="TouchToFill.LoyaltyCard.Outcome" expires_after="2025-12-31"> + enum="TouchToFill.LoyaltyCard.Outcome" expires_after="2026-06-01"> <owner>tchudakov@google.com</owner> <owner>osaul@google.com</owner> <owner>payments-autofill-team@google.com</owner> @@ -8111,7 +8134,7 @@ </histogram> <histogram name="Autofill.TouchToFill.LoyaltyCard.TriggerOutcome" - enum="TouchToFill.PaymentMethod.TriggerOutcome" expires_after="2025-12-31"> + enum="TouchToFill.PaymentMethod.TriggerOutcome" expires_after="2026-06-01"> <owner>tchudakov@google.com</owner> <owner>osaul@google.com</owner> <owner>payments-autofill-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml index a0de256..3547770 100644 --- a/tools/metrics/histograms/metadata/blink/histograms.xml +++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -2504,7 +2504,7 @@ </histogram> <histogram name="Blink.FencedFrame.MaxSameSiteFencedFramesInViewportAtUnload" - units="FrameCount" expires_after="2025-12-20"> + units="FrameCount" expires_after="2026-06-20"> <owner>averge@chromium.org</owner> <owner>shivanisha@chromium.org</owner> <owner>chrome-fenced-frames-core@google.com</owner> @@ -2522,7 +2522,7 @@ <histogram name="Blink.FencedFrame.MaxSameSiteFencedFramesInViewportPerPageLoad" - units="FrameCount" expires_after="2025-12-20"> + units="FrameCount" expires_after="2026-06-20"> <owner>averge@chromium.org</owner> <owner>shivanisha@chromium.org</owner> <owner>chrome-fenced-frames-core@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml index bb2be28..7c5a580 100644 --- a/tools/metrics/histograms/metadata/chromeos/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -53,7 +53,7 @@ </variant> <variant name="DiagnosticsUi" summary="CROS Diagnostics Application"> <owner>byronlee@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> </variant> <variant name="EnterpriseESim" summary="enterprise eSIM"> <owner>chadduffin@chromium.org</owner> @@ -1363,9 +1363,9 @@ <histogram name="ChromeOS.DiagnosticsUi.Error.CrosHealthdProbeError.{ProbeErrorSourceStruct}" - enum="CrosDiagnosticsCrosHealthdProbeError" expires_after="2025-12-31"> + enum="CrosDiagnosticsCrosHealthdProbeError" expires_after="2026-12-31"> <owner>byronlee@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the ProbeError::ErrorType returned on request for {ProbeErrorSourceStruct}. Recorded on the event a request to cros_healthd @@ -1380,9 +1380,9 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.Error.{ErrorSource}" - enum="CrosDiagnosticsDataError" expires_after="2025-12-31"> + enum="CrosDiagnosticsDataError" expires_after="2026-12-31"> <owner>byronlee@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records error type such as no data error, not a number error and expectation not met error when receiving system information including battery info, @@ -1396,18 +1396,18 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.InitialScreen" - units="CrosDiagnosticsNavigationView" expires_after="2025-12-31"> + units="CrosDiagnosticsNavigationView" expires_after="2026-12-31"> <owner>byronlee@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records requested initial screen when opening the Diagnostics App. </summary> </histogram> <histogram name="ChromeOS.DiagnosticsUi.KeyboardTesterRoutineDuration" - units="ms" expires_after="2026-04-12"> + units="ms" expires_after="2026-12-31"> <owner>byronlee@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the duration that the user spent in the Keyboard Tester. Emitted when the user closes the keyboard tester. @@ -1415,9 +1415,9 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.MemoryRoutineDuration" units="s" - expires_after="2026-04-12"> + expires_after="2026-12-31"> <owner>byronlee@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the duration that the Memory Routine took to complete. Emitted when the routine completes successfully. @@ -1425,9 +1425,9 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.OpenDuration" units="ms" - expires_after="2026-05-03"> + expires_after="2026-12-31"> <owner>byronlee@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the duration that the Diagnostics App is open. emitted when the app is closed. @@ -1435,9 +1435,9 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.RoutineCount" units="routines" - expires_after="2025-12-31"> + expires_after="2026-12-31"> <owner>byronlee@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the number of routines run while the Chrome OS Diagnostics App was open. Begins at zero each time the app is open and recorded each time the @@ -1446,9 +1446,9 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.{NavigationView}.OpenDuration" - units="ms" expires_after="2025-12-31"> + units="ms" expires_after="2026-12-31"> <owner>byronlee@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the duration that the Diagnostics App is open for a given page view. Emitted when the active page changes or when the app is closed. Cumulatively @@ -1465,9 +1465,9 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.{RoutineType}Result" - enum="CrosDiagnosticsRoutineResult" expires_after="2026-05-03"> + enum="CrosDiagnosticsRoutineResult" expires_after="2026-12-31"> <owner>byronlee@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary>Records the result of the {RoutineType} Routine.</summary> <token key="RoutineType"> <variant name="BatteryCharge"/> @@ -1492,7 +1492,7 @@ </histogram> <histogram name="ChromeOS.Display.Startup.AmbientLightSensorEnabled" - enum="BooleanEnabled" expires_after="2025-12-31"> + enum="BooleanEnabled" expires_after="2026-12-31"> <owner>longbowei@google.com</owner> <owner>cambickel@google.com</owner> <owner>cros-device-enablement@google.com</owner> @@ -1823,10 +1823,10 @@ </histogram> <histogram name="ChromeOS.Healthd.DiagnosticResult.{Routine}" - enum="CrosHealthdDiagnosticResult" expires_after="2026-05-03"> + enum="CrosHealthdDiagnosticResult" expires_after="2026-12-31"> <owner>weiluanwang@google.com</owner> <owner>dennyh@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the diagnostic results from healthd to analyze the usage and the pass rate. Emitted when a routine terminates. @@ -1883,10 +1883,10 @@ </histogram> <histogram name="ChromeOS.Healthd.EventSubscription" - enum="CrosHealthdEventCategory" expires_after="2025-12-31"> + enum="CrosHealthdEventCategory" expires_after="2026-12-31"> <owner>weiluanwang@google.com</owner> <owner>dennyh@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the event subscription to healthd to analyze the usage. Emitted when the specific category is requested from a client. @@ -1894,10 +1894,10 @@ </histogram> <histogram name="ChromeOS.Healthd.RoutineCreation" - enum="CrosHealthdRoutineCategory" expires_after="2026-05-03"> + enum="CrosHealthdRoutineCategory" expires_after="2026-12-31"> <owner>weiluanwang@google.com</owner> <owner>dennyh@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the routine creation in healthd to analyze the usage. Emitted when the specific category is requested from a client. @@ -1905,10 +1905,10 @@ </histogram> <histogram name="ChromeOS.Healthd.TelemetryResult.{Category}" - enum="CrosHealthdTelemetryResult" expires_after="2026-03-01"> + enum="CrosHealthdTelemetryResult" expires_after="2026-12-31"> <owner>weiluanwang@google.com</owner> <owner>dennyh@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the telemetry results from healthd to analyze the usage and error rate. Emitted when the specific category is requested from a client. @@ -1939,9 +1939,9 @@ </histogram> <histogram name="ChromeOS.Heartd.Action" enum="HeartdActionType" - expires_after="2025-12-31"> - <owner>kerker@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + expires_after="2026-12-31"> + <owner>byronlee@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> Records the action taken by the heartd service. When heartd starts up, we check if we reboot the device before, if yes, we send the metrics. @@ -4673,10 +4673,10 @@ </histogram> <histogram name="ChromeOS.TelemetryExtension.RoutineCreation" - enum="TelemetryExtensionRoutineCategory" expires_after="2026-04-12"> + enum="TelemetryExtensionRoutineCategory" expires_after="2026-12-31"> <owner>weiluanwang@google.com</owner> <owner>dennyh@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> The specific routine category created in the Telemetry extension. This is emitted every time a routine is created. @@ -4684,10 +4684,10 @@ </histogram> <histogram name="ChromeOS.TelemetryExtension.RoutineSupportedStatusQuery" - enum="TelemetryExtensionRoutineCategory" expires_after="2026-03-01"> + enum="TelemetryExtensionRoutineCategory" expires_after="2026-12-31"> <owner>weiluanwang@google.com</owner> <owner>dennyh@google.com</owner> - <owner>cros-tdm-tpe-eng@google.com</owner> + <owner>lt-diagnostics@google.com</owner> <summary> The specific routine category queried in the Telemetry extension. This is emitted every time a client queries whether a routine category is supported.
diff --git a/tools/metrics/histograms/metadata/content/histograms.xml b/tools/metrics/histograms/metadata/content/histograms.xml index c2d7058..76db3507 100644 --- a/tools/metrics/histograms/metadata/content/histograms.xml +++ b/tools/metrics/histograms/metadata/content/histograms.xml
@@ -431,7 +431,7 @@ <histogram name="ContentSettings.RegularProfile.DefaultJavascriptOptimizationBlockedByOs" - enum="Boolean" expires_after="2026-01-01"> + enum="Boolean" expires_after="2026-04-01"> <owner>pkotwicz@google.com</owner> <owner>src/chrome/browser/site_protection/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml index d3023f9..dadacf2 100644 --- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml +++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -691,14 +691,15 @@ </histogram> <histogram name="CustomTabs.ParallelRequestStatusOnStart" - enum="CustomTabsParallelRequestStatusOnStart" expires_after="M120"> + enum="CustomTabsParallelRequestStatusOnStart" expires_after="2026-11-01"> <owner>lizeb@chromium.org</owner> <owner>cct-team@google.com</owner> + <owner>mthiesse@chromium.org</owner> <summary> Recorded only on Android. Whether a parallel request was requested by the calling application, and if so its initial status. Recorded once per handled - intent, when the request is initiated. Starting with M84 this is is also - recorded for webapps/WebAPKs. Filter the platform for just CCT/TWA data. + intent, when the request is initiated. Filter the platform for just CCT/TWA + data. Expired in M120 and brought back in M144. </summary> </histogram>
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml index f7b0987..21103bc2 100644 --- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -421,8 +421,6 @@ label="The page was backgrounded at least once from navigation start to this event."/> <affected-histogram - name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoad"/> - <affected-histogram name="PageLoad.Clients.ServiceWorker2.PaintTiming.NavigationToFirstContentfulPaint"/> <affected-histogram name="PageLoad.Clients.ServiceWorker2.ParseTiming.NavigationToParseStart"/> @@ -437,15 +435,12 @@ <affected-histogram name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/> <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/> - <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/> </histogram_suffixes> <histogram_suffixes name="PageLoadMetricsAfterPaint" separator="."> <suffix name="AfterPaint" label="Limited to the duration of time starting after first paint, for page loads that reached first paint."/> - <affected-histogram - name="PageLoad.Clients.FromGoogleSearch.PageTiming.ForegroundDuration"/> <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/> </histogram_suffixes> @@ -480,7 +475,6 @@ <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/> <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/> <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/> - <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/> </histogram_suffixes> <histogram_suffixes name="PageLoadMetricsClientsDocWrite" separator="." @@ -493,11 +487,6 @@ name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/> <affected-histogram name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/> - <affected-histogram - name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution"/> - <affected-histogram - name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"/> - <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/> </histogram_suffixes> <histogram_suffixes name="PageLoadMetricsClientsFromGoogleSearch" separator="." @@ -511,10 +500,7 @@ name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/> <affected-histogram name="PageLoad.InteractiveTiming.FirstInputDelay4"/> <affected-histogram - name="PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame"/> - <affected-histogram name="PageLoad.LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms2"/> - <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/> <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/> <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/> @@ -554,7 +540,6 @@ name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/> <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/> - <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/> </histogram_suffixes> <histogram_suffixes name="PageLoadMetricsClientsProtocol" separator="." @@ -588,7 +573,6 @@ name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/> <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/> - <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/> </histogram_suffixes> <histogram_suffixes name="PageLoadMetricsClientsScheme" separator="." @@ -684,8 +668,6 @@ <histogram_suffixes name="PageLoadMetricsNoCommit" separator="."> <suffix name="NoCommit" label="Limited to page loads that did not commit."/> - <affected-histogram - name="PageLoad.Clients.FromGoogleSearch.PageTiming.ForegroundDuration"/> <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/> </histogram_suffixes> @@ -695,8 +677,6 @@ paint."/> <suffix name="WithPaint" label="The foreground duration for page loads reached first paint."/> - <affected-histogram - name="PageLoad.Clients.FromGoogleSearch.PageTiming.ForegroundDuration"/> <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/> </histogram_suffixes> @@ -838,14 +818,6 @@ <affected-histogram name="PasswordProtection.Verdict"/> </histogram_suffixes> -<histogram_suffixes name="PasswordProtectionTriggerForPasswordFieldOnFocus" - separator="."> - <suffix name="PasswordFieldOnFocus" - label="Password protection triggered by password field on focus event."/> - <affected-histogram name="PasswordProtection.RequestOutcome"/> - <affected-histogram name="PasswordProtection.Verdict"/> -</histogram_suffixes> - <histogram_suffixes name="PasswordProtectionTriggerForOneTimePasswordFieldDetected" separator="."> @@ -856,6 +828,14 @@ <affected-histogram name="PasswordProtection.Verdict"/> </histogram_suffixes> +<histogram_suffixes name="PasswordProtectionTriggerForPasswordFieldOnFocus" + separator="."> + <suffix name="PasswordFieldOnFocus" + label="Password protection triggered by password field on focus event."/> + <affected-histogram name="PasswordProtection.RequestOutcome"/> + <affected-histogram name="PasswordProtection.Verdict"/> +</histogram_suffixes> + <histogram_suffixes name="PasswordProtectionTriggerForSavedPasswordEntry" separator="."> <suffix name="SavedPasswordEntry"
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index 4b8799f0..4421fc5 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -1237,7 +1237,7 @@ <histogram name="Ads.InterestGroup.Auction.SameSiteAdComponentsMaxCountForWinningBid" - units="NumComponents" expires_after="2025-11-16"> + units="NumComponents" expires_after="2026-05-16"> <owner>averge@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -6632,7 +6632,7 @@ </histogram> <histogram name="Process.Sandbox.DwriteHookStatus" enum="Boolean" - expires_after="2025-11-13"> + expires_after="2026-11-13"> <owner>ajgo@chromium.org</owner> <owner>wfh@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/page/enums.xml b/tools/metrics/histograms/metadata/page/enums.xml index 23ba239..f6ca96c 100644 --- a/tools/metrics/histograms/metadata/page/enums.xml +++ b/tools/metrics/histograms/metadata/page/enums.xml
@@ -309,6 +309,7 @@ <int value="34" label="Lens Overlay Homework"/> <int value="35" label="AI Mode"/> <int value="36" label="Reading mode"/> + <int value="37" label="Contextual Task"/> </enum> <!-- LINT.ThenChange(//chrome/browser/ui/page_action/page_action_icon_type.h:PageActionIconType) -->
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml index 50b36886b..2fcc4988 100644 --- a/tools/metrics/histograms/metadata/page/histograms.xml +++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -468,6 +468,7 @@ <variant name=".terms"/> <variant name=".topics-internals"/> <variant name=".translate-internals"/> + <variant name=".updater"/> <variant name=".urgent-password-expiry-notification"/> <variant name=".usb-internals"/> <variant name=".vc-background"/> @@ -910,41 +911,6 @@ </summary> </histogram> -<histogram name="PageLoad.Clients.Ads.Memory.MainFrame.Max" units="KiB" - expires_after="2024-11-10"> - <owner>cammie@chromium.org</owner> - <owner>jkarlin@chromium.org</owner> - <owner>chrome-ads-histograms@google.com</owner> - <summary> - The maximum reported number of kilobytes of memory used by V8 by the main - frame in this pageload. - - Only recorded if the page has at least one identified ad frame. Recorded in - PageLoadMetrics when the page is destroyed. An ad frame consists of the - identified ad frame and all of its children (which may also be ads, but are - counted as part of the ancestor ad frame). - - Warning: This histogram has incomplete data. It expired in 03/2022 and was - unexpired in 11/2023. - </summary> -</histogram> - -<histogram name="PageLoad.Clients.Ads.Memory.UpdateCount" units="count" - expires_after="2024-11-10"> - <owner>cammie@chromium.org</owner> - <owner>jkarlin@chromium.org</owner> - <owner>chrome-ads-histograms@google.com</owner> - <summary> - The number of V8 memory measurement updates received by - AdsPageLoadMetricsObserver per pageload. Only recorded if the page has at - least one identified ad frame. Recorded in PageLoadMetrics when the page is - destroyed. - - Warning: This histogram has incomplete data. It expired in 06/2022 and was - unexpired in 11/2023. - </summary> -</histogram> - <histogram name="PageLoad.Clients.Ads.Resources.Bytes.Ads2" units="KB" expires_after="2026-10-01"> <owner>jkarlin@chromium.org</owner> @@ -2643,7 +2609,7 @@ <histogram name="PageLoad.Clients.Prerender.LayoutInstability.CumulativeShiftScore{PreloadingTriggerType}" - units="ms" expires_after="2026-03-22"> + units="scorex10" expires_after="2026-03-22"> <owner>nhiroki@chromium.org</owner> <owner>src/content/browser/preloading/prerender/OWNERS</owner> <summary> @@ -2912,18 +2878,6 @@ </summary> </histogram> -<histogram - name="PageLoad.Clients.ThirdParty.PaintTiming.NavigationToLargestContentfulPaint.HasThirdPartyFont" - units="ms" expires_after="2021-12-31"> - <owner>shivanisha@chromium.org</owner> - <owner>jkarlin@chromium.org</owner> - <summary> - Records the largest contentful paint only for pages that load a third party - font and whose largest contentful resource type is text. See - PageLoad.PaintTiming.NavigationToLargestContentfulPaint2 for details. - </summary> -</histogram> - <histogram name="PageLoad.Clients.TPCD.AdTPCAccess.BlockedByExperiment2" enum="Boolean" expires_after="2026-03-22"> <owner>victortan@chromium.org</owner> @@ -2990,26 +2944,6 @@ </summary> </histogram> -<histogram - name="PageLoad.Clients.UseCounter.Experimental.MetricsReplayAtActivationDuration" - units="ms" expires_after="2024-02-09"> - <owner>kenoss@chromium.org</owner> - <owner>toyoshim@chromium.org</owner> - <summary> - The duration of - UseCounterPageLoadMetricsObserver::DidActivatePrerenderedPage. - - Recorded iff the page is prerendered and activated. When a page is - prerendered, metrics "Blink.UseCounter.*" are buffered into - memory. When a page is activated then, buffered metrics are flushed and - recorded. This metric records the duration of this flush, in case of this - cause a performance degradation. - - Warning: this histogram was expired from 2023-03-16 to 2023-03-2 9and also - between 2023-09-03 and M121; data may be missing. - </summary> -</histogram> - <histogram name="PageLoad.Clients.WebView.PageAttemptResults" enum="WebViewPageAttemptResult" expires_after="2026-09-30"> <owner>narms@google.com</owner> @@ -3392,17 +3326,6 @@ </histogram> <histogram - name="PageLoad.Experimental.InputTiming.InputToNavigationStart.Background" - units="ms" expires_after="2024-02-25"> - <owner>spelchat@chromium.org</owner> - <owner>chrome-brapp-loading@google.com</owner> - <summary> - The time between the OS-level input event that initiated a navigation, and - the navigation actually starting, for background loads. - </summary> -</histogram> - -<histogram name="PageLoad.Experimental.InputTiming.InputToNavigationStart.FromLinkClick" units="ms" expires_after="2026-04-12"> <owner>spelchat@chromium.org</owner> @@ -3424,119 +3347,6 @@ </summary> </histogram> -<histogram name="PageLoad.Experimental.Memory.Core.MainFrame.Max" units="KiB" - expires_after="2024-11-10"> - <owner>cammie@chromium.org</owner> - <owner>jkarlin@chromium.org</owner> - <owner>chrome-ads-histograms@google.com</owner> - <summary> - The maximum reported number of kilobytes of memory used by V8 by the main - frame in this pageload. - - Only recorded if memory tracking is enabled. Recorded in PageLoadMetrics - when the page is destroyed. - - Warning: This histogram has incomplete data. It expired in 03/2022 and was - unexpired in 11/2023. - </summary> -</histogram> - -<histogram name="PageLoad.Experimental.Memory.Core.Subframe.Aggregate.Max" - units="KiB" expires_after="2024-11-10"> - <owner>cammie@chromium.org</owner> - <owner>jkarlin@chromium.org</owner> - <owner>chrome-ads-histograms@google.com</owner> - <summary> - The maximum reported aggregate number of kilobytes of memory used by V8 by - subframes in this pageload. The value recorded is the maximum simultaneous - usage by all subframes during this pageload, not including the main frame. - - Only recorded if memory tracking is enabled. Recorded in PageLoadMetrics - when the page is destroyed. - - Warning: This histogram has incomplete data. It expired in 03/2022 and was - unexpired in 11/2023. - </summary> -</histogram> - -<histogram name="PageLoad.Experimental.Memory.Core.Total.Max" units="KiB" - expires_after="2024-11-10"> - <owner>cammie@chromium.org</owner> - <owner>jkarlin@chromium.org</owner> - <owner>chrome-ads-histograms@google.com</owner> - <summary> - The maximum reported aggregate number of kilobytes of memory used by V8 by - all frames in this pageload. The value recorded is the maximum simultaneous - usage by all frames during this pageload, including the main frame. - - Only recorded if memory tracking is enabled. Recorded in PageLoadMetrics - when the page is destroyed. - - Warning: This histogram has incomplete data. It expired in 03/2022 and was - unexpired in 11/2023. - </summary> -</histogram> - -<histogram - name="PageLoad.Experimental.NavigationTiming.FinalLoaderCallbackToNavigationCommitSent" - units="ms" expires_after="2021-05-08"> - <owner>nhiroki@chromium.org</owner> - <owner>chrome-loading@google.com</owner> - <summary> - The interval between when a callback for the navigation loader is last - invoked and when navigation commit message is sent to a renderer process for - the main resource of a main frame navigation. - </summary> -</histogram> - -<histogram - name="PageLoad.Experimental.NavigationTiming.FinalRequestStartToFinalResponseStart" - units="ms" expires_after="2021-05-08"> - <owner>nhiroki@chromium.org</owner> - <owner>chrome-loading@google.com</owner> - <summary> - The interval between when the final HTTP request is sent and when the - headers of the final HTTP response is received for the main resource of a - main frame navigation. - </summary> -</histogram> - -<histogram - name="PageLoad.Experimental.NavigationTiming.FinalResponseStartToFinalLoaderCallback" - units="ms" expires_after="2021-05-08"> - <owner>nhiroki@chromium.org</owner> - <owner>chrome-loading@google.com</owner> - <summary> - The interval between when the headers of the final HTTP response is received - and when a callback for the navigation loader is last invoked for the main - resource of a main frame navigation. - </summary> -</histogram> - -<histogram - name="PageLoad.Experimental.NavigationTiming.FirstRequestStartToFirstResponseStart" - units="ms" expires_after="2021-05-08"> - <owner>nhiroki@chromium.org</owner> - <owner>chrome-loading@google.com</owner> - <summary> - The interval between when the first HTTP request is sent and when the - headers of the first HTTP response is received for the main resource of a - main frame navigation. - </summary> -</histogram> - -<histogram - name="PageLoad.Experimental.NavigationTiming.FirstResponseStartToFirstLoaderCallback" - units="ms" expires_after="2021-08-01"> - <owner>nhiroki@chromium.org</owner> - <owner>chrome-loading@google.com</owner> - <summary> - The interval between when the headers of the first HTTP response is received - and when a callback for the navigation loader is first invoked for the main - resource of a main frame navigation. - </summary> -</histogram> - <histogram name="PageLoad.Experimental.NavigationTiming.NavigationStartToFinalLoaderCallback" units="ms" expires_after="2025-05-11"> @@ -3549,19 +3359,6 @@ </histogram> <histogram - name="PageLoad.Experimental.NavigationTiming.NavigationStartToFinalRequestStart" - units="ms" expires_after="2024-09-29"> - <owner>nhiroki@chromium.org</owner> - <owner>chrome-loading@google.com</owner> - <summary> - The time relative to navigation start that the final HTTP request is sent - for the main resource of a main frame navigation. - - This metric has incomplete data. It was expired between 2023-03-12 and M121. - </summary> -</histogram> - -<histogram name="PageLoad.Experimental.NavigationTiming.NavigationStartToFinalResponseStart" units="ms" expires_after="2026-05-17"> <owner>nhiroki@chromium.org</owner> @@ -3674,18 +3471,6 @@ <token key="RequestDestination" variants="RequestDestination"/> </histogram> -<histogram - name="PageLoad.Experimental.PageTiming.TotalSubresourceLoadTimeAtFirstContentfulPaint" - units="ms" expires_after="2024-05-20"> - <owner>cduvall@chromium.org</owner> - <owner>jam@chromium.org</owner> - <summary> - Measures the aggregate time of subresource requests (from start to when - headers have been received) which have been completed before the first - contentful paint. Logged for every page load. - </summary> -</histogram> - <histogram name="PageLoad.Experimental.PageVisitFinalStatus" enum="PageVisitFinalStatus" expires_after="2026-12-22"> <owner>sullivan@chromium.org</owner> @@ -3711,17 +3496,6 @@ </summary> </histogram> -<histogram - name="PageLoad.Experimental.PaintTiming.FirstEligibleToPaintToFirstPaint" - units="ms" expires_after="2024-07-14"> - <owner>cduvall@chromium.org</owner> - <owner>jam@chromium.org</owner> - <summary> - Measures the time from when the page is first eligible to paint to when the - first paint occurs. Logged for every foreground page load. - </summary> -</histogram> - <histogram name="PageLoad.Experimental.PaintTiming.InputToFirstContentfulPaint" units="ms" expires_after="2025-12-04"> <owner>sullivan@chromium.org</owner> @@ -4111,16 +3885,6 @@ </histogram> <histogram - name="PageLoad.Internal.PaintTiming.NavigationToFirstContentfulPaint.InitiatingProcess" - enum="ProcessType2" expires_after="2020-09-05"> - <owner>sullivan@chromium.org</owner> - <summary> - Breakdown of NavigationToFirstContentfulPaint counts by process that - initiated the navigation (this will only be renderer or browser). - </summary> -</histogram> - -<histogram name="PageLoad.Internal.Prerender2.ActivatedPageLoaderStatus{PreloadingTriggerType}" enum="NetErrorCodes" expires_after="2025-09-14"> <owner>lingqi@chromium.org</owner> @@ -4361,17 +4125,6 @@ </summary> </histogram> -<histogram name="PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame" - units="scorex10" expires_after="2022-10-23"> - <owner>bmcquade@chromium.org</owner> - <owner>skobes@chromium.org</owner> - <summary> - Measures the cumulative layout shift score (bit.ly/lsm-explainer) that has - occurred in the main frame. Recorded at the end of the page lifetime, such - as when the page is being navigated away from or when a tab is being closed. - </summary> -</histogram> - <histogram name="PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame.AfterBackForwardCacheRestore" units="scorex10" expires_after="2022-01-02"> @@ -4493,17 +4246,6 @@ </summary> </histogram> -<histogram - name="PageLoad.PageTiming.ForegroundDuration.PageEndReason.ForwardBackNavigation.UserGesture" - units="ms" expires_after="M81"> - <owner>jkarlin@chromium.org</owner> - <summary> - The time since navigation start before the user presses the back button on a - page. Only measures page loads that remained in foreground and were created - by user gesture inside the renderer (as opposed to browser UX gestures). - </summary> -</histogram> - <histogram name="PageLoad.PageTiming.NavigationToFirstForeground" units="ms" expires_after="2026-05-03"> <owner>bmcquade@chromium.org</owner> @@ -4938,44 +4680,6 @@ </summary> </histogram> -<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution" units="ms" - expires_after="2024-11-17"> - <owner>cduvall@chromium.org</owner> - <owner>swarm-team@google.com</owner> - <summary> - Measures the time that the HTML parser spent blocked on the execution of - scripts, for main frame documents that finished parsing. - - This histogram has incomplete data. It expired on 2022-02-01 and was - re-added on 2022-05-23. - </summary> -</histogram> - -<histogram - name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite" - units="ms" expires_after="2024-02-09"> - <owner>cduvall@chromium.org</owner> - <owner>swarm-team@google.com</owner> - <summary> - Measures the time that the HTML parser spent blocked on the execution of - scripts inserted from document.write, for main frame documents that finished - parsing. - - This histogram has incomplete data. It expired on 2022-02-01 and was - re-added on 2022-05-23. - </summary> -</histogram> - -<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad" units="ms" - expires_after="2024-04-28"> - <owner>bmcquade@chromium.org</owner> - <owner>csharrison@chromium.org</owner> - <summary> - Measures the time that the HTML parser spent blocked on the load of scripts, - for main frame documents that finished parsing. - </summary> -</histogram> - <histogram name="PageLoad.SoftNavigation.CumulativeLayoutShift" units="ms" expires_after="2026-05-20"> <owner>sullivan@chromium.org</owner> @@ -5097,44 +4801,6 @@ </histogram> <histogram - name="PageLoad.{AdsPageLoadMetricVisibilityType}.FrameCounts.AdFrames.PerFrame.CreativeOriginStatus" - enum="CrossOriginCreativeStatus" expires_after="2021-12-31"> - <owner>cammie@chromium.org</owner> - <owner>jkarlin@chromium.org</owner> - <owner>chrome-ads-histograms@google.com</owner> - <summary> - For each identified ad frame, whether the origin of the ad creative frame - matches or differs from the origin of the main frame. - - The ad creative frame is heuristically determined, from among an identified - ad frame and all of its children, as the first of these frames to record a - First Contentful Paint. If no FCP is recorded, the creative origin status is - marked as indeterminate. {AdsPageLoadMetricVisibilityType} - </summary> -</histogram> - -<histogram - name="PageLoad.{AdsPageLoadMetricVisibilityType}.FrameCounts.AdFrames.PerFrame.CreativeOriginStatusWithThrottling" - enum="CrossOriginCreativeStatusWithThrottling" expires_after="2021-12-31"> - <owner>cammie@chromium.org</owner> - <owner>jkarlin@chromium.org</owner> - <owner>chrome-ads-histograms@google.com</owner> - <summary> - For each identified ad frame, whether the origin of the ad creative frame - matches or differs from the origin of the main frame, further split by - whether the frame has lifecycle updates throttled. Metric is emitted on - frame deletion. - - The ad creative frame is heuristically determined, from among an identified - ad frame and all of its children, as the first of these frames to record a - First Contentful Paint. If no FCP is recorded, the creative origin status is - marked as indeterminate. Frames that are render-throttled will not have an - FCP. Ad frames with indeterminate creative origin status are broken out as - throttled or not. {AdsPageLoadMetricVisibilityType} - </summary> -</histogram> - -<histogram name="PageLoad.{AdsPageLoadMetricVisibilityType}.FrameCounts.AdFrames.PerFrame.OriginStatus" enum="CrossOriginAdStatus" expires_after="2026-05-27"> <owner>jkarlin@chromium.org</owner> @@ -5265,13 +4931,6 @@ </summary> </histogram> -<histogram name="PageSerialization.MhtmlLoading.LoadResult" - enum="MhtmlLoadResult" expires_after="2023-04-23"> - <owner>sclittle@chromium.org</owner> - <owner>offline-dev@chromium.org</owner> - <summary>Reports the result of an attempt to load an MHTML archive.</summary> -</histogram> - </histograms> </histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/password/enums.xml b/tools/metrics/histograms/metadata/password/enums.xml index 20a3bc38..94e7f88 100644 --- a/tools/metrics/histograms/metadata/password/enums.xml +++ b/tools/metrics/histograms/metadata/password/enums.xml
@@ -326,17 +326,6 @@ <!-- LINT.ThenChange(/chrome/browser/password_manager/password_change_delegate.h) --> -<enum name="CredentialEntryAction"> - <int value="0" label="Deleted"/> - <int value="1" label="Copied username"/> - <int value="2" label="Unmasked password"/> - <int value="3" label="Masked password"/> - <int value="4" label="Copied password"/> - <int value="5" label="Edit username and save"/> - <int value="6" label="Edit password and save"/> - <int value="7" label="Edit username and password and save"/> -</enum> - <!-- LINT.IfChange(CredentialManagerAndroidGetResult) --> <enum name="CredentialManagerAndroidGetResult"> @@ -909,13 +898,6 @@ <int value="5" label="Unsafe state bubble"/> </enum> -<enum name="PasswordCheckReferrerAndroid"> - <int value="0" label="Password Settings"/> - <int value="1" label="Safety Check"/> - <int value="2" label="Password Breach Dialog"/> - <int value="3" label="PhishGuard Dialog"/> -</enum> - <enum name="PasswordCheckResolutionAction"> <int value="0" label="Opened a site to change password manually"/> <int value="1"
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml index 888aeba..4989ac5 100644 --- a/tools/metrics/histograms/metadata/password/histograms.xml +++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -1048,19 +1048,6 @@ </summary> </histogram> -<histogram name="PasswordManager.BulkCheck.PasswordCheckReferrerAndroid2" - enum="PasswordCheckReferrerAndroid" expires_after="2025-11-23"> - <owner>ioanap@chromium.org</owner> - <owner>friedrichh@chromium.org</owner> - <summary> - Referrer of a navigation to the Password Check UI Settings view. Recorded - when the user enters the view. Replaces - PasswordManager.BulkCheck.PasswordCheckReferrerAndroid histogram. Fixing the - bug that LEAK_DIALOG entry was reported as PHISHED_WARNING_DIALOG with UPM - enabled. - </summary> -</histogram> - <histogram name="PasswordManager.BulkCheck.Time" units="ms" expires_after="2026-04-26"> <owner>vasilii@chromium.org</owner> @@ -1298,21 +1285,6 @@ </token> </histogram> -<histogram name="PasswordManager.CredentialEntryActions.{CredentialEntryType}" - enum="CredentialEntryAction" expires_after="2025-11-16"> - <owner>ioanap@chromium.org</owner> - <owner>friedrichh@chromium.org</owner> - <summary> - Records actions performed by the users in the {CredentialEntryType} view. - Android-only for now. - </summary> - <token key="CredentialEntryType"> - <variant name="BlockedCredential"/> - <variant name="FederatedCredential"/> - <variant name="SavedPassword"/> - </token> -</histogram> - <histogram name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.APIError" enum="PasswordStoreAndroidBackendAPIError" expires_after="2026-05-10"> @@ -1577,17 +1549,6 @@ </summary> </histogram> -<histogram name="PasswordManager.ExportAndroid.MoreThanZeroPasswords" - enum="BooleanYesNo" expires_after="2025-12-28"> - <owner>ioanap@chromium.org</owner> - <owner>atsvirchkova@google.com</owner> - <summary> - Records whether the serializatiation step of the user-initiated password - export flow was attempted for more than 0 passwords. Attempting to export 0 - passwords is considered an error. Android only. - </summary> -</histogram> - <histogram name="PasswordManager.ExportAndroid.WriteToTempFileError" enum="PlatformFileError" expires_after="2025-03-30"> <owner>ioanap@chromium.org</owner> @@ -1716,7 +1677,7 @@ </histogram> <histogram name="PasswordManager.FillSuggestionsGroupedMatchAccepted" - enum="Boolean" expires_after="2025-11-16"> + enum="Boolean" expires_after="2026-05-18"> <owner>atsvirchkova@google.com</owner> <owner>src/components/password_manager/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/puma/histograms.xml b/tools/metrics/histograms/metadata/puma/histograms.xml index 80d5ca3..4a4c81fa 100644 --- a/tools/metrics/histograms/metadata/puma/histograms.xml +++ b/tools/metrics/histograms/metadata/puma/histograms.xml
@@ -20,6 +20,60 @@ <histogram-configuration> -<histograms/> +<histograms> + +<!-- LINT.IfChange(PUMA.RegionalCapabilities.FunnelStage.Eligibility) --> + +<histogram name="PUMA.RegionalCapabilities.FunnelStage.Eligibility" + enum="SearchEngineChoiceScreenConditions" expires_after="2026-08-19"> + <owner>dgn@chromium.org</owner> + <owner>ljjlee@chromium.org</owner> + <owner>chrome-regionalcapabilities@google.com</owner> + <summary> + Records the condition state on profile load for whether the profile is + possibly eligible for a search engine choice screen. + </summary> +</histogram> + +<!-- LINT.ThenChange(tools/metrics/histograms/metadata/regional_capabilities/histograms.xml:RegionalCapabilities.FunnelStage.Eligibility) --> + +<!-- LINT.IfChange(PUMA.RegionalCapabilities.FunnelStage.Reported) --> + +<histogram name="PUMA.RegionalCapabilities.FunnelStage.Reported" + enum="RegionalCapabilitiesFunnelStage" expires_after="2026-03-22"> + <owner>dgn@chromium.org</owner> + <owner>chrome-regionalcapabilities@google.com</owner> + <summary> + Reports on which stage of the regional capabilities funnel a given profile + is in. (Internal-only: see go/chrome-taiyaki-metrics-dd for more info) + + Can be recorded by profiles on some key events like profile load or attempt + to trigger a choice screen. + </summary> +</histogram> + +<!-- LINT.ThenChange(tools/metrics/histograms/metadata/regional_capabilities/histograms.xml:RegionalCapabilities.FunnelStage.Reported) --> + +<!-- LINT.IfChange(PUMA.RegionalCapabilities.FunnelStage.Triggering) --> + +<histogram name="PUMA.RegionalCapabilities.FunnelStage.Triggering" + enum="SearchEngineChoiceScreenConditions" expires_after="2026-08-19"> + <owner>dgn@chromium.org</owner> + <owner>ljjlee@chromium.org</owner> + <owner>chrome-regionalcapabilities@google.com</owner> + <summary> + Records the condition state at choice screen triggering attempt, for whether + we are determining the profile to be eligible for a search engine choice + screen. This is recorded every time the dynamic eligibility state is being + checked, which might be as often as every page navigation on desktop, or app + warm open on iOS. If a profile was deemed ineligible at profile load time + (as recorded by the RegionalCapabilities.FunnelStage.Eligibility histogram), + this histogram will not be recorded. + </summary> +</histogram> + +<!-- LINT.ThenChange(tools/metrics/histograms/metadata/regional_capabilities/histograms.xml:RegionalCapabilities.FunnelStage.Triggering) --> + +</histograms> </histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml b/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml index 01ccb86..82ee860 100644 --- a/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml +++ b/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml
@@ -77,6 +77,8 @@ </summary> </histogram> +<!-- LINT.IfChange(RegionalCapabilities.FunnelStage.Eligibility) --> + <histogram name="RegionalCapabilities.FunnelStage.Eligibility" enum="SearchEngineChoiceScreenConditions" expires_after="2026-08-19"> <owner>dgn@chromium.org</owner> @@ -88,6 +90,8 @@ </summary> </histogram> +<!-- LINT.ThenChange(tools/metrics/histograms/metadata/puma/histograms.xml:PUMA.RegionalCapabilities.FunnelStage.Eligibility) --> + <histogram name="RegionalCapabilities.FunnelStage.RegionalPresence" enum="RegionalProgramAndLocationMatch" expires_after="2026-03-29"> <owner>dgn@chromium.org</owner> @@ -103,6 +107,8 @@ </summary> </histogram> +<!-- LINT.IfChange(RegionalCapabilities.FunnelStage.Reported) --> + <histogram name="RegionalCapabilities.FunnelStage.Reported" enum="RegionalCapabilitiesFunnelStage" expires_after="2026-03-22"> <owner>dgn@chromium.org</owner> @@ -116,6 +122,10 @@ </summary> </histogram> +<!-- LINT.ThenChange(tools/metrics/histograms/metadata/puma/histograms.xml:PUMA.RegionalCapabilities.FunnelStage.Reported) --> + +<!-- LINT.IfChange(RegionalCapabilities.FunnelStage.Triggering) --> + <histogram name="RegionalCapabilities.FunnelStage.Triggering" enum="SearchEngineChoiceScreenConditions" expires_after="2026-08-19"> <owner>dgn@chromium.org</owner> @@ -132,6 +142,8 @@ </summary> </histogram> +<!-- LINT.ThenChange(tools/metrics/histograms/metadata/puma/histograms.xml:PUMA.RegionalCapabilities.FunnelStage.Triggering) --> + <histogram name="RegionalCapabilities.LoadedCountrySource" enum="LoadedCapabilitiesCountrySource" expires_after="2026-05-03"> <owner>dgn@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/stability/histograms.xml b/tools/metrics/histograms/metadata/stability/histograms.xml index 73449c1..110a69a 100644 --- a/tools/metrics/histograms/metadata/stability/histograms.xml +++ b/tools/metrics/histograms/metadata/stability/histograms.xml
@@ -501,7 +501,7 @@ </histogram> <histogram name="Stability.IOS.PostCrashAction" enum="IOSPostCrashAction" - expires_after="2025-12-14"> + expires_after="2026-12-14"> <owner>justincohen@chromium.org</owner> <owner>bling-fundamentals@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ui/enums.xml b/tools/metrics/histograms/metadata/ui/enums.xml index eb67e02..3d853b43 100644 --- a/tools/metrics/histograms/metadata/ui/enums.xml +++ b/tools/metrics/histograms/metadata/ui/enums.xml
@@ -756,6 +756,7 @@ <int value="-753390931" label="chrome://interstitials/"/> <int value="-734627230" label="chrome://extension-icon/"/> <int value="-727952446" label="chrome://nacl/"/> + <int value="-722142308" label="chrome://updater/"/> <int value="-707542503" label="chrome://choose-mobile-network/"/> <int value="-695712248" label="chrome://segmentation-internals/"/> <int value="-680649366" label="chrome-untrusted://hats/"/>
diff --git a/tools/perf/benchmarks/blink_perf.py b/tools/perf/benchmarks/blink_perf.py index 4e1bc29..1698312 100644 --- a/tools/perf/benchmarks/blink_perf.py +++ b/tools/perf/benchmarks/blink_perf.py
@@ -748,6 +748,7 @@ component='Blink>WebGPU', documentation_url='https://bit.ly/blink-perf-benchmarks') class BlinkPerfWebGPU(_BlinkPerfBenchmark): + # Run the WebGPU perf tests ONLY on core-capable adapters. SUBDIR = 'webgpu' SUPPORTED_PLATFORMS = [ story.expectations.WIN_10, @@ -760,17 +761,16 @@ return 'blink_perf.webgpu' def SetExtraBrowserOptionsWithBrowser(self, options, possible_browser): + # Make sure WebGPU is enabled if possible, even if not shipped. + # The test itself ensures it won't use a fallback (software) backend. + options.AppendExtraBrowserArgs(['--enable-unsafe-webgpu']) + if possible_browser.platform.GetOSName() == 'linux': - # On Linux, WebGPU is not yet enabled by default, and also needs some - # extra flags to make sure Chromium is in the correct mode to run WebGPU. - # TODO(442791440): TODO(40218893): Remove flags as they become unneeded. - # - # Note, we avoid --enable-unsafe-webgpu because we never want to run perf - # tests on the SwiftShader CPU-fallback backend (which is disabled without - # that flag). If this results in WebGPU being unavailable, these tests - # will skip themselves. + # Flags to make sure Chromium is in the correct mode to run WebGPU. + # TODO(442791440): TODO(40218893): Remove these flags and switch to + # testing the backend we get by default. Or, if needed, test both. options.AppendExtraBrowserArgs([ - '--enable-features=WebGPUService,Vulkan,VulkanFromANGLE', + '--enable-features=Vulkan,VulkanFromANGLE', '--use-angle=vulkan', '--ozone-platform=x11', ]) @@ -784,9 +784,10 @@ component='Blink>WebGPU', documentation_url='https://bit.ly/blink-perf-benchmarks') class BlinkPerfWebGPUCompat(_BlinkPerfBenchmark): + # Run the WebGPU perf tests ONLY on core-INcapable adapters. SUBDIR = 'webgpu' # Currently, Android is the only production target platform for WebGPU - # Compat's OpenGL ES backend. Enable other Compat platforms as needed. + # Compat's core-incapable backend(s). Enable other Compat configs as needed. SUPPORTED_PLATFORMS = [story.expectations.ALL_ANDROID] # TODO(crbug.com/443111618): Schedule this benchmark. SCHEDULED = False @@ -803,9 +804,13 @@ append_query='compatonly') def SetExtraBrowserOptionsWithBrowser(self, options, possible_browser): - options.AppendExtraBrowserArgs([ - '--use-webgpu-adapter=opengles', - ]) + # Make sure WebGPU is enabled if possible, even if not shipped. + # The test itself ensures it won't use a fallback (software) backend. + options.AppendExtraBrowserArgs(['--enable-unsafe-webgpu']) + + # Make sure we're only using the GLES backend. Change this if different + # flags are needed on other Core-incapable configs. + options.AppendExtraBrowserArgs(['--use-webgpu-adapter=opengles']) @benchmark.Info(emails=[
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 18bc7c9..4a57335 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,8 +5,8 @@ "full_remote_path": "perfetto-luci-artifacts/v52.0/linux-arm64/trace_processor_shell" }, "win": { - "hash": "a194f31b9f2c23b1f6b10d368965649ac8c2c95c", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/4fbe260dafe8fbb7a2e4c6abb2dd3a49f51aee80/trace_processor_shell.exe" + "hash": "c22875531e9ddd8e0d055294ce52b0a628e507f8", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/10ac9fc0b09895e39f29d6ef444d496c510856d1/trace_processor_shell.exe" }, "linux_arm": { "hash": "46d798c1864490cbb2ee053d6eda436184470e69", @@ -21,8 +21,8 @@ "full_remote_path": "perfetto-luci-artifacts/ebf44e57a3b734c5281bdff53d9945805486004e/mac-arm64/trace_processor_shell" }, "linux": { - "hash": "e5c10ff0729851f2c6a24d4d8db55f53f60441d8", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/74a696c4e77ac97222b057ab1c2a0c520a136a92/trace_processor_shell" + "hash": "40aeb03c20cf5d7384c60ef53c9e6817a3458b2b", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/60767b0bac8bea553a5cb85a5a79a0a36ee52547/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/ui/accelerated_widget_mac/ca_transaction_observer.mm b/ui/accelerated_widget_mac/ca_transaction_observer.mm index 6fdf272c..e6cd27e 100644 --- a/ui/accelerated_widget_mac/ca_transaction_observer.mm +++ b/ui/accelerated_widget_mac/ca_transaction_observer.mm
@@ -29,7 +29,8 @@ namespace ui { namespace { -NSString* kRunLoopMode = @"Chrome CATransactionCoordinator commit handler"; +NSString* const kRunLoopMode = + @"Chrome CATransactionCoordinator commit handler"; constexpr auto kPostCommitTimeout = base::Milliseconds(50); } // namespace
diff --git a/ui/accessibility/ax_enum_localization_util.cc b/ui/accessibility/ax_enum_localization_util.cc index 7c41c5c..1036d0f 100644 --- a/ui/accessibility/ax_enum_localization_util.cc +++ b/ui/accessibility/ax_enum_localization_util.cc
@@ -32,6 +32,9 @@ return l10n_util::GetStringUTF8(IDS_AX_SELECT_ACTION_VERB); case ax::mojom::DefaultActionVerb::kUncheck: return l10n_util::GetStringUTF8(IDS_AX_UNCHECK_ACTION_VERB); + case ax::mojom::DefaultActionVerb::kClickInHitTest: + case ax::mojom::DefaultActionVerb::kClickNotInHitTest: + NOTREACHED(); } return "";
diff --git a/ui/accessibility/ax_enum_util.cc b/ui/accessibility/ax_enum_util.cc index f372791..b31e29e 100644 --- a/ui/accessibility/ax_enum_util.cc +++ b/ui/accessibility/ax_enum_util.cc
@@ -1182,6 +1182,8 @@ return "suspendMedia"; case ax::mojom::Action::kLongClick: return "longClick"; + case ax::mojom::Action::kRequestLayoutBasedAction: + return "requestLayoutBasedAction"; } return ""; @@ -1243,6 +1245,10 @@ return "select"; case ax::mojom::DefaultActionVerb::kUncheck: return "uncheck"; + case ax::mojom::DefaultActionVerb::kClickInHitTest: + return "clickInHitTest"; + case ax::mojom::DefaultActionVerb::kClickNotInHitTest: + return "clickNotInHitTest"; } return "";
diff --git a/ui/accessibility/ax_enums.mojom b/ui/accessibility/ax_enums.mojom index cea40f06..422fd19f1 100644 --- a/ui/accessibility/ax_enums.mojom +++ b/ui/accessibility/ax_enums.mojom
@@ -400,8 +400,8 @@ // An action to be taken on an accessibility node. // In contrast to |AXDefaultActionVerb|, these describe what happens to the // object, e.g. "FOCUS". -// Next version: 5 -// Next value: 41 +// Next version: 6 +// Next value: 42 [Extensible, Stable, Uuid="ed8e4466-0522-4f98-ac28-59a523b70232"] enum Action { [Default]kNone = 0, @@ -464,7 +464,7 @@ // Delete any selected text in the control's text value and // insert |AXActionData::value| in its place, like when typing or pasting. kReplaceSelectedText = 17, - + [MinVersion=5] kRequestLayoutBasedAction = 41, [MinVersion=1] kResumeMedia = 34, // Scrolls by approximately one screen in a specific direction. Should be @@ -572,6 +572,12 @@ // as it bubbles up. kClickAncestor, + // A click on this node will result in event dispatch to this node. + kClickInHitTest, + + // A click on this node will not result in event dispatch to this node. + kClickNotInHitTest, + kJump, kOpen, kPress,
diff --git a/ui/accessibility/ax_event_generator.cc b/ui/accessibility/ax_event_generator.cc index a7996deb..d823830 100644 --- a/ui/accessibility/ax_event_generator.cc +++ b/ui/accessibility/ax_event_generator.cc
@@ -666,6 +666,9 @@ AddEvent(node, Event::OBJECT_ATTRIBUTE_CHANGED); } break; + case ax::mojom::IntAttribute::kDefaultActionVerb: + AddEvent(node, Event::DEFAULT_ACTION_VERB_CHANGED); + break; default: break; } @@ -1325,6 +1328,8 @@ return "collapsed"; case AXEventGenerator::Event::CONTROLS_CHANGED: return "controlsChanged"; + case AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED: + return "defaultActionVerbChanged"; case AXEventGenerator::Event::DETAILS_CHANGED: return "detailsChanged"; case AXEventGenerator::Event::DESCRIBED_BY_CHANGED:
diff --git a/ui/accessibility/ax_event_generator.h b/ui/accessibility/ax_event_generator.h index 9ec4a07f..af9faf6 100644 --- a/ui/accessibility/ax_event_generator.h +++ b/ui/accessibility/ax_event_generator.h
@@ -51,6 +51,7 @@ CHILDREN_CHANGED, COLLAPSED, CONTROLS_CHANGED, + DEFAULT_ACTION_VERB_CHANGED, DETAILS_CHANGED, DESCRIBED_BY_CHANGED, DESCRIPTION_CHANGED,
diff --git a/ui/accessibility/ax_node_data.cc b/ui/accessibility/ax_node_data.cc index a58126b8..edf6f1b 100644 --- a/ui/accessibility/ax_node_data.cc +++ b/ui/accessibility/ax_node_data.cc
@@ -689,6 +689,7 @@ case ax::mojom::Action::kStopDuckingMedia: case ax::mojom::Action::kSuspendMedia: case ax::mojom::Action::kLongClick: + case ax::mojom::Action::kRequestLayoutBasedAction: break; }
diff --git a/ui/accessibility/platform/automation/automation_api_util.cc b/ui/accessibility/platform/automation/automation_api_util.cc index 8bc5824..6883c0e4 100644 --- a/ui/accessibility/platform/automation/automation_api_util.cc +++ b/ui/accessibility/platform/automation/automation_api_util.cc
@@ -114,6 +114,7 @@ case AXEventGenerator::Event::CHILDREN_CHANGED: case AXEventGenerator::Event::COLLAPSED: case AXEventGenerator::Event::CONTROLS_CHANGED: + case AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED: case AXEventGenerator::Event::DETAILS_CHANGED: case AXEventGenerator::Event::DESCRIBED_BY_CHANGED: case AXEventGenerator::Event::DESCRIPTION_CHANGED:
diff --git a/ui/accessibility/platform/browser_accessibility_manager_auralinux.cc b/ui/accessibility/platform/browser_accessibility_manager_auralinux.cc index 60a2ec2c..8145a781 100644 --- a/ui/accessibility/platform/browser_accessibility_manager_auralinux.cc +++ b/ui/accessibility/platform/browser_accessibility_manager_auralinux.cc
@@ -366,6 +366,7 @@ case AXEventGenerator::Event::CHECKED_STATE_DESCRIPTION_CHANGED: case AXEventGenerator::Event::CHILDREN_CHANGED: case AXEventGenerator::Event::CONTROLS_CHANGED: + case AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED: case AXEventGenerator::Event::DETAILS_CHANGED: case AXEventGenerator::Event::DESCRIBED_BY_CHANGED: case AXEventGenerator::Event::EDITABLE_TEXT_CHANGED:
diff --git a/ui/accessibility/platform/browser_accessibility_manager_mac.mm b/ui/accessibility/platform/browser_accessibility_manager_mac.mm index 3e6426f..27c442d 100644 --- a/ui/accessibility/platform/browser_accessibility_manager_mac.mm +++ b/ui/accessibility/platform/browser_accessibility_manager_mac.mm
@@ -385,6 +385,7 @@ case AXEventGenerator::Event::CARET_BOUNDS_CHANGED: case AXEventGenerator::Event::CHECKED_STATE_DESCRIPTION_CHANGED: case AXEventGenerator::Event::CONTROLS_CHANGED: + case AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED: case AXEventGenerator::Event::DETAILS_CHANGED: case AXEventGenerator::Event::DESCRIBED_BY_CHANGED: case AXEventGenerator::Event::DESCRIPTION_CHANGED:
diff --git a/ui/accessibility/platform/browser_accessibility_manager_win.cc b/ui/accessibility/platform/browser_accessibility_manager_win.cc index 307d044..9699452 100644 --- a/ui/accessibility/platform/browser_accessibility_manager_win.cc +++ b/ui/accessibility/platform/browser_accessibility_manager_win.cc
@@ -610,6 +610,7 @@ case AXEventGenerator::Event::AUTOFILL_AVAILABILITY_CHANGED: case AXEventGenerator::Event::CARET_BOUNDS_CHANGED: case AXEventGenerator::Event::CHECKED_STATE_DESCRIPTION_CHANGED: + case AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED: case AXEventGenerator::Event::DETAILS_CHANGED: case AXEventGenerator::Event::DOCUMENT_TITLE_CHANGED: case AXEventGenerator::Event::FOCUS_CHANGED:
diff --git a/ui/compositor_extra/shadow.h b/ui/compositor_extra/shadow.h index 9d32872f..f40b0b5 100644 --- a/ui/compositor_extra/shadow.h +++ b/ui/compositor_extra/shadow.h
@@ -8,13 +8,13 @@ #include <memory> #include "base/memory/raw_ptr.h" +#include "ui/compositor/layer.h" #include "ui/compositor/layer_animation_observer.h" #include "ui/compositor/layer_owner.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/shadow_util.h" namespace ui { -class Layer; // Simple class that draws a drop shadow around content at given bounds. class Shadow : public ui::ImplicitAnimationObserver, public ui::LayerOwner {
diff --git a/ui/ozone/demo/ozone_demo.cc b/ui/ozone/demo/ozone_demo.cc index de43449..bd44b707 100644 --- a/ui/ozone/demo/ozone_demo.cc +++ b/ui/ozone/demo/ozone_demo.cc
@@ -10,6 +10,7 @@ #include "base/debug/stack_trace.h" #include "base/functional/callback_helpers.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/run_loop.h" #include "base/task/single_thread_task_executor.h"
diff --git a/ui/ozone/demo/skia/skia_demo.cc b/ui/ozone/demo/skia/skia_demo.cc index 16f75f3..880f0744 100644 --- a/ui/ozone/demo/skia/skia_demo.cc +++ b/ui/ozone/demo/skia/skia_demo.cc
@@ -10,6 +10,7 @@ #include "base/debug/stack_trace.h" #include "base/functional/callback_helpers.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/message_loop/message_pump_type.h" #include "base/run_loop.h" #include "base/task/single_thread_task_executor.h"
diff --git a/ui/views_content_client/views_content_main_delegate.cc b/ui/views_content_client/views_content_main_delegate.cc index 77ffabc..63651ac 100644 --- a/ui/views_content_client/views_content_main_delegate.cc +++ b/ui/views_content_client/views_content_main_delegate.cc
@@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/path_service.h" #include "build/build_config.h" #include "content/public/common/content_switches.h"
diff --git a/ui/webui/examples/app/main_delegate.cc b/ui/webui/examples/app/main_delegate.cc index 305b9829..f598f93 100644 --- a/ui/webui/examples/app/main_delegate.cc +++ b/ui/webui/examples/app/main_delegate.cc
@@ -7,6 +7,7 @@ #include "base/check.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/logging/logging_settings.h" #include "base/path_service.h" #include "ui/base/resource/resource_bundle.h" #include "ui/webui/examples/browser/content_browser_client.h"
diff --git a/ui/webui/resources/cr_components/composebox/composebox.css b/ui/webui/resources/cr_components/composebox/composebox.css index 35d512d5..65f18e6 100644 --- a/ui/webui/resources/cr_components/composebox/composebox.css +++ b/ui/webui/resources/cr_components/composebox/composebox.css
@@ -486,7 +486,7 @@ } #suggestionActivity { - bottom: var(--cr-composebox-suggestion-activity-bottom, 0); + bottom: var(--cr-composebox-suggestion-activity-bottom); color: var(--color-composebox-suggestion-activity); font-size: 12px; font-weight: 400;
diff --git a/ui/webui/resources/cr_components/history_embeddings/history_embeddings.ts b/ui/webui/resources/cr_components/history_embeddings/history_embeddings.ts index f42dd4d..5f91d149f 100644 --- a/ui/webui/resources/cr_components/history_embeddings/history_embeddings.ts +++ b/ui/webui/resources/cr_components/history_embeddings/history_embeddings.ts
@@ -6,6 +6,7 @@ import '//resources/cr_elements/cr_action_menu/cr_action_menu.js'; import '//resources/cr_elements/cr_feedback_buttons/cr_feedback_buttons.js'; import '//resources/cr_elements/cr_icon/cr_icon.js'; +import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; import '//resources/cr_elements/cr_loading_gradient/cr_loading_gradient.js'; import '//resources/cr_elements/cr_url_list_item/cr_url_list_item.js'; import './icons.html.js';
diff --git a/ui/webui/resources/cr_components/most_visited/most_visited.ts b/ui/webui/resources/cr_components/most_visited/most_visited.ts index 6fdedfc..23f8a3d8 100644 --- a/ui/webui/resources/cr_components/most_visited/most_visited.ts +++ b/ui/webui/resources/cr_components/most_visited/most_visited.ts
@@ -5,6 +5,7 @@ import '//resources/cr_elements/cr_action_menu/cr_action_menu.js'; import '//resources/cr_elements/cr_button/cr_button.js'; import '//resources/cr_elements/cr_dialog/cr_dialog.js'; +import '//resources/cr_elements/cr_icon/cr_icon.js'; import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; import '//resources/cr_elements/cr_input/cr_input.js'; import '//resources/cr_elements/cr_toast/cr_toast_manager.js';
diff --git a/ui/webui/resources/cr_components/search/animated_glow.css b/ui/webui/resources/cr_components/search/animated_glow.css index 68f69bb..141d742f 100644 --- a/ui/webui/resources/cr_components/search/animated_glow.css +++ b/ui/webui/resources/cr_components/search/animated_glow.css
@@ -23,7 +23,8 @@ /* All gradient rotation and background blur/border shrinking needs to be at * interval, otherwise border-radius due to border width * may not be at right size at right time. */ - --glif-rotation-duration_: var(--search-animated-glif-rotation-duration, 1000ms); + --glif-rotation-duration_: var(--search-animated-glif-rotation-duration, + 2000ms); --glow-stroke-width_: 2px; @@ -100,11 +101,12 @@ /* * The actual gradient border and inner glow. In * its raw form without .background's effects, it's a - * colored pinwheel box. 2 gradients so the effect is brighter, + * colored pinwheel circle. 2 gradients so the effect is brighter, * but only for dragging animation (not needed for others). */ - aspect-ratio: 1 / 1; + aspect-ratio: 1 / 1; /* Square shape. */ background: var(--search-animated-glow-brand-gradient); + /* 50% == circle, so it looks like it isn't moving when rotating. */ border-radius: 50%; contain: paint; content: ''; @@ -116,15 +118,27 @@ /* * Scale squashes the gradient vertically so its middle is not shown, * making it a glow, not a pinwheel. Too much, and it will be too - * tall of a glow. */ + * tall of a glow. + */ scale: 1 0.6; top: 50%; translate: -50% -50%; /* - * The gradient is 120% wide to ensure it fills - * passed the entire container. + * Hypotenuse rule - for rotating circle to be as wide as composebox + * (which is a rectangle) is at all points, its width and height must + * be >= diagonal of composebox. Thus, use width of 145% + * (height set by aspect ratio) since sqrt(2) = ~141%. + * Take triangle half of rectangle composebox to find diagonal: + * a^2 + b^2 = c^2 -> c = sqrt(a^2 + b^2). Let x be max(a,b) via cqmax. + * sqrt(2x^2) -> 141% of max of container (x). Chose 145% for slight buffer. + * Take max of either height or width of parent (outer box). In this case, + * it must be width given all searchboxes are wider than tall. Therefore, let + * x = parent width in this case. Could try to use cqMax, but will fail debug + * check due to asking for element attributes that do not exist yet. + * ***IMPORTANT***: Swap height and width definitions in this class + * if your height is bigger than width in the searchbox. */ - width: 120%; + width: 145%; } :host([entrypoint-name='Omnibox'][animation-state='expanding']) .double-gradient::before,
diff --git a/ui/webui/resources/cr_components/search/audio_wave.css b/ui/webui/resources/cr_components/search/audio_wave.css index aca966d..914bf4b5 100644 --- a/ui/webui/resources/cr_components/search/audio_wave.css +++ b/ui/webui/resources/cr_components/search/audio_wave.css
@@ -15,8 +15,9 @@ } .eclipse-svg-wrapper { - position: absolute; + height: 55px; inset: 0; + position: absolute; /* So it doesn't render on top of the text input. */ z-index: 0; }
diff --git a/ui/webui/resources/cr_components/search/audio_wave.ts b/ui/webui/resources/cr_components/search/audio_wave.ts index 80e94d8..314b9d6 100644 --- a/ui/webui/resources/cr_components/search/audio_wave.ts +++ b/ui/webui/resources/cr_components/search/audio_wave.ts
@@ -16,7 +16,7 @@ // Wave height const MAX_AMPLITUDE: number = -25; -const MIN_AMPLITUDE: number = 0; +const MIN_AMPLITUDE: number = -0; // Vertical offset const MAX_VERTICAL_SHIFT: number = -10; @@ -57,6 +57,7 @@ export interface AudioWaveElement { $: { 'eclipse-svg-wrapper': HTMLElement, + 'eclipse-svg': SVGElement, 'mask': SVGMaskElement, 'thin-path': SVGPathElement, 'lower-glow-path': SVGPathElement, @@ -97,6 +98,7 @@ private thinPathEl?: SVGPathElement; private lowerGlowPathEl?: SVGPathElement; private clipPathEl?: SVGPathElement; + private eclipseSvgEl?: SVGElement; private containerWidth: number = 0; private animationFrameId: number|null = null; @@ -105,12 +107,26 @@ private frame: number = 0; private lastUpdateTime: number = performance.now(); + /* Observe width changes per element with a recent size change. */ + private resizeObserver: ResizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + this.containerWidth = entry.contentRect.width; + } + }); + + override connectedCallback() { + super.connectedCallback(); + if (this.eclipseSvgEl) { + this.resizeObserver.observe(this.eclipseSvgEl); + } + } override firstUpdated() { this.eclipseSvgWrapperEl = this.$['eclipse-svg-wrapper']; this.maskEl = this.$['mask']; this.thinPathEl = this.$['thin-path']; this.lowerGlowPathEl = this.$['lower-glow-path']; this.clipPathEl = this.$['clip-path-shape']; + this.eclipseSvgEl = this.$['eclipse-svg']; } override updated(changedProperties: PropertyValues<this>) { @@ -123,6 +139,7 @@ override disconnectedCallback() { super.disconnectedCallback(); this.onStopListen(); + this.resizeObserver.disconnect(); } protected onStartListen() { @@ -130,13 +147,12 @@ return; } - this.containerWidth = this.eclipseSvgWrapperEl.offsetWidth; - this.isExpanding_ = true; // If animation has not started; start it. if (this.animationFrameId === null) { - this.processFrame(); + // Add to queue instead of adding to call stack; (now CPU efficient). + this.animationFrameId = requestAnimationFrame(this.processFrame); } } @@ -286,10 +302,13 @@ // Glow: this.lowerGlowPathEl.setAttribute( 'd', buildBezierPath(STROKE_WIDTH, false)); + const currentTransform = `translate(0, ${maskTranslateY})`; + this.maskEl.setAttribute('transform', currentTransform); + this.thinPathEl.setAttribute('transform', currentTransform); + this.lowerGlowPathEl.setAttribute('transform', currentTransform); + this.clipPathEl.setAttribute('transform', currentTransform); - this.maskEl.setAttribute('transform', `translate(0, ${maskTranslateY})`); - - // Should be bigger than parent height + // Should be >= wrapper height. const bottomClipY = 1000; const topControlY = STROKE_WIDTH * -0.5 + controlPointY;
diff --git a/ui/webui/resources/tools/eslint_ts_test.py b/ui/webui/resources/tools/eslint_ts_test.py index afc80240..1da520e 100755 --- a/ui/webui/resources/tools/eslint_ts_test.py +++ b/ui/webui/resources/tools/eslint_ts_test.py
@@ -148,6 +148,11 @@ _EXPECTED_ERROR % { 'tagName': 'some-other-button' }, + # Imported via iron-list.js (testing special case for + # third_party/polymer elements/ which use "-" instead of "_". + _EXPECTED_ERROR % { + 'tagName': 'iron-list' + }, ] for e in non_errors: self.assertFalse(e in str(context.exception))
diff --git a/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.html.ts b/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.html.ts index 4bfe86b..a3b7f8db 100644 --- a/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.html.ts +++ b/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.html.ts
@@ -14,5 +14,6 @@ id="button2"></other-button2> <cr-expand-button></cr-expand-button> <some-other-button id="button3"></some-other-button> +<iron-list></iron-list> `; }
diff --git a/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.ts b/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.ts index 9109ace5..ef42d086 100644 --- a/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.ts +++ b/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.ts
@@ -5,6 +5,7 @@ // Test file for @webui-eslint/web-component-missing-deps import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.js'; +import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js'; import './other_button.js'; import {CrLitElement} from '//resources/lit/v3_0/lit.rollup.js';
diff --git a/ui/webui/resources/tools/webui_eslint_plugin.js b/ui/webui/resources/tools/webui_eslint_plugin.js index c2f5d27..fc1acc4a 100644 --- a/ui/webui/resources/tools/webui_eslint_plugin.js +++ b/ui/webui/resources/tools/webui_eslint_plugin.js
@@ -298,6 +298,9 @@ const filenames = new Set(); for (let i = 0; i < parts.length; i++) { filenames.add(parts.slice(i).join('_') + '.js'); + if (tagName === 'iron-list') { + filenames.add(parts.slice(i).join('-') + '.js'); + } } return filenames;
diff --git a/v8 b/v8 index 998bb7f..a4e571c9d 160000 --- a/v8 +++ b/v8
@@ -1 +1 @@ -Subproject commit 998bb7fdf2099be82eb98522c3170e2039c2c46a +Subproject commit a4e571c9d0bfe4001e9ef4378c5271fb4b1f1ab8