diff --git a/DEPS b/DEPS index 86d0ea9..30df557 100644 --- a/DEPS +++ b/DEPS
@@ -253,7 +253,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '5215ec1ab9cd4f5f7a5959c9a249bb9c2a3dd090', + 'skia_revision': '72d67dfcc93a31c83d878d03d68c8c833caaf74e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -261,7 +261,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '535cd538f3585b44855647339f04bae1c1acf63a', + 'angle_revision': '4b232a9a826182308e0523a74998e355d3733792', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -269,7 +269,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '82c5172b87a874baf965d69bbfc45296cc9861a3', + 'pdfium_revision': '96f11830ebcb757ae919d286438a074e94c15508', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -328,7 +328,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '1079e9f8a1d3eb5c0e57641da2f151ad9cee62b4', + 'devtools_frontend_revision': '36cd6608718d1c71b906c2ce7f0db838d5dff5a0', # 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. @@ -412,7 +412,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. - 'libunwind_revision': '31359e057479f4c48b1fd9afd7ddf8b2134d68b1', + 'libunwind_revision': 'cb96c63d0579ee3edf909e96428864f2279ee1c5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -836,7 +836,7 @@ 'packages': [ { 'package': 'chromium/rts/model/linux-amd64', - 'version': 'woPA7odqdGVdNIclP8gNFVKRs3DK_4dw1tB8W98Hz9gC', + 'version': 'wJJtJ-UrEMxHHizlLi13NlMZgfGbojZAKjo7--aoBPsC', }, ], 'dep_type': 'cipd', @@ -847,7 +847,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'OTMEVvvyh7nnUTBb_w1nI8meP2sQGINsUnS0Xm6DrHcC', + 'version': 'BRekj2m8BGB0svpadpN13WmyMoN7lr4VxzJfc4AcwTsC', }, ], 'dep_type': 'cipd', @@ -858,7 +858,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': 'sRKPK6bmdPBUqLCxulOnuoD7i5-UHd8QDyciDc4eLCAC', + 'version': 'UA1jPG64HUixUn_vXUsV-VrHLrR9iM45tIg2O4oUPcwC', }, ], 'dep_type': 'cipd', @@ -1132,7 +1132,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '017544dc14559772306d0af2b8589690f3b28fea', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'a9c548efd6321696a63508c63fcd66ec7d59f536', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1515,7 +1515,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '06f638cf6004feb20392c233d5984a2a52bc7993', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'f4da613d6229df0d6a017448de05d54e7218d58d', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1697,7 +1697,7 @@ 'src/third_party/usrsctp/usrsctplib': Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '62d7d0c928c9a040dce96aa2f16c00e7e67d59cb', - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@e806dc1f8ff0e7bbf5b23dd6d4c0c41b0a87861f', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@73ae3e82193269de470fdd37a3390e643f8fe03a', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'ebe84bec02c041d28f902da0214bf442743fc907', @@ -1736,7 +1736,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '7afd2efc27572eda0e9b3a8c0831b47f5e6c3353', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '5601ea6125504a664d555063ba3f3a80a6d42302', + Var('webrtc_git') + '/src.git' + '@' + '7117f9b68826a214bc988ee78a6ef841cc37487c', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1806,7 +1806,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@513f737776c2a3d9e65d2e2d86db0e2266cc67fe', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@0b63ee1a711ece2bdcecb3f22650dfb405dfe441', 'condition': 'checkout_src_internal', }, @@ -1836,7 +1836,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'chlK7ebjAqFmK6W9dizXajfjhTuYnEFbHtuvB24pasQC', + 'version': '3m-YDq2sQqawnWNinMgnxnrqPA029I48e9p3IH8NOncC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1847,7 +1847,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'ccbcGT7uf9WaY1n-6ZRm-i7J3S-J5mFaHX899XSZYHUC', + 'version': 'OQ7cSXQKH2MR8v8USBplI-Zxt1AwlLA8ta1a6L7ps0UC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1858,7 +1858,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/projector_app/app', - 'version': 'JqYr8NYI7QomYa-CkoZ048ETCGWWZFrqCP6jOJ9bxagC', + 'version': '4Ivy0ctdTciRAdk9fJQd2iwv7pNhPF5xg8N2Yr6SXiUC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/app_list/model/search/search_result.cc b/ash/app_list/model/search/search_result.cc index 1cf6b17d..ae322456 100644 --- a/ash/app_list/model/search/search_result.cc +++ b/ash/app_list/model/search/search_result.cc
@@ -71,11 +71,19 @@ } void SearchResult::SetDetailsTextVector(const TextVector& vector) { + DCHECK(vector.size() <= 1 || !metadata_->multiline_details); metadata_->details_vector = vector; for (auto& observer : observers_) observer.OnMetadataChanged(); } +void SearchResult::SetMultilineDetails(bool multiline_details) { + DCHECK(metadata_->details_vector.size() <= 1 || !multiline_details); + metadata_->multiline_details = multiline_details; + for (auto& observer : observers_) + observer.OnMetadataChanged(); +} + void SearchResult::SetBigTitleTextVector(const TextVector& vector) { metadata_->big_title_vector = vector; for (auto& observer : observers_)
diff --git a/ash/app_list/model/search/search_result.h b/ash/app_list/model/search/search_result.h index 6967d4f..2f7387f 100644 --- a/ash/app_list/model/search/search_result.h +++ b/ash/app_list/model/search/search_result.h
@@ -82,6 +82,9 @@ } void SetDetailsTextVector(const TextVector& vector); + bool multiline_details() const { return metadata_->multiline_details; } + void SetMultilineDetails(bool multiline_details); + const TextVector& big_title_text_vector() const { return metadata_->big_title_vector; }
diff --git a/ash/public/cpp/app_list/app_list_types.h b/ash/public/cpp/app_list/app_list_types.h index 8868a89..68cf14e 100644 --- a/ash/public/cpp/app_list/app_list_types.h +++ b/ash/public/cpp/app_list/app_list_types.h
@@ -587,6 +587,12 @@ // The details of the result, supports embedded icons. std::vector<SearchResultTextItem> details_vector; + // Whether or not the details field can be split over multiple lines. UI + // implementation does not support multiline if the details vector has more + // than one text item, so if multiline_details is set then details_vector + // cannot have more than one element. + bool multiline_details = false; + // Big title text to be displayed prominently on an answer card. std::vector<SearchResultTextItem> big_title_vector;
diff --git a/ash/services/chromebox_for_meetings/public/cpp/appid_util.cc b/ash/services/chromebox_for_meetings/public/cpp/appid_util.cc index d61acf4b..959d06a 100644 --- a/ash/services/chromebox_for_meetings/public/cpp/appid_util.cc +++ b/ash/services/chromebox_for_meetings/public/cpp/appid_util.cc
@@ -6,7 +6,7 @@ #include "base/containers/contains.h" -namespace chromeos { +namespace ash { namespace cfm { namespace { @@ -46,4 +46,4 @@ } } // namespace cfm -} // namespace chromeos +} // namespace ash
diff --git a/ash/services/chromebox_for_meetings/public/cpp/appid_util.h b/ash/services/chromebox_for_meetings/public/cpp/appid_util.h index a677f29c..981a6ae 100644 --- a/ash/services/chromebox_for_meetings/public/cpp/appid_util.h +++ b/ash/services/chromebox_for_meetings/public/cpp/appid_util.h
@@ -7,13 +7,13 @@ #include <string> -namespace chromeos { +namespace ash { namespace cfm { // Returns true if the id provided matches a valid CfM PA/PWA appid. bool IsChromeboxForMeetingsAppId(const std::string& app_id); } // namespace cfm -} // namespace chromeos +} // namespace ash #endif // ASH_SERVICES_CHROMEBOX_FOR_MEETINGS_PUBLIC_CPP_APPID_UTIL_H_
diff --git a/ash/services/chromebox_for_meetings/public/cpp/appid_util_unittest.cc b/ash/services/chromebox_for_meetings/public/cpp/appid_util_unittest.cc index f3b7722..66ec2f2 100644 --- a/ash/services/chromebox_for_meetings/public/cpp/appid_util_unittest.cc +++ b/ash/services/chromebox_for_meetings/public/cpp/appid_util_unittest.cc
@@ -6,7 +6,7 @@ #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos { +namespace ash { namespace cfm { namespace { @@ -24,4 +24,4 @@ } // namespace } // namespace cfm -} // namespace chromeos +} // namespace ash
diff --git a/ash/services/chromebox_for_meetings/public/cpp/fake_service_connection.cc b/ash/services/chromebox_for_meetings/public/cpp/fake_service_connection.cc index fda513e..c959952 100644 --- a/ash/services/chromebox_for_meetings/public/cpp/fake_service_connection.cc +++ b/ash/services/chromebox_for_meetings/public/cpp/fake_service_connection.cc
@@ -12,9 +12,12 @@ #include "mojo/public/cpp/platform/platform_channel.h" #include "mojo/public/cpp/system/invitation.h" -namespace chromeos { +namespace ash { namespace cfm { +// TODO(https://crbug.com/1164001): remove after migrating to ash. +namespace mojom = ::chromeos::cfm::mojom; + FakeServiceConnectionImpl::FakeServiceConnectionImpl() = default; FakeServiceConnectionImpl::~FakeServiceConnectionImpl() = default; @@ -50,4 +53,4 @@ } } // namespace cfm -} // namespace chromeos +} // namespace ash
diff --git a/ash/services/chromebox_for_meetings/public/cpp/fake_service_connection.h b/ash/services/chromebox_for_meetings/public/cpp/fake_service_connection.h index 9a17d2c..0e5ebe5b 100644 --- a/ash/services/chromebox_for_meetings/public/cpp/fake_service_connection.h +++ b/ash/services/chromebox_for_meetings/public/cpp/fake_service_connection.h
@@ -11,16 +11,16 @@ #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" -namespace chromeos { +namespace ash { namespace cfm { -// Fake implementation of chromeos::cfm::ServiceConnection. +// Fake implementation of cfm::ServiceConnection. // For use with ServiceConnection::UseFakeServiceConnectionForTesting(). class FakeServiceConnectionImpl : public ServiceConnection { public: - using FakeBootstrapCallback = - base::OnceCallback<void(mojo::PendingReceiver<mojom::CfmServiceContext>, - bool)>; + using FakeBootstrapCallback = base::OnceCallback<void( + mojo::PendingReceiver<chromeos::cfm::mojom::CfmServiceContext>, + bool)>; FakeServiceConnectionImpl(); FakeServiceConnectionImpl(const FakeServiceConnectionImpl&) = delete; @@ -28,25 +28,22 @@ delete; ~FakeServiceConnectionImpl() override; - void BindServiceContext(mojo::PendingReceiver<mojom::CfmServiceContext> - pending_receiver) override; + void BindServiceContext( + mojo::PendingReceiver<chromeos::cfm::mojom::CfmServiceContext> + pending_receiver) override; void SetCallback(FakeBootstrapCallback callback); private: void CfMContextServiceStarted( - mojo::PendingReceiver<mojom::CfmServiceContext> pending_receiver, + mojo::PendingReceiver<chromeos::cfm::mojom::CfmServiceContext> + pending_receiver, bool is_available); FakeBootstrapCallback callback_; }; } // namespace cfm -} // namespace chromeos - -// TODO(https://crbug.com/1164001): remove after the migration is finished. -namespace ash::cfm { -using ::chromeos::cfm::FakeServiceConnectionImpl; -} +} // namespace ash #endif // ASH_SERVICES_CHROMEBOX_FOR_MEETINGS_PUBLIC_CPP_FAKE_SERVICE_CONNECTION_H_
diff --git a/ash/services/chromebox_for_meetings/public/cpp/fake_service_context.cc b/ash/services/chromebox_for_meetings/public/cpp/fake_service_context.cc index eea0944..c517f9e 100644 --- a/ash/services/chromebox_for_meetings/public/cpp/fake_service_context.cc +++ b/ash/services/chromebox_for_meetings/public/cpp/fake_service_context.cc
@@ -4,9 +4,12 @@ #include "ash/services/chromebox_for_meetings/public/cpp/fake_service_context.h" -namespace chromeos { +namespace ash { namespace cfm { +// TODO(https://crbug.com/1164001): remove after migrating to ash. +namespace mojom = ::chromeos::cfm::mojom; + FakeCfmServiceContext::FakeCfmServiceContext() = default; FakeCfmServiceContext::~FakeCfmServiceContext() = default; @@ -39,4 +42,4 @@ } } // namespace cfm -} // namespace chromeos +} // namespace ash
diff --git a/ash/services/chromebox_for_meetings/public/cpp/fake_service_context.h b/ash/services/chromebox_for_meetings/public/cpp/fake_service_context.h index fee8c379b..7499412 100644 --- a/ash/services/chromebox_for_meetings/public/cpp/fake_service_context.h +++ b/ash/services/chromebox_for_meetings/public/cpp/fake_service_context.h
@@ -10,14 +10,15 @@ #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" -namespace chromeos { +namespace ash { namespace cfm { -class FakeCfmServiceContext : public mojom::CfmServiceContext { +class FakeCfmServiceContext : public chromeos::cfm::mojom::CfmServiceContext { public: using FakeProvideAdaptorCallback = base::OnceCallback<void( const std::string& interface_name, - mojo::PendingRemote<mojom::CfmServiceAdaptor> adaptor_remote, + mojo::PendingRemote<chromeos::cfm::mojom::CfmServiceAdaptor> + adaptor_remote, ProvideAdaptorCallback callback)>; using FakeRequestBindServiceCallback = @@ -32,7 +33,8 @@ void ProvideAdaptor( const std::string& interface_name, - mojo::PendingRemote<mojom::CfmServiceAdaptor> adaptor_remote, + mojo::PendingRemote<chromeos::cfm::mojom::CfmServiceAdaptor> + adaptor_remote, ProvideAdaptorCallback callback) override; void RequestBindService(const std::string& interface_name, @@ -50,11 +52,6 @@ }; } // namespace cfm -} // namespace chromeos - -// TODO(https://crbug.com/1164001): remove after the migration is finished. -namespace ash::cfm { -using ::chromeos::cfm::FakeCfmServiceContext; -} +} // namespace ash #endif // ASH_SERVICES_CHROMEBOX_FOR_MEETINGS_PUBLIC_CPP_FAKE_SERVICE_CONTEXT_H_
diff --git a/ash/services/chromebox_for_meetings/public/cpp/service_connection.cc b/ash/services/chromebox_for_meetings/public/cpp/service_connection.cc index ac5e99b..ac26257 100644 --- a/ash/services/chromebox_for_meetings/public/cpp/service_connection.cc +++ b/ash/services/chromebox_for_meetings/public/cpp/service_connection.cc
@@ -15,11 +15,14 @@ #include "mojo/public/cpp/platform/platform_channel.h" #include "mojo/public/cpp/system/invitation.h" -namespace chromeos { +namespace ash { namespace cfm { namespace { +// TODO(https://crbug.com/1164001): remove after migrating to ash. +namespace mojom = ::chromeos::cfm::mojom; + constexpr char kPlatformErrorMessage[] = "CfmServiceContext bootstrap failed: "; // Real Impl of ServiceConnection. @@ -198,4 +201,4 @@ } } // namespace cfm -} // namespace chromeos +} // namespace ash
diff --git a/ash/services/chromebox_for_meetings/public/cpp/service_connection.h b/ash/services/chromebox_for_meetings/public/cpp/service_connection.h index 49496857..c7a3793b 100644 --- a/ash/services/chromebox_for_meetings/public/cpp/service_connection.h +++ b/ash/services/chromebox_for_meetings/public/cpp/service_connection.h
@@ -10,7 +10,7 @@ #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" -namespace chromeos { +namespace ash { namespace cfm { // Encapsulates a connection to the CfM Mojo Broker Service daemon via its Mojo @@ -28,7 +28,8 @@ // Bind to the CfM Service Context Daemon virtual void BindServiceContext( - mojo::PendingReceiver<mojom::CfmServiceContext> receiver) = 0; + mojo::PendingReceiver<chromeos::cfm::mojom::CfmServiceContext> + receiver) = 0; protected: ServiceConnection() = default; @@ -36,11 +37,6 @@ }; } // namespace cfm -} // namespace chromeos - -// TODO(https://crbug.com/1164001): remove after the migration is finished. -namespace ash::cfm { -using ::chromeos::cfm::ServiceConnection; -} +} // namespace ash #endif // ASH_SERVICES_CHROMEBOX_FOR_MEETINGS_PUBLIC_CPP_SERVICE_CONNECTION_H_
diff --git a/ash/services/chromebox_for_meetings/public/cpp/service_connection_unittest.cc b/ash/services/chromebox_for_meetings/public/cpp/service_connection_unittest.cc index a49db1f..275a3c6 100644 --- a/ash/services/chromebox_for_meetings/public/cpp/service_connection_unittest.cc +++ b/ash/services/chromebox_for_meetings/public/cpp/service_connection_unittest.cc
@@ -26,10 +26,13 @@ using ::testing::StrictMock; using ::testing::WithArgs; -namespace chromeos { +namespace ash { namespace cfm { namespace { +// TODO(https://crbug.com/1164001): remove after migrating to ash. +namespace mojom = ::chromeos::cfm::mojom; + class CfmServiceConnectionTest : public testing::Test { public: CfmServiceConnectionTest() = default; @@ -76,4 +79,4 @@ } // namespace } // namespace cfm -} // namespace chromeos +} // namespace ash
diff --git a/ash/webui/media_app_ui/resources/index.html b/ash/webui/media_app_ui/resources/index.html index 6345e2f..5f0e923 100644 --- a/ash/webui/media_app_ui/resources/index.html +++ b/ash/webui/media_app_ui/resources/index.html
@@ -18,13 +18,14 @@ /* Any changes to this file should also be copied to index_dark_light.html. */ /* - * This is the <iframe> style set for sandboxed guests that use - * guest_view_iframe_container.js. - * TODO(crbug/996088): Remove the iframe styles if switched to <webview>. + * This is the <iframe> style set for sandboxed chrome-untrusted:// guests. + * `user-select: none` is applied here to avoid the iframe obtaining a grey + * overlay if it is clicked while loading (b/227678322). */ iframe { border: 0; height: 100%; + user-select: none; width: 100%; } </style>
diff --git a/ash/webui/media_app_ui/resources/mock/js/app_main.js b/ash/webui/media_app_ui/resources/mock/js/app_main.js index ab25be1..26555b4 100644 --- a/ash/webui/media_app_ui/resources/mock/js/app_main.js +++ b/ash/webui/media_app_ui/resources/mock/js/app_main.js
@@ -172,6 +172,7 @@ this.replaceChild(child, this.currentMedia); this.currentMedia = child; + this.delegate.notifyCurrentFile(file.name, mimeType); } updateHandler() {
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 1742af6..f23eb6d6 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -7.20220402.0.1 +7.20220402.3.1
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1 index 1742af6..f23eb6d6 100644 --- a/build/fuchsia/linux_internal.sdk.sha1 +++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@ -7.20220402.0.1 +7.20220402.3.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 1742af6..f23eb6d6 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -7.20220402.0.1 +7.20220402.3.1
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc index 1ee4905..5a2ac99 100644 --- a/cc/trees/property_tree.cc +++ b/cc/trees/property_tree.cc
@@ -265,8 +265,6 @@ // loop below. DCHECK(IsDescendant(dest_id, current->id)); CombineInversesBetween(current->id, dest_id, &combined_transform); - DCHECK(combined_transform.IsApproximatelyIdentityOrTranslation( - SkDoubleToScalar(1e-4))); } size_t source_to_destination_size = source_to_destination.size();
diff --git a/chrome/VERSION b/chrome/VERSION index 1613a10..341ab095 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=102 MINOR=0 -BUILD=4981 +BUILD=4984 PATCH=0
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index 41a2626..b6933783 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm
@@ -1222,7 +1222,7 @@ enable = canOpenNewBrowser; } else if (action == @selector(toggleConfirmToQuit:)) { [self updateConfirmToQuitPrefMenuItem:static_cast<NSMenuItem*>(item)]; - enable = YES; + enable = [self shouldEnableConfirmToQuitPrefMenuItem]; } return enable; } @@ -1551,6 +1551,12 @@ [item setState:enabled ? NSOnState : NSOffState]; } +- (BOOL)shouldEnableConfirmToQuitPrefMenuItem { + const PrefService* prefService = g_browser_process->local_state(); + return !prefService->FindPreference(prefs::kConfirmToQuitEnabled) + ->IsManaged(); +} + - (void)registerServicesMenuTypesTo:(NSApplication*)app { // Note that RenderWidgetHostViewCocoa implements NSServicesRequests which // handles requests from services.
diff --git a/chrome/browser/apps/app_service/publishers/borealis_apps.cc b/chrome/browser/apps/app_service/publishers/borealis_apps.cc index e9cb0ed8..6f03c10 100644 --- a/chrome/browser/apps/app_service/publishers/borealis_apps.cc +++ b/chrome/browser/apps/app_service/publishers/borealis_apps.cc
@@ -440,17 +440,6 @@ auto app = std::make_unique<App>(AppType::kBorealis, app_id); app->readiness = Readiness::kUninstalledByUser; AppPublisher::Publish(std::move(app)); - - // If main app is removed, re-add the Borealis launcher. - if (app_id == borealis::kClientAppId) { - bool borealis_allowed = borealis::BorealisService::GetForProfile(profile_) - ->Features() - .MightBeAllowed() == - borealis::BorealisFeatures::AllowStatus::kAllowed; - PublisherBase::Publish(GetBorealisLauncher(profile_, borealis_allowed), - subscribers_); - AppPublisher::Publish(CreateBorealisLauncher(profile_, borealis_allowed)); - } } for (const std::string& app_id : inserted_apps) { @@ -460,18 +449,6 @@ AppPublisher::Publish( CreateApp(*registration, /*generate_new_icon_key=*/true)); } - // If main app is installed, remove the Borealis launcher. - if (app_id == borealis::kClientAppId) { - apps::mojom::AppPtr mojom_app = apps::mojom::App::New(); - mojom_app->app_type = apps::mojom::AppType::kBorealis; - mojom_app->app_id = borealis::kInstallerAppId; - mojom_app->readiness = apps::mojom::Readiness::kUninstalledByUser; - PublisherBase::Publish(std::move(mojom_app), subscribers_); - - auto app = std::make_unique<App>(AppType::kBorealis, app_id); - app->readiness = Readiness::kUninstalledByUser; - AppPublisher::Publish(std::move(app)); - } } }
diff --git a/chrome/browser/ash/apps/apk_web_app_service.cc b/chrome/browser/ash/apps/apk_web_app_service.cc index 0f554d8..d740cde9 100644 --- a/chrome/browser/ash/apps/apk_web_app_service.cc +++ b/chrome/browser/ash/apps/apk_web_app_service.cc
@@ -552,30 +552,30 @@ bool is_web_only_twa, const absl::optional<std::string> sha256_fingerprint, webapps::InstallResultCode code) { - // Do nothing: any error cancels installation. - if (code != webapps::InstallResultCode::kSuccessNewInstall) - return; + if (code == webapps::InstallResultCode::kSuccessNewInstall) { + // Set a pref to map |web_app_id| to |package_name| for future + // uninstallation. + DictionaryPrefUpdate dict_update(profile_->GetPrefs(), + kWebAppToApkDictPref); + dict_update->SetPath({web_app_id, kPackageNameKey}, + base::Value(package_name)); - // Set a pref to map |web_app_id| to |package_name| for future uninstallation. - DictionaryPrefUpdate dict_update(profile_->GetPrefs(), kWebAppToApkDictPref); - dict_update->SetPath({web_app_id, kPackageNameKey}, - base::Value(package_name)); + // Set that the app should not be removed next time the ARC container starts + // up. This is to ensure that web apps which are uninstalled in the browser + // while the ARC container isn't running can be marked for uninstallation + // when the container starts up again. + dict_update->SetPath({web_app_id, kShouldRemoveKey}, base::Value(false)); - // Set that the app should not be removed next time the ARC container starts - // up. This is to ensure that web apps which are uninstalled in the browser - // while the ARC container isn't running can be marked for uninstallation - // when the container starts up again. - dict_update->SetPath({web_app_id, kShouldRemoveKey}, base::Value(false)); + // Set a pref to indicate if the |web_app_id| is a web-only TWA. + dict_update->SetPath({web_app_id, kIsWebOnlyTwaKey}, + base::Value(is_web_only_twa)); - // Set a pref to indicate if the |web_app_id| is a web-only TWA. - dict_update->SetPath({web_app_id, kIsWebOnlyTwaKey}, - base::Value(is_web_only_twa)); - - if (sha256_fingerprint.has_value()) { - // Set a pref to hold the APK's certificate SHA256 fingerprint to use for - // digital asset link verification. - dict_update->SetPath({web_app_id, kSha256FingerprintKey}, - base::Value(sha256_fingerprint.value())); + if (sha256_fingerprint.has_value()) { + // Set a pref to hold the APK's certificate SHA256 fingerprint to use for + // digital asset link verification. + dict_update->SetPath({web_app_id, kSha256FingerprintKey}, + base::Value(sha256_fingerprint.value())); + } } // For testing.
diff --git a/chrome/browser/ash/crostini/crostini_export_import.cc b/chrome/browser/ash/crostini/crostini_export_import.cc index 3cdd651..123abdc 100644 --- a/chrome/browser/ash/crostini/crostini_export_import.cc +++ b/chrome/browser/ash/crostini/crostini_export_import.cc
@@ -293,18 +293,17 @@ }, path), base::BindOnce( - &guest_os::GuestOsSharePath::SharePath, - base::Unretained( - guest_os::GuestOsSharePath::GetForProfile(profile_)), - kCrostiniDefaultVmName, path, false, + &CrostiniExportImport::EnsureLxdStartedThenSharePath, + weak_ptr_factory_.GetWeakPtr(), operation_data->container_id, + path, false, base::BindOnce(&CrostiniExportImport::ExportAfterSharing, weak_ptr_factory_.GetWeakPtr(), operation_data->container_id, path, std::move(callback)))); break; case ExportImportType::IMPORT: - guest_os::GuestOsSharePath::GetForProfile(profile_)->SharePath( - kCrostiniDefaultVmName, path, false, + CrostiniExportImport::EnsureLxdStartedThenSharePath( + operation_data->container_id, path, false, base::BindOnce(&CrostiniExportImport::ImportAfterSharing, weak_ptr_factory_.GetWeakPtr(), operation_data->container_id, path, @@ -313,6 +312,36 @@ } } +void CrostiniExportImport::EnsureLxdStartedThenSharePath( + const ContainerId& container_id, + const base::FilePath& path, + bool persist, + guest_os::GuestOsSharePath::SharePathCallback callback) { + auto* crostini_manager = crostini::CrostiniManager::GetForProfile(profile_); + crostini::CrostiniManager::RestartOptions options; + options.stop_after_lxd_available = true; + crostini_manager->RestartCrostiniWithOptions( + container_id, std::move(options), + base::BindOnce(&CrostiniExportImport::SharePath, + weak_ptr_factory_.GetWeakPtr(), container_id.vm_name, path, + std::move(callback))); +} + +void CrostiniExportImport::SharePath( + const std::string& vm_name, + const base::FilePath& path, + guest_os::GuestOsSharePath::SharePathCallback callback, + crostini::CrostiniResult result) { + if (result != CrostiniResult::SUCCESS) { + std::move(callback).Run( + base::FilePath(), false, + base::StringPrintf("VM could not be started: %d", result)); + return; + } + guest_os::GuestOsSharePath::GetForProfile(profile_)->SharePath( + vm_name, path, false, std::move(callback)); +} + void CrostiniExportImport::ExportAfterSharing( const ContainerId& container_id, const base::FilePath& path,
diff --git a/chrome/browser/ash/crostini/crostini_export_import.h b/chrome/browser/ash/crostini/crostini_export_import.h index c62ba89..9724890 100644 --- a/chrome/browser/ash/crostini/crostini_export_import.h +++ b/chrome/browser/ash/crostini/crostini_export_import.h
@@ -16,6 +16,7 @@ #include "base/time/time.h" #include "chrome/browser/ash/crostini/crostini_export_import_notification_controller.h" #include "chrome/browser/ash/crostini/crostini_manager.h" +#include "chrome/browser/ash/guest_os/guest_os_share_path.h" #include "components/keyed_service/core/keyed_service.h" class Profile; @@ -186,6 +187,19 @@ base::FilePath path, CrostiniManager::CrostiniResultCallback callback); + // Restart VM with LXD if required and share the file path with VM. + void EnsureLxdStartedThenSharePath( + const ContainerId& container_id, + const base::FilePath& path, + bool persist, + guest_os::GuestOsSharePath::SharePathCallback callback); + + // Share the file path with VM after VM has been restarted. + void SharePath(const std::string& vm_name, + const base::FilePath& path, + guest_os::GuestOsSharePath::SharePathCallback callback, + crostini::CrostiniResult result); + // crostini::ExportContainerProgressObserver implementation. void OnExportContainerProgress(const ContainerId& container_id, const StreamingExportStatus& status) override;
diff --git a/chrome/browser/ash/crostini/crostini_export_import_unittest.cc b/chrome/browser/ash/crostini/crostini_export_import_unittest.cc index 200c4b3..1f04eb6 100644 --- a/chrome/browser/ash/crostini/crostini_export_import_unittest.cc +++ b/chrome/browser/ash/crostini/crostini_export_import_unittest.cc
@@ -212,6 +212,7 @@ tarball_, 0, crostini_export_import_->NewOperationData(ExportImportType::EXPORT)); task_environment_.RunUntilIdle(); + EXPECT_TRUE(fake_seneschal_client_->share_path_called()); base::WeakPtr<CrostiniExportImportNotificationController> controller = GetController(); ASSERT_NE(controller, nullptr); @@ -454,6 +455,7 @@ tarball_, 0, crostini_export_import_->NewOperationData(ExportImportType::IMPORT)); task_environment_.RunUntilIdle(); + EXPECT_TRUE(fake_seneschal_client_->share_path_called()); base::WeakPtr<CrostiniExportImportNotificationController> controller = GetController(); ASSERT_NE(controller, nullptr);
diff --git a/chrome/browser/ash/input_method/assistive_suggester.cc b/chrome/browser/ash/input_method/assistive_suggester.cc index 69320d12..c106e54 100644 --- a/chrome/browser/ash/input_method/assistive_suggester.cc +++ b/chrome/browser/ash/input_method/assistive_suggester.cc
@@ -14,6 +14,7 @@ #include "base/metrics/user_metrics.h" #include "base/strings/string_util.h" #include "chrome/browser/ash/input_method/assistive_suggester_prefs.h" +#include "chrome/browser/ash/input_method/assistive_suggester_switch.h" #include "chrome/browser/ash/input_method/suggestion_handler_interface.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/browser_finder.h" @@ -430,12 +431,24 @@ return grammar_fragment_opt != absl::nullopt; } -bool AssistiveSuggester::OnSurroundingTextChanged(const std::u16string& text, +void AssistiveSuggester::OnSurroundingTextChanged(const std::u16string& text, int cursor_pos, int anchor_pos) { + suggester_switch_->GetEnabledSuggestions(base::BindOnce( + &AssistiveSuggester::ProcessOnSurroundingTextChanged, + weak_ptr_factory_.GetWeakPtr(), text, cursor_pos, anchor_pos)); +} + +void AssistiveSuggester::ProcessOnSurroundingTextChanged( + const std::u16string& text, + int cursor_pos, + int anchor_pos, + const AssistiveSuggesterSwitch::EnabledSuggestions& enabled_suggestions) { + // TODO(b/225988020): Make record assistive match metrics take enabled + // suggestions. RecordAssistiveMatchMetrics(text, cursor_pos, anchor_pos); if (!IsAssistiveFeatureEnabled() || context_id_ == -1) - return false; + return; if (IsMultiWordSuggestEnabled()) { // Only multi word cares about tracking the current state of the text field @@ -444,16 +457,17 @@ } if (WithinGrammarFragment(cursor_pos, anchor_pos) || - !TrySuggestWithSurroundingText(text, cursor_pos, anchor_pos)) { + !TrySuggestWithSurroundingText(text, cursor_pos, anchor_pos, + enabled_suggestions)) { DismissSuggestion(); } - return IsSuggestionShown(); } bool AssistiveSuggester::TrySuggestWithSurroundingText( const std::u16string& text, int cursor_pos, - int anchor_pos) { + int anchor_pos, + const AssistiveSuggesterSwitch::EnabledSuggestions& enabled_suggestions) { int len = static_cast<int>(text.length()); if (cursor_pos > 0 && cursor_pos <= len && cursor_pos == anchor_pos && (cursor_pos == len || base::IsAsciiWhitespace(text[cursor_pos])) && @@ -463,7 +477,7 @@ cursor_pos); } if (IsAssistPersonalInfoEnabled() && - suggester_switch_->IsPersonalInfoSuggestionAllowed() && + enabled_suggestions.personal_info_suggestions && personal_info_suggester_.TrySuggestWithSurroundingText(text, cursor_pos)) { current_suggester_ = &personal_info_suggester_; @@ -473,7 +487,7 @@ return true; } else if (IsEmojiSuggestAdditionEnabled() && !IsEnhancedEmojiSuggestEnabled() && - suggester_switch_->IsEmojiSuggestionAllowed() && + enabled_suggestions.emoji_suggestions && emoji_suggester_.TrySuggestWithSurroundingText(text, cursor_pos)) { current_suggester_ = &emoji_suggester_;
diff --git a/chrome/browser/ash/input_method/assistive_suggester.h b/chrome/browser/ash/input_method/assistive_suggester.h index 9b8fc26c..8c5982a 100644 --- a/chrome/browser/ash/input_method/assistive_suggester.h +++ b/chrome/browser/ash/input_method/assistive_suggester.h
@@ -61,7 +61,7 @@ // Called when a surrounding text is changed. // Returns true if it changes the surrounding text, e.g. a suggestion is // generated or dismissed. - bool OnSurroundingTextChanged(const std::u16string& text, + void OnSurroundingTextChanged(const std::u16string& text, int cursor_pos, int anchor_pos); @@ -84,11 +84,20 @@ } private: + // Callback that is run after enabled_suggestions is received. + void ProcessOnSurroundingTextChanged( + const std::u16string& text, + int cursor_pos, + int anchor_pos, + const AssistiveSuggesterSwitch::EnabledSuggestions& enabled_suggestions); + // Returns if any suggestion text should be displayed according to the // surrounding text information. - bool TrySuggestWithSurroundingText(const std::u16string& text, - int cursor_pos, - int anchor_pos); + bool TrySuggestWithSurroundingText( + const std::u16string& text, + int cursor_pos, + int anchor_pos, + const AssistiveSuggesterSwitch::EnabledSuggestions& enabled_suggestions); void DismissSuggestion();
diff --git a/chrome/browser/ash/input_method/assistive_suggester_unittest.cc b/chrome/browser/ash/input_method/assistive_suggester_unittest.cc index 4c1cbc3..495e30b 100644 --- a/chrome/browser/ash/input_method/assistive_suggester_unittest.cc +++ b/chrome/browser/ash/input_method/assistive_suggester_unittest.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_profile.h" +#include "components/autofill/core/browser/test_personal_data_manager.h" #include "components/prefs/scoped_user_pref_update.h" #include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" @@ -29,6 +30,7 @@ using ime::TextSuggestion; using ime::TextSuggestionMode; using ime::TextSuggestionType; +using EnabledSuggestions = AssistiveSuggesterSwitch::EnabledSuggestions; const char kUsEnglishEngineId[] = "xkb:us::eng"; const char kSpainSpanishEngineId[] = "xkb:es::spa"; @@ -273,10 +275,9 @@ assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{ - .emoji_suggestions = true, - .multi_word_suggestions = true, - .personal_info_suggestions = true})); + EnabledSuggestions{.emoji_suggestions = true, + .multi_word_suggestions = true, + .personal_info_suggestions = true})); assistive_suggester_->OnActivate(kUsEnglishEngineId); @@ -295,8 +296,7 @@ /*disabled_features=*/{}); assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), - std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{})); + std::make_unique<FakeSuggesterSwitch>(EnabledSuggestions{})); SetInputMethodOptions(*profile_, /*predictive_writing_enabled=*/true); assistive_suggester_->OnActivate(kUsEnglishEngineId); @@ -312,8 +312,7 @@ /*disabled_features=*/{}); assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), - std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{})); + std::make_unique<FakeSuggesterSwitch>(EnabledSuggestions{})); SetInputMethodOptions(*profile_, /*predictive_writing_enabled=*/true); assistive_suggester_->OnActivate(kUsEnglishEngineId); @@ -334,8 +333,7 @@ assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{.multi_word_suggestions = - true})); + EnabledSuggestions{.multi_word_suggestions = true})); SetInputMethodOptions(*profile_, /*predictive_writing_enabled=*/false); assistive_suggester_->OnActivate(kUsEnglishEngineId); @@ -357,8 +355,7 @@ assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{.multi_word_suggestions = - true})); + EnabledSuggestions{.multi_word_suggestions = true})); SetInputMethodOptions(*profile_, /*predictive_writing_enabled=*/true); assistive_suggester_->OnActivate(kUsEnglishEngineId); @@ -380,8 +377,7 @@ assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{.multi_word_suggestions = - true})); + EnabledSuggestions{.multi_word_suggestions = true})); SetInputMethodOptions(*profile_, /*predictive_writing_enabled=*/true); assistive_suggester_->OnActivate(kSpainSpanishEngineId); @@ -402,8 +398,7 @@ assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{.multi_word_suggestions = - true})); + EnabledSuggestions{.multi_word_suggestions = true})); SetInputMethodOptions(*profile_, /*predictive_writing_enabled=*/true); assistive_suggester_->OnActivate(kUsEnglishEngineId); @@ -416,6 +411,82 @@ AssistiveTextInputState::kFeatureEnabled, 1); } +class AssistiveSuggesterPersonalInfoTest : public testing::Test { + protected: + AssistiveSuggesterPersonalInfoTest() { + profile_ = std::make_unique<TestingProfile>(); + } + + void SetUp() override { + suggestion_handler_ = std::make_unique<FakeSuggestionHandler>(); + assistive_suggester_ = std::make_unique<AssistiveSuggester>( + suggestion_handler_.get(), profile_.get(), + std::make_unique<FakeSuggesterSwitch>(EnabledSuggestions{ + .personal_info_suggestions = true, + })); + personal_data_ = std::make_unique<autofill::TestPersonalDataManager>(); + personal_data_->SetPrefService(profile_->GetPrefs()); + + feature_list_.InitWithFeatures( + /*enabled_features=*/{features::kAssistPersonalInfo, + features::kAssistPersonalInfoEmail}, + /*disabled_features=*/{}); + + profile_->GetPrefs()->SetBoolean(prefs::kAssistPersonalInfoEnabled, true); + SetInputMethodOptions(*profile_, /*predictive_writing_enabled=*/true); + profile_->set_profile_name(base::UTF16ToUTF8(email_)); + chrome_keyboard_controller_client_ = + ChromeKeyboardControllerClient::CreateForTest(); + chrome_keyboard_controller_client_->set_keyboard_visible_for_test(false); + } + + content::BrowserTaskEnvironment task_environment_; + base::test::ScopedFeatureList feature_list_; + std::unique_ptr<TestingProfile> profile_; + std::unique_ptr<AssistiveSuggester> assistive_suggester_; + std::unique_ptr<FakeSuggestionHandler> suggestion_handler_; + std::unique_ptr<autofill::TestPersonalDataManager> personal_data_; + base::HistogramTester histogram_tester_; + std::unique_ptr<ChromeKeyboardControllerClient> + chrome_keyboard_controller_client_; + + const std::u16string email_ = u"johnwayne@me.xyz"; +}; + +TEST_F(AssistiveSuggesterPersonalInfoTest, ShouldNotSuggestWhenPrefDisabled) { + profile_->GetPrefs()->SetBoolean(prefs::kAssistPersonalInfoEnabled, false); + assistive_suggester_->OnActivate(kUsEnglishEngineId); + assistive_suggester_->OnFocus(5); + + assistive_suggester_->OnSurroundingTextChanged(u"my email is ", 12, 12); + + EXPECT_FALSE(suggestion_handler_->GetShowingSuggestion()); +} + +TEST_F(AssistiveSuggesterPersonalInfoTest, ShouldNotSuggestWhenSwitchDisabled) { + assistive_suggester_ = std::make_unique<AssistiveSuggester>( + suggestion_handler_.get(), profile_.get(), + std::make_unique<FakeSuggesterSwitch>(EnabledSuggestions{ + .personal_info_suggestions = false, + })); + assistive_suggester_->OnActivate(kUsEnglishEngineId); + assistive_suggester_->OnFocus(5); + + assistive_suggester_->OnSurroundingTextChanged(u"my email is ", 12, 12); + + EXPECT_FALSE(suggestion_handler_->GetShowingSuggestion()); +} + +TEST_F(AssistiveSuggesterPersonalInfoTest, ShouldReturnPrefixBasedSuggestions) { + assistive_suggester_->OnActivate(kUsEnglishEngineId); + assistive_suggester_->OnFocus(5); + + assistive_suggester_->OnSurroundingTextChanged(u"my email is ", 12, 12); + + EXPECT_TRUE(suggestion_handler_->GetShowingSuggestion()); + EXPECT_EQ(suggestion_handler_->GetSuggestionText(), u"johnwayne@me.xyz"); +} + class AssistiveSuggesterMultiWordTest : public testing::Test { protected: AssistiveSuggesterMultiWordTest() { @@ -426,10 +497,9 @@ suggestion_handler_ = std::make_unique<FakeSuggestionHandler>(); assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), - std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{ - .multi_word_suggestions = true, - })); + std::make_unique<FakeSuggesterSwitch>(EnabledSuggestions{ + .multi_word_suggestions = true, + })); feature_list_.InitWithFeatures( /*enabled_features=*/{features::kAssistMultiWord}, @@ -486,6 +556,25 @@ EXPECT_FALSE(suggestion_handler_->GetShowingSuggestion()); } +TEST_F(AssistiveSuggesterMultiWordTest, ShouldNotSuggestWhenSwitchDisabled) { + assistive_suggester_ = std::make_unique<AssistiveSuggester>( + suggestion_handler_.get(), profile_.get(), + std::make_unique<FakeSuggesterSwitch>(EnabledSuggestions{ + .multi_word_suggestions = false, + })); + std::vector<TextSuggestion> suggestions = { + TextSuggestion{.mode = TextSuggestionMode::kPrediction, + .type = TextSuggestionType::kMultiWord, + .text = "hello there"}}; + assistive_suggester_->OnActivate(kUsEnglishEngineId); + assistive_suggester_->OnFocus(5); + assistive_suggester_->OnSurroundingTextChanged(u"", 0, 0); + + assistive_suggester_->OnExternalSuggestionsUpdated(suggestions); + + EXPECT_FALSE(suggestion_handler_->GetShowingSuggestion()); +} + TEST_F(AssistiveSuggesterMultiWordTest, MatchMetricRecordedWhenOneOrMoreSuggestions) { std::vector<TextSuggestion> suggestions = { @@ -526,8 +615,7 @@ DisableMetricNotRecordedWhenNoSuggestionAndMultiWordBlocked) { assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), - std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{})); + std::make_unique<FakeSuggesterSwitch>(EnabledSuggestions{})); assistive_suggester_->OnActivate(kUsEnglishEngineId); assistive_suggester_->OnFocus(5); @@ -542,8 +630,7 @@ DisableMetricRecordedWhenGivenSuggestionAndMultiWordBlocked) { assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), - std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{})); + std::make_unique<FakeSuggesterSwitch>(EnabledSuggestions{})); std::vector<TextSuggestion> suggestions = { TextSuggestion{.mode = TextSuggestionMode::kPrediction, .type = TextSuggestionType::kMultiWord, @@ -708,10 +795,9 @@ suggestion_handler_ = std::make_unique<FakeSuggestionHandler>(); assistive_suggester_ = std::make_unique<AssistiveSuggester>( suggestion_handler_.get(), profile_.get(), - std::make_unique<FakeSuggesterSwitch>( - FakeSuggesterSwitch::EnabledSuggestions{ - .emoji_suggestions = true, - })); + std::make_unique<FakeSuggesterSwitch>(EnabledSuggestions{ + .emoji_suggestions = true, + })); assistive_suggester_->get_emoji_suggester_for_testing() ->LoadEmojiMapForTesting(kEmojiData); @@ -744,16 +830,29 @@ assistive_suggester_->OnActivate(kUsEnglishEngineId); assistive_suggester_->OnFocus(5); + assistive_suggester_->OnSurroundingTextChanged(u"arrow ", 6, 6); - EXPECT_FALSE(assistive_suggester_->OnSurroundingTextChanged(u"arrow ", 6, 6)); + EXPECT_FALSE(suggestion_handler_->GetShowingSuggestion()); +} + +TEST_F(AssistiveSuggesterEmojiTest, ShouldNotSuggestWhenSwitchDisabled) { + assistive_suggester_ = std::make_unique<AssistiveSuggester>( + suggestion_handler_.get(), profile_.get(), + std::make_unique<FakeSuggesterSwitch>(EnabledSuggestions{ + .emoji_suggestions = false, + })); + assistive_suggester_->OnActivate(kUsEnglishEngineId); + assistive_suggester_->OnFocus(5); + assistive_suggester_->OnSurroundingTextChanged(u"arrow ", 6, 6); + EXPECT_FALSE(suggestion_handler_->GetShowingSuggestion()); } TEST_F(AssistiveSuggesterEmojiTest, ShouldReturnPrefixBasedEmojiSuggestions) { assistive_suggester_->OnActivate(kUsEnglishEngineId); assistive_suggester_->OnFocus(5); + assistive_suggester_->OnSurroundingTextChanged(u"arrow ", 6, 6); - EXPECT_TRUE(assistive_suggester_->OnSurroundingTextChanged(u"arrow ", 6, 6)); EXPECT_TRUE(suggestion_handler_->GetShowingSuggestion()); EXPECT_EQ(suggestion_handler_->GetSuggestionText(), u"←"); }
diff --git a/chrome/browser/ash/input_method/ui/suggestion_view.cc b/chrome/browser/ash/input_method/ui/suggestion_view.cc index bc0b37c..5d6e42b 100644 --- a/chrome/browser/ash/input_method/ui/suggestion_view.cc +++ b/chrome/browser/ash/input_method/ui/suggestion_view.cc
@@ -212,7 +212,7 @@ views::StyledLabel::RangeStyleInfo suggestion_style; suggestion_style.custom_font = kSuggestionFont; suggestion_style.override_color = - ResolveSemanticColor(cros_styles::ColorName::kTextColorDisabled); + ResolveSemanticColor(cros_styles::ColorName::kTextColorSecondary); suggestion_label_->AddStyleRange(gfx::Range(confirmed_length, text.length()), suggestion_style);
diff --git a/chrome/browser/ash/policy/networking/euicc_status_uploader.cc b/chrome/browser/ash/policy/networking/euicc_status_uploader.cc index bd5f73b..8ca979b7 100644 --- a/chrome/browser/ash/policy/networking/euicc_status_uploader.cc +++ b/chrome/browser/ash/policy/networking/euicc_status_uploader.cc
@@ -11,7 +11,8 @@ #include "chrome/browser/ash/settings/device_settings_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "chromeos/network/managed_network_configuration_handler.h" +#include "chromeos/network/cellular_esim_profile_handler.h" +#include "chromeos/network/managed_cellular_pref_handler.h" #include "chromeos/network/network_event_log.h" #include "chromeos/network/network_handler.h" #include "chromeos/network/network_state_handler.h" @@ -92,14 +93,19 @@ hermes_euicc_observation_.Observe(chromeos::HermesEuiccClient::Get()); cloud_policy_client_observation_.Observe(client_); - network_handler_ = chromeos::NetworkHandler::Get(); - network_handler_->managed_network_configuration_handler()->AddObserver(this); - network_handler_->network_state_handler()->AddObserver(this, FROM_HERE); + auto* network_handler = chromeos::NetworkHandler::Get(); + network_handler->managed_cellular_pref_handler()->AddObserver(this); + managed_network_configuration_handler_ = + network_handler->managed_network_configuration_handler(); + managed_network_configuration_handler_->AddObserver(this); } EuiccStatusUploader::~EuiccStatusUploader() { - if (network_handler_) - OnShuttingDown(); + if (chromeos::NetworkHandler::IsInitialized()) + chromeos::NetworkHandler::Get() + ->managed_cellular_pref_handler() + ->RemoveObserver(this); + OnManagedNetworkConfigurationHandlerShuttingDown(); } // static @@ -135,11 +141,12 @@ return upload_request; } -void EuiccStatusUploader::OnShuttingDown() { - network_handler_->network_state_handler()->RemoveObserver(this, FROM_HERE); - network_handler_->managed_network_configuration_handler()->RemoveObserver( - this); - network_handler_ = nullptr; +void EuiccStatusUploader::OnManagedNetworkConfigurationHandlerShuttingDown() { + if (managed_network_configuration_handler_ && + managed_network_configuration_handler_->HasObserver(this)) { + managed_network_configuration_handler_->RemoveObserver(this); + } + managed_network_configuration_handler_ = nullptr; } void EuiccStatusUploader::OnRegistrationStateChanged( @@ -159,7 +166,7 @@ MaybeUploadStatus(); } -void EuiccStatusUploader::NetworkListChanged() { +void EuiccStatusUploader::OnManagedCellularPrefChanged() { MaybeUploadStatus(); } @@ -184,53 +191,27 @@ base::Value esim_profiles(base::Value::Type::LIST); - chromeos::NetworkStateHandler::NetworkStateList networks; - network_handler_->network_state_handler()->GetNetworkListByType( - ash::NetworkTypePattern::Cellular(), - /*configured_only=*/false, /*visible_only=*/false, - /*limit=*/0, &networks); - - onc::ONCSource onc_source = onc::ONC_SOURCE_NONE; - for (const chromeos::NetworkState* network : networks) { - // Report only managed profiles. - if (!network->IsManagedByPolicy()) - continue; - + for (const auto& esim_profile : chromeos::NetworkHandler::Get() + ->cellular_esim_profile_handler() + ->GetESimProfiles()) { // Do not report non-provisioned cellular networks. - if (network->iccid().empty()) + if (esim_profile.iccid().empty()) continue; - // Read the SMDP address from ONC. - const base::Value* policy = - network_handler_->managed_network_configuration_handler() - ->FindPolicyByGUID( - /*userhash=*/std::string(), network->guid(), &onc_source); - if (!policy) { - NET_LOG(EVENT) << "No device policy found for network guid: " - << network->guid(); - continue; - } - - const base::Value* cellular_dict = - policy->FindDictKey(::onc::network_config::kCellular); - if (!cellular_dict) { - NET_LOG(EVENT) - << "No Cellular properties found in device policy for network guid: " - << network->guid(); - continue; - } - const std::string* smdp_address = - cellular_dict->FindStringKey(::onc::cellular::kSMDPAddress); + chromeos::NetworkHandler::Get() + ->managed_cellular_pref_handler() + ->GetSmdpAddressFromIccid(esim_profile.iccid()); + // Report only managed profiles with a SMDP address. if (!smdp_address) continue; - base::Value esim_profile(base::Value::Type::DICTIONARY); - esim_profile.SetStringKey(kLastUploadedEuiccStatusESimProfilesIccidKey, - network->iccid()); - esim_profile.SetStringKey( + base::Value esim_profile_to_add(base::Value::Type::DICTIONARY); + esim_profile_to_add.SetStringKey( + kLastUploadedEuiccStatusESimProfilesIccidKey, esim_profile.iccid()); + esim_profile_to_add.SetStringKey( kLastUploadedEuiccStatusESimProfilesSmdpAddressKey, *smdp_address); - esim_profiles.Append(std::move(esim_profile)); + esim_profiles.Append(std::move(esim_profile_to_add)); } status.SetPath(kLastUploadedEuiccStatusESimProfilesKey, @@ -254,8 +235,8 @@ return; } - if (!network_handler_) { - LOG(WARNING) << "NetworkHandler is not initialized."; + if (!managed_network_configuration_handler_) { + LOG(WARNING) << "ManageNetworkConfigurationHandler is not initialized."; return; }
diff --git a/chrome/browser/ash/policy/networking/euicc_status_uploader.h b/chrome/browser/ash/policy/networking/euicc_status_uploader.h index a76e4c19..ed6d935b 100644 --- a/chrome/browser/ash/policy/networking/euicc_status_uploader.h +++ b/chrome/browser/ash/policy/networking/euicc_status_uploader.h
@@ -9,9 +9,9 @@ #include "base/scoped_observation.h" #include "chromeos/dbus/hermes/hermes_euicc_client.h" #include "chromeos/dbus/hermes/hermes_manager_client.h" +#include "chromeos/network/managed_cellular_pref_handler.h" +#include "chromeos/network/managed_network_configuration_handler.h" #include "chromeos/network/network_policy_observer.h" -#include "chromeos/network/network_state_handler.h" -#include "chromeos/network/network_state_handler_observer.h" #include "components/policy/core/common/cloud/cloud_policy_client.h" #include "net/base/backoff_entry.h" @@ -30,11 +30,12 @@ // Class responsible for uploading the information about the current ESim // profiles to DMServer. -class EuiccStatusUploader : public chromeos::NetworkPolicyObserver, - public chromeos::NetworkStateHandlerObserver, - public chromeos::HermesManagerClient::Observer, - public chromeos::HermesEuiccClient::Observer, - public CloudPolicyClient::Observer { +class EuiccStatusUploader + : public chromeos::NetworkPolicyObserver, + public chromeos::HermesManagerClient::Observer, + public chromeos::HermesEuiccClient::Observer, + public chromeos::ManagedCellularPrefHandler::Observer, + public CloudPolicyClient::Observer { public: EuiccStatusUploader(CloudPolicyClient* client, PrefService* local_state); ~EuiccStatusUploader() override; @@ -74,10 +75,7 @@ // chromeos::NetworkPolicyObserver: void PoliciesApplied(const std::string& userhash) override; - - // chromeos::NetworkStateHandlerObserver: - void NetworkListChanged() override; - void OnShuttingDown() override; + void OnManagedNetworkConfigurationHandlerShuttingDown() override; // CloudPolicyClient::Observer: void OnRegistrationStateChanged(CloudPolicyClient* client) override; @@ -92,6 +90,9 @@ // chromeos::HermesEuiccClient: void OnEuiccReset(const dbus::ObjectPath& euicc_path) override; + // chromeos::ManagedCellularPrefHandler: + void OnManagedCellularPrefChanged() override; + base::Value GetCurrentEuiccStatus() const; void MaybeUploadStatus(); void MaybeUploadStatusWithDelay(); @@ -124,7 +125,8 @@ base::ScopedObservation<CloudPolicyClient, CloudPolicyClient::Observer> cloud_policy_client_observation_{this}; - chromeos::NetworkHandler* network_handler_ = nullptr; + chromeos::ManagedNetworkConfigurationHandler* + managed_network_configuration_handler_ = nullptr; base::WeakPtrFactory<EuiccStatusUploader> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/ash/policy/networking/euicc_status_uploader_unittest.cc b/chrome/browser/ash/policy/networking/euicc_status_uploader_unittest.cc index 8a042159..01b9a39b6 100644 --- a/chrome/browser/ash/policy/networking/euicc_status_uploader_unittest.cc +++ b/chrome/browser/ash/policy/networking/euicc_status_uploader_unittest.cc
@@ -12,6 +12,7 @@ #include "chrome/test/base/testing_browser_process.h" #include "chromeos/components/onc/onc_utils.h" #include "chromeos/dbus/shill/shill_manager_client.h" +#include "chromeos/network/managed_cellular_pref_handler.h" #include "chromeos/network/managed_network_configuration_handler.h" #include "chromeos/network/network_handler_test_helper.h" #include "chromeos/network/network_ui_data.h" @@ -99,16 +100,18 @@ "esim_profiles":[],"euicc_count":2 })"; -const char kDefaultProfilePath[] = "/profile/default"; - -const char kCellularDevicePath[] = "/service/cellular1"; -const char kCellularDevicePath2[] = "/service/cellular2"; +const char kCellularServicePath[] = "/service/cellular1"; +const char kCellularServicePath2[] = "/service/cellular2"; +const char kCelluarProfilePath[] = "/org/chromium/Hermes/Profile/1"; +const char kCelluarProfilePath2[] = "/org/chromium/Hermes/Profile/2"; struct FakeESimProfile { + std::string profile_path; std::string service_path; std::string guid; std::string iccid; std::string smdp_address; + hermes::profile::State state; bool managed = true; }; struct EuiccTestData { @@ -119,15 +122,26 @@ const EuiccTestData kSetupOneEsimProfile = { 2, - {{kCellularDevicePath, "guid-1", "iccid-1", "smdp-1", true}}}; + {{kCelluarProfilePath, kCellularServicePath, "guid-1", "iccid-1", "smdp-1", + hermes::profile::State::kActive, true}}}; const EuiccTestData kSetupTwoEsimProfiles = { 3, { - {kCellularDevicePath, "guid-1", "iccid-1", "smdp-1", true}, - {kCellularDevicePath2, "guid-2", "iccid-2", "smdp-2", true}, + {kCelluarProfilePath, kCellularServicePath, "guid-1", "iccid-1", + "smdp-1", hermes::profile::State::kActive, true}, + {kCelluarProfilePath2, kCellularServicePath2, "guid-2", "iccid-2", + "smdp-2", hermes::profile::State::kInactive, true}, }}; const EuiccTestData kSetupAfterReset = {2, {}}; +std::string GetEid(int euicc_id) { + return base::StringPrintf("%s%d", kFakeObjectPath, euicc_id); +} + +std::string GetEuiccPath(int euicc_id) { + return base::StringPrintf("%s%d", kFakeEid, euicc_id); +} + } // namespace class EuiccStatusUploaderTest : public testing::Test { @@ -187,9 +201,8 @@ void SetupEuicc(int euicc_id = 0) { chromeos::HermesManagerClient::Get()->GetTestInterface()->AddEuicc( - dbus::ObjectPath(base::StringPrintf("%s%d", kFakeObjectPath, euicc_id)), - base::StringPrintf("%s%d", kFakeEid, euicc_id), /*is_active=*/true, - euicc_id); + dbus::ObjectPath(GetEuiccPath(euicc_id)), GetEid(euicc_id), + /*is_active=*/true, euicc_id); } void SetUpDeviceProfiles(const EuiccTestData& data, bool add_to_onc = true) { @@ -199,48 +212,21 @@ SetupEuicc(euicc_id); } - ash::ShillServiceClient::TestInterface* shill_service_client = - ash::ShillServiceClient::Get()->GetTestInterface(); - shill_service_client->ClearServices(); - - base::Value onc_config(base::Value::Type::LIST); for (const auto& test_profile : data.profiles) { - shill_service_client->AddService( - test_profile.service_path, test_profile.guid, /*name=*/"cellular", - shill::kTypeCellular, "ready", /*visible=*/true); - shill_service_client->SetServiceProperty(test_profile.service_path, - shill::kIccidProperty, - base::Value(test_profile.iccid)); - shill_service_client->SetServiceProperty( - test_profile.service_path, shill::kProfileProperty, - base::Value(kDefaultProfilePath)); - shill_service_client->SetServiceProperty( - test_profile.service_path, shill::kUIDataProperty, - base::Value(chromeos::NetworkUIData::CreateFromONC( - ::onc::ONCSource::ONC_SOURCE_DEVICE_POLICY) - ->GetAsJson())); + chromeos::HermesEuiccClient::Get()->GetTestInterface()->AddCarrierProfile( + dbus::ObjectPath(test_profile.profile_path), + dbus::ObjectPath(GetEuiccPath(/*euicc_id=*/0)), test_profile.iccid, + test_profile.guid, "service_provider", "activation_code", + test_profile.service_path, test_profile.state, + hermes::profile::ProfileClass::kOperational, + chromeos::HermesEuiccClient::TestInterface:: + AddCarrierProfileBehavior::kAddProfileWithService); - base::Value single_onc = chromeos::onc::ReadDictionaryFromJson( - R"({ - "GUID": ")" + - test_profile.guid + R"(", - "Name": "Cellular network", - "Type": "Cellular", - "Cellular": { - "SMDPAddress" : ")" + - test_profile.smdp_address + R"(", - }, - })"); - onc_config.Append(std::move(single_onc)); - } - - if (add_to_onc) { - // Set ONC values. - chromeos::NetworkHandler::Get() - ->managed_network_configuration_handler() - ->SetPolicy(::onc::ONC_SOURCE_DEVICE_POLICY, - std::string() /* no username hash */, - std::move(onc_config), base::DictionaryValue()); + if (test_profile.managed) { + chromeos::NetworkHandler::Get() + ->managed_cellular_pref_handler() + ->AddIccidSmdpPair(test_profile.iccid, test_profile.smdp_address); + } } // Wait for Shill device and service change notifications to propagate. @@ -495,24 +481,4 @@ chromeos::NetworkHandler::Initialize(); } -// A regression test for b/220933904 to verify that there should be no crash -// when the cellular policy is not found from the device ONC but the network -// state still exists. -TEST_F(EuiccStatusUploaderTest, ShouldNotCrashIfNoPolicyFound) { - SetUpDeviceProfiles(kSetupOneEsimProfile, /*add_to_onc=*/false); - - auto status_uploader = CreateStatusUploader(); - // Initial upload request. - EXPECT_EQ(GetRequestCount(), 1); - // No value is uploaded yet. - EXPECT_EQ("{}", GetStoredPrefString()); - CheckHistogram(/*total_count=*/1, /*success_count=*/0, /*failed_count=*/1); - - // Make server accept requests. - SetServerSuccessStatus(true); - UpdateUploader(status_uploader.get()); - EXPECT_EQ(GetRequestCount(), 2); - CheckHistogram(/*total_count=*/2, /*success_count=*/1, /*failed_count=*/1); -} - } // namespace policy
diff --git a/chrome/browser/ash/web_applications/media_app/media_app_guest_ui_config.cc b/chrome/browser/ash/web_applications/media_app/media_app_guest_ui_config.cc index e64cc86..2631a74a 100644 --- a/chrome/browser/ash/web_applications/media_app/media_app_guest_ui_config.cc +++ b/chrome/browser/ash/web_applications/media_app/media_app_guest_ui_config.cc
@@ -39,6 +39,9 @@ source->AddBoolean( "pdfTextAnnotation", base::FeatureList::IsEnabled(chromeos::features::kMediaAppHandlesPdf)); + source->AddBoolean( + "newZeroState", + base::FeatureList::IsEnabled(chromeos::features::kMediaAppHandlesPdf)); version_info::Channel channel = chrome::GetChannel(); source->AddBoolean("colorThemes", chromeos::features::IsDarkLightModeEnabled());
diff --git a/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc b/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc index d843863..b599c47 100644 --- a/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc +++ b/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc
@@ -79,6 +79,12 @@ // A 5-second long 96kb/s Ogg-Vorbis 44.1kHz mono audio file. constexpr char kFileAudioOgg[] = "music.ogg"; +// A 1-page (8.5" x 11") PDF with some text and metadata. +constexpr char kFilePdfTall[] = "tall.pdf"; + +// A small square image PDF created by a camera. +constexpr char kFilePdfImg[] = "img.pdf"; + constexpr char kUnhandledRejectionScript[] = "window.dispatchEvent(" "new CustomEvent('simulate-unhandled-rejection-for-test'));"; @@ -94,6 +100,10 @@ class MediaAppIntegrationTest : public SystemWebAppIntegrationTest { public: + MediaAppIntegrationTest() { + feature_list_.InitAndEnableFeature(ash::features::kMediaAppHandlesPdf); + } + void MediaAppLaunchWithFile(bool audio_enabled); void MediaAppWithLaunchSystemWebAppAsync(bool audio_enabled); void MediaAppEligibleOpenTask(bool audio_enabled); @@ -105,6 +115,7 @@ content::WebContents* LaunchWithNoFiles(); private: + base::test::ScopedFeatureList feature_list_; std::unique_ptr<file_manager::test::FolderInMyFiles> launch_folder_; }; @@ -414,6 +425,49 @@ MediaAppWithLaunchSystemWebAppAsync(false); } +// Test that the Media App launches a single window for images. +IN_PROC_BROWSER_TEST_P(MediaAppIntegrationTest, MediaAppLaunchImageMulti) { + WaitForTestSystemAppInstall(); + web_app::SystemAppLaunchParams image_params; + image_params.launch_paths = {TestFile(kFilePng800x600), + TestFile(kFileJpeg640x480)}; + + web_app::LaunchSystemWebAppAsync(browser()->profile(), + web_app::SystemAppType::MEDIA, image_params); + web_app::FlushSystemWebAppLaunchesForTesting(browser()->profile()); + + const BrowserList* browser_list = BrowserList::GetInstance(); + EXPECT_EQ(2u, browser_list->size()); // 1 extra for the browser test browser. + + content::TitleWatcher watcher( + browser_list->get(1)->tab_strip_model()->GetActiveWebContents(), + u"image.png"); + EXPECT_EQ(u"image.png", watcher.WaitAndGetTitle()); +} + +// Test that the Media App launches multiple windows for PDFs. +IN_PROC_BROWSER_TEST_P(MediaAppIntegrationTest, MediaAppLaunchPdfMulti) { + WaitForTestSystemAppInstall(); + web_app::SystemAppLaunchParams pdf_params; + pdf_params.launch_paths = {TestFile(kFilePdfTall), TestFile(kFilePdfImg)}; + + web_app::LaunchSystemWebAppAsync(browser()->profile(), + web_app::SystemAppType::MEDIA, pdf_params); + web_app::FlushSystemWebAppLaunchesForTesting(browser()->profile()); + + const BrowserList* browser_list = BrowserList::GetInstance(); + EXPECT_EQ(3u, browser_list->size()); // 1 extra for the browser test browser. + + content::TitleWatcher watcher1( + browser_list->get(1)->tab_strip_model()->GetActiveWebContents(), + u"tall.pdf"); + content::TitleWatcher watcher2( + browser_list->get(2)->tab_strip_model()->GetActiveWebContents(), + u"img.pdf"); + EXPECT_EQ(u"tall.pdf", watcher1.WaitAndGetTitle()); + EXPECT_EQ(u"img.pdf", watcher2.WaitAndGetTitle()); +} + // Test that the Media App appears as a handler for files in the App Service. IN_PROC_BROWSER_TEST_P(MediaAppIntegrationTest, MediaAppHandlesIntents) { WaitForTestSystemAppInstall();
diff --git a/chrome/browser/ash/web_applications/media_app/media_web_app_info.cc b/chrome/browser/ash/web_applications/media_app/media_web_app_info.cc index 256160f6..efd1a7a 100644 --- a/chrome/browser/ash/web_applications/media_app/media_web_app_info.cc +++ b/chrome/browser/ash/web_applications/media_app/media_web_app_info.cc
@@ -16,6 +16,7 @@ #include "base/strings/string_split.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h" +#include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/web_applications/web_app_constants.h" #include "chrome/browser/web_applications/web_app_install_info.h" #include "chromeos/strings/grit/chromeos_strings.h" @@ -60,9 +61,6 @@ {"image/svg+xml", ".svg,.svgz"}, {"image/avif", ".avif"}, - // PDF. - {"application/pdf", ".pdf"}, - // When updating this list, `FOO_EXTENSIONS` in go/bl-launch should be // updated as well. }; @@ -86,6 +84,11 @@ // updated as well. }; +constexpr char kPdfExtension[] = ".pdf"; +constexpr FileHandlerConfig kPdfFileHandlers[] = { + {"application/pdf", kPdfExtension}, +}; + // Converts a FileHandlerConfig constexpr into the type needed to populate the // WebAppInstallInfo's `accept` property. std::vector<apps::FileHandler::AcceptEntry> MakeFileHandlerAccept( @@ -105,6 +108,16 @@ return result; } +// Picks out a single file from a template launch `params`. +const apps::AppLaunchParams PickFileFromParams( + const apps::AppLaunchParams& params, + size_t index) { + return apps::AppLaunchParams(params.app_id, params.container, + params.disposition, params.launch_source, + params.display_id, {params.launch_files[index]}, + params.intent ? params.intent.Clone() : nullptr); +} + } // namespace MediaSystemAppDelegate::MediaSystemAppDelegate(Profile* profile) @@ -163,10 +176,21 @@ image_video_handler.action = GURL(ash::kChromeUIMediaAppURL); image_video_handler.accept = MakeFileHandlerAccept(kFileHandlers); info->file_handlers.push_back(std::move(image_video_handler)); + apps::FileHandler audio_handler; audio_handler.action = GURL(ash::kChromeUIMediaAppURL); audio_handler.accept = MakeFileHandlerAccept(kAudioFileHandlers); info->file_handlers.push_back(std::move(audio_handler)); + + apps::FileHandler pdf_handler; + pdf_handler.action = GURL(ash::kChromeUIMediaAppURL); + pdf_handler.accept = MakeFileHandlerAccept(kPdfFileHandlers); + // Note setting `apps::FileHandler::LaunchType::kMultipleClients` here has no + // effect for system web apps (see comments in + // WebAppPublisherHelper::OnFileHandlerDialogCompleted()). The PDF-specifc + // behavior to spawn multiple launches occurs in an override of + // LaunchAndNavigateSystemWebApp(). + info->file_handlers.push_back(std::move(pdf_handler)); return info; } @@ -196,7 +220,7 @@ } bool MediaSystemAppDelegate::ShouldShowInLauncher() const { - return false; + return base::FeatureList::IsEnabled(chromeos::features::kMediaAppHandlesPdf); } bool MediaSystemAppDelegate::ShouldCaptureNavigations() const { @@ -204,7 +228,7 @@ } bool MediaSystemAppDelegate::ShouldShowInSearch() const { - return false; + return ShouldShowInLauncher(); } bool MediaSystemAppDelegate::ShouldShowNewWindowMenuOption() const { @@ -219,3 +243,25 @@ bool MediaSystemAppDelegate::ShouldHandleFileOpenIntents() const { return true; } + +Browser* MediaSystemAppDelegate::LaunchAndNavigateSystemWebApp( + Profile* profile, + web_app::WebAppProvider* provider, + const GURL& url, + const apps::AppLaunchParams& params) const { + // For zero/single-file launches, or non-PDF launches, launch a single window. + if (params.launch_files.size() < 2 || + !params.launch_files[0].MatchesExtension(kPdfExtension)) { + return SystemWebAppDelegate::LaunchAndNavigateSystemWebApp( + profile, provider, url, params); + } + + // For PDFs, launch all but the last file from scratch. Windows will cascade. + for (size_t i = 0; i < params.launch_files.size() - 1; ++i) { + web_app::LaunchSystemWebAppImpl(profile, web_app::SystemAppType::MEDIA, url, + PickFileFromParams(params, i)); + } + return SystemWebAppDelegate::LaunchAndNavigateSystemWebApp( + profile, provider, url, + PickFileFromParams(params, params.launch_files.size() - 1)); +}
diff --git a/chrome/browser/ash/web_applications/media_app/media_web_app_info.h b/chrome/browser/ash/web_applications/media_app/media_web_app_info.h index 81707e7..d142bff 100644 --- a/chrome/browser/ash/web_applications/media_app/media_web_app_info.h +++ b/chrome/browser/ash/web_applications/media_app/media_web_app_info.h
@@ -24,6 +24,11 @@ bool ShouldHandleFileOpenIntents() const override; base::FilePath GetLaunchDirectory( const apps::AppLaunchParams& params) const override; + Browser* LaunchAndNavigateSystemWebApp( + Profile* profile, + web_app::WebAppProvider* provider, + const GURL& url, + const apps::AppLaunchParams& params) const override; }; // Return a WebAppInstallInfo used to install the app.
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index f2735a9..e07874d 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc
@@ -101,7 +101,7 @@ #include "chrome/browser/ui/profile_error_dialog.h" #include "chrome/browser/ui/startup/bad_flags_prompt.h" #include "chrome/browser/ui/startup/startup_browser_creator.h" -#include "chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.h" +#include "chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.h" #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" #include "chrome/common/buildflags.h" #include "chrome/common/channel_info.h" @@ -1585,7 +1585,7 @@ // called inside PostProfileInit. content::WebUIControllerFactory::RegisterFactory( ChromeWebUIControllerFactory::GetInstance()); - ChromeUntrustedWebUIControllerFactory::RegisterInstance(); + RegisterChromeUntrustedWebUIConfigs(); #if BUILDFLAG(IS_ANDROID) page_info::SetPageInfoClient(new ChromePageInfoClient());
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 71f32cc9..f6f71ad1 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -140,7 +140,6 @@ #include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h" #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/webid/identity_dialog_controller.h" -#include "chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.h" #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" #include "chrome/browser/ui/webui/log_web_ui_url.h" #include "chrome/browser/universal_web_contents_observers.h" @@ -319,6 +318,7 @@ #include "ui/base/page_transition_types.h" #include "ui/base/resource/resource_bundle.h" #include "ui/native_theme/native_theme.h" +#include "ui/webui/webui_config_map.h" #include "url/gurl.h" #include "url/origin.h" #include "url/third_party/mozilla/url_parse.h" @@ -5669,8 +5669,8 @@ if (!ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( browser_context, *url) && - !ChromeUntrustedWebUIControllerFactory::GetInstance()->UseWebUIForURL( - browser_context, *url)) { + !ui::WebUIConfigMap::GetInstance().GetConfig(browser_context, + url::Origin::Create(*url))) { return false; }
diff --git a/chrome/browser/content_settings/mixed_content_settings_tab_helper.cc b/chrome/browser/content_settings/mixed_content_settings_tab_helper.cc index 8e9c3ed4..86aa072 100644 --- a/chrome/browser/content_settings/mixed_content_settings_tab_helper.cc +++ b/chrome/browser/content_settings/mixed_content_settings_tab_helper.cc
@@ -53,6 +53,8 @@ if (!IsRunningInsecureContentAllowed(*render_frame_host)) return; + // Fenced Frames should never allow insecure content. + DCHECK(!render_frame_host->IsNestedWithinFencedFrame()); mojo::AssociatedRemote<content_settings::mojom::ContentSettingsAgent> agent; render_frame_host->GetRemoteAssociatedInterfaces()->GetInterface(&agent); agent->SetAllowRunningInsecureContent();
diff --git a/chrome/browser/extensions/chrome_extensions_browser_interface_binders.cc b/chrome/browser/extensions/chrome_extensions_browser_interface_binders.cc index eb952a3..165355ee 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_interface_binders.cc +++ b/chrome/browser/extensions/chrome_extensions_browser_interface_binders.cc
@@ -138,7 +138,7 @@ } #endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) - if (chromeos::cfm::IsChromeboxForMeetingsAppId(extension->id())) { + if (ash::cfm::IsChromeboxForMeetingsAppId(extension->id())) { binder_map->Add< chromeos::cfm::mojom::CfmServiceContext>(base::BindRepeating( [](content::RenderFrameHost* frame_host, @@ -147,7 +147,7 @@ #if BUILDFLAG(PLATFORM_CFM) if (base::FeatureList::IsEnabled( chromeos::cfm::features::kMojoServices)) { - chromeos::cfm::ServiceConnection::GetInstance()->BindServiceContext( + ash::cfm::ServiceConnection::GetInstance()->BindServiceContext( std::move(receiver)); } else { // The experimentation framework used to manage the
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index dd77dc3..32a956c9 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -223,7 +223,7 @@ { "name": "arc-keyboard-shortcut-helper-integration", "owners": [ "yhanada", "mduggan" ], - "expiry_milestone": 101 + "expiry_milestone": 108 }, { "name": "arc-mouse-wheel-smooth-scroll",
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc index cef81f5..4462dca0 100644 --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -1636,6 +1636,11 @@ { key::kFirstPartySetsOverrides, first_party_sets::kFirstPartySetsOverrides, base::Value::Type::DICTIONARY}, +#if BUILDFLAG(IS_MAC) + { key::kWarnBeforeQuittingEnabled, + prefs::kConfirmToQuitEnabled, + base::Value::Type::BOOLEAN }, +#endif }; // clang-format on
diff --git a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc index 0678e78..33a19652e 100644 --- a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc +++ b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
@@ -1864,9 +1864,6 @@ } } -// TODO(crbug.com/1282044): This behavior should not be allowed, since it allows -// mixed frames, which are otherwise blocked, once this is fixed, change this -// test so it verifies the navigation is block. IN_PROC_BROWSER_TEST_P(SecurityStateTabHelperFencedFrameTest, LoadFencedFrameViaInsecureURL) { // Setup a mock certificate verifier. @@ -1888,9 +1885,15 @@ fenced_frame_test_helper().CreateFencedFrame( web_contents()->GetMainFrame(), fenced_frame_url); EXPECT_NE(nullptr, fenced_frame_host); + // Check that nothing has been loaded in the fenced frame. + EXPECT_EQ( + 0, content::EvalJs(fenced_frame_host, "document.body.childElementCount")); - CheckSecurityInfoForSecure(web_contents(), security_state::DANGEROUS, false, - false, true, false /* expect cert status error */); + // Since we are blocking http content in a fenced frame, the security + // indicator should not change, and there should be no mixed content loaded. + CheckSecurityInfoForSecure(web_contents(), security_state::SECURE, false, + false, false /* expect no mixed content loaded */, + false /* expect cert status error */); } } // namespace
diff --git a/chrome/browser/themes/theme_service_browsertest.cc b/chrome/browser/themes/theme_service_browsertest.cc index ed50f95..07a5f90 100644 --- a/chrome/browser/themes/theme_service_browsertest.cc +++ b/chrome/browser/themes/theme_service_browsertest.cc
@@ -16,6 +16,11 @@ #include "components/prefs/pref_service.h" #include "content/public/test/browser_test.h" #include "content/public/test/test_utils.h" +#include "ui/base/buildflags.h" + +#if BUILDFLAG(USE_GTK) +#include "ui/views/linux_ui/linux_ui.h" +#endif namespace { @@ -154,8 +159,13 @@ IN_PROC_BROWSER_TEST_F(ThemeServiceBrowserTest, GetColorForToolbarButton) { // This test relies on toolbar buttons having no tint, which is not currently - // true in dark mode. + // true in dark mode and GTK. ui::NativeTheme::GetInstanceForNativeUi()->set_use_dark_colors(false); +#if BUILDFLAG(USE_GTK) + views::LinuxUI::instance()->SetUseSystemThemeCallback( + base::BindRepeating([](aura::Window* window) { return false; })); +#endif // BUILDFLAG(USE_GTK) + ui::NativeTheme::GetInstanceForNativeUi()->NotifyOnNativeThemeUpdated(); const ui::ThemeProvider* provider = browser()->window()->GetThemeProvider(); SkColor default_toolbar_button_color =
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 996e49fa..d1e4160a 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -218,8 +218,8 @@ "webui/autofill_and_password_manager_internals/internals_ui_handler.h", "webui/autofill_and_password_manager_internals/password_manager_internals_ui.cc", "webui/autofill_and_password_manager_internals/password_manager_internals_ui.h", - "webui/chrome_untrusted_web_ui_controller_factory.cc", - "webui/chrome_untrusted_web_ui_controller_factory.h", + "webui/chrome_untrusted_web_ui_configs.cc", + "webui/chrome_untrusted_web_ui_configs.h", "webui/chrome_web_ui_controller_factory.cc", "webui/chrome_web_ui_controller_factory.h", "webui/components/components_handler.cc",
diff --git a/chrome/browser/ui/app_list/search/chrome_search_result.cc b/chrome/browser/ui/app_list/search/chrome_search_result.cc index ef39860d..1856741 100644 --- a/chrome/browser/ui/app_list/search/chrome_search_result.cc +++ b/chrome/browser/ui/app_list/search/chrome_search_result.cc
@@ -86,6 +86,11 @@ SetSearchResultMetadata(); } +void ChromeSearchResult::SetMultilineDetails(bool multiline_details) { + metadata_->multiline_details = multiline_details; + SetSearchResultMetadata(); +} + void ChromeSearchResult::SetBigTitleTextVector(const TextVector& text_vector) { metadata_->big_title_vector = text_vector; SetSearchResultMetadata();
diff --git a/chrome/browser/ui/app_list/search/chrome_search_result.h b/chrome/browser/ui/app_list/search/chrome_search_result.h index 2de27a8b..2287a87 100644 --- a/chrome/browser/ui/app_list/search/chrome_search_result.h +++ b/chrome/browser/ui/app_list/search/chrome_search_result.h
@@ -69,6 +69,7 @@ const TextVector& details_text_vector() const { return metadata_->details_vector; } + bool multiline_details() const { return metadata_->multiline_details; } const TextVector& big_title_text_vector() const { return metadata_->big_title_vector; } @@ -114,6 +115,7 @@ void MaybeUpdateDetailsVector(); void SetTitleTextVector(const TextVector& text_vector); void SetDetailsTextVector(const TextVector& text_vector); + void SetMultilineDetails(bool multiline_details); void SetBigTitleTextVector(const TextVector& text_vector); void SetKeyboardShortcutTextVector(const TextVector& text_vector); void SetAccessibleName(const std::u16string& name);
diff --git a/chrome/browser/ui/app_list/search/omnibox_answer_result.cc b/chrome/browser/ui/app_list/search/omnibox_answer_result.cc index 560b824..e25c1e0 100644 --- a/chrome/browser/ui/app_list/search/omnibox_answer_result.cc +++ b/chrome/browser/ui/app_list/search/omnibox_answer_result.cc
@@ -234,6 +234,10 @@ SetTitleTextVector(first_vector); SetDetailsTextVector(second_vector); + + // Dictionary answer details can be split over multiple lines. + if (IsDictionaryResult()) + SetMultilineDetails(true); } std::u16string accessible_name = ComputeAccessibleName( @@ -293,6 +297,11 @@ return match_.type == AutocompleteMatchType::CALCULATOR; } +bool OmniboxAnswerResult::IsDictionaryResult() const { + return match_.answer.has_value() && + match_.answer->type() == SuggestionAnswer::ANSWER_TYPE_DICTIONARY; +} + bool OmniboxAnswerResult::IsWeatherResult() const { return match_.answer.has_value() && match_.answer->type() == SuggestionAnswer::ANSWER_TYPE_WEATHER;
diff --git a/chrome/browser/ui/app_list/search/omnibox_answer_result.h b/chrome/browser/ui/app_list/search/omnibox_answer_result.h index a121accc..623ce49b 100644 --- a/chrome/browser/ui/app_list/search/omnibox_answer_result.h +++ b/chrome/browser/ui/app_list/search/omnibox_answer_result.h
@@ -49,6 +49,7 @@ void FetchImage(const GURL& url); bool IsCalculatorResult() const; + bool IsDictionaryResult() const; bool IsWeatherResult() const; Profile* profile_;
diff --git a/chrome/browser/ui/app_list/search/omnibox_answer_result_unittest.cc b/chrome/browser/ui/app_list/search/omnibox_answer_result_unittest.cc index 47ae7f0..b3ae2b8e 100644 --- a/chrome/browser/ui/app_list/search/omnibox_answer_result_unittest.cc +++ b/chrome/browser/ui/app_list/search/omnibox_answer_result_unittest.cc
@@ -256,4 +256,28 @@ TagEquals(Tag(Tag::Style::GREEN, 0, length)))); } +TEST_F(OmniboxAnswerResultTest, DictionaryResultMultiline) { + // This comes from SuggestionAnswer::AnswerType::ANSWER_TYPE_DICTIONARY. + const std::u16string kDictionaryType = u"1"; + + SuggestionAnswer answer; + std::string json = + "{ \"l\": [" + " { \"il\": { \"t\": [{ \"t\": \"text one\", \"tt\": 8 }] } }, " + " { \"il\": { \"t\": [{ \"t\": \"text two\", \"tt\": 5 }] } } " + "] }"; + absl::optional<base::Value> value = base::JSONReader::Read(json); + ASSERT_TRUE(value && value->is_dict()); + ASSERT_TRUE(SuggestionAnswer::ParseAnswer(value->GetDict(), kDictionaryType, + &answer)); + + AutocompleteMatch match; + match.answer = answer; + match.contents = u"contents"; + match.description = u"description"; + + OmniboxAnswerResult result(nullptr, nullptr, nullptr, match, u"query"); + EXPECT_TRUE(result.multiline_details()); +} + } // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/search_controller_factory.cc b/chrome/browser/ui/app_list/search/search_controller_factory.cc index 6029791e..52bbf04 100644 --- a/chrome/browser/ui/app_list/search/search_controller_factory.cc +++ b/chrome/browser/ui/app_list/search/search_controller_factory.cc
@@ -71,7 +71,6 @@ // TODO(warx): Need UX spec. constexpr size_t kMaxAppShortcutResults = 4; -constexpr size_t kMaxPlaystoreResults = 12; constexpr size_t kMaxAssistantTextResults = 1; @@ -133,11 +132,6 @@ std::make_unique<DriveSearchProvider>(profile)); } - size_t playstore_api_group_id = controller->AddGroup(kMaxPlaystoreResults); - controller->AddProvider(playstore_api_group_id, - std::make_unique<ArcPlayStoreSearchProvider>( - kMaxPlaystoreResults, profile, list_controller)); - if (arc::IsArcAllowedForProfile(profile)) { size_t app_shortcut_group_id = controller->AddGroup(kMaxAppShortcutResults); controller->AddProvider(
diff --git a/chrome/browser/ui/extensions/extension_image_util_browsertest.cc b/chrome/browser/ui/extensions/extension_image_util_browsertest.cc index 208bbaf2..8cdd46bec 100644 --- a/chrome/browser/ui/extensions/extension_image_util_browsertest.cc +++ b/chrome/browser/ui/extensions/extension_image_util_browsertest.cc
@@ -7,9 +7,14 @@ #include "chrome/browser/ui/browser_window.h" #include "content/public/test/browser_test.h" #include "extensions/common/image_util.h" +#include "ui/base/buildflags.h" #include "ui/base/theme_provider.h" #include "ui/native_theme/native_theme.h" +#if BUILDFLAG(USE_GTK) +#include "ui/views/linux_ui/linux_ui.h" +#endif + namespace { using ImageUtilTest = extensions::ExtensionBrowserTest; @@ -24,8 +29,13 @@ // color through an interface of some sort, removing this hardcoded // value. IN_PROC_BROWSER_TEST_F(ImageUtilTest, CheckDefaultToolbarColor) { - // This test relies on being run in light mode. - browser()->window()->GetNativeTheme()->set_use_dark_colors(false); + // This test relies on being run with the default light mode system theme. + ui::NativeTheme::GetInstanceForNativeUi()->set_use_dark_colors(false); +#if BUILDFLAG(USE_GTK) + views::LinuxUI::instance()->SetUseSystemThemeCallback( + base::BindRepeating([](aura::Window* window) { return false; })); +#endif // BUILDFLAG(USE_GTK) + ui::NativeTheme::GetInstanceForNativeUi()->NotifyOnNativeThemeUpdated(); EXPECT_EQ(extensions::image_util::kDefaultToolbarColor, browser()->window()->GetThemeProvider()->GetColor(
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc index 37734311..f000657 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc
@@ -37,6 +37,10 @@ #include "ui/views/accessibility/view_accessibility.h" #include "ui/views/widget/widget.h" +#if BUILDFLAG(USE_GTK) +#include "ui/views/linux_ui/linux_ui.h" +#endif + #if defined(USE_AURA) #include "ui/aura/window.h" #endif @@ -206,6 +210,18 @@ // be different. But when using the GTK theme on Linux, these colors will be // the same. Ensure we're not using the system (GTK) theme, which may be // conditionally enabled depending on the environment. +#if BUILDFLAG(USE_GTK) + // Normally it would be sufficient to call ThemeService::UseDefaultTheme() + // which sets the kUsesSystemTheme user pref on the browser's profile. + // However BrowserThemeProvider::GetColorProviderColor() currently does not + // pass an aura::Window to LinuxUI::GetNativeTheme() - which means that the + // NativeThemeGtk instance will always be returned. + // TODO(crbug.com/1304441): Remove this once GTK passthrough is fully + // supported. + views::LinuxUI::instance()->SetUseSystemThemeCallback( + base::BindRepeating([](aura::Window* window) { return false; })); + ui::NativeTheme::GetInstanceForNativeUi()->NotifyOnNativeThemeUpdated(); + ThemeService* theme_service = ThemeServiceFactory::GetForProfile(browser()->profile()); if (!theme_service->UsingDefaultTheme()) { @@ -213,6 +229,7 @@ theme_service->UseDefaultTheme(); } ASSERT_TRUE(theme_service->UsingDefaultTheme()); +#endif // BUILDFLAG(USE_GTK) } };
diff --git a/chrome/browser/ui/webauthn/sheet_models.cc b/chrome/browser/ui/webauthn/sheet_models.cc index 3125c40..fd4701a 100644 --- a/chrome/browser/ui/webauthn/sheet_models.cc +++ b/chrome/browser/ui/webauthn/sheet_models.cc
@@ -1208,7 +1208,9 @@ } std::u16string AuthenticatorQRSheetModel::GetStepTitle() const { - return l10n_util::GetStringUTF16(IDS_WEBAUTHN_CABLEV2_ADD_PHONE); + return base::FeatureList::IsEnabled(device::kWebAuthPasskeysUIExperiment) + ? u"Add a new phone" + : l10n_util::GetStringUTF16(IDS_WEBAUTHN_CABLEV2_ADD_PHONE); } std::u16string AuthenticatorQRSheetModel::GetStepDescription() const {
diff --git a/chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.cc b/chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.cc new file mode 100644 index 0000000..c78525f --- /dev/null +++ b/chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.cc
@@ -0,0 +1,91 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.h" + +#include <memory> + +#include "build/build_config.h" +#include "build/chromeos_buildflags.h" +#include "printing/buildflags/buildflags.h" +#include "ui/webui/webui_config_map.h" + +#if BUILDFLAG(ENABLE_PRINT_PREVIEW) +#include "chrome/browser/ui/webui/print_preview/print_preview_ui_untrusted.h" +#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) + +#if BUILDFLAG(IS_ANDROID) +#include "chrome/browser/ui/webui/video_tutorials/video_player_ui.h" +#else // !BUILDFLAG(IS_ANDROID) +#include "chrome/browser/ui/webui/feed/feed_ui_config.h" +#include "chrome/browser/ui/webui/image_editor/image_editor_untrusted_ui.h" +#endif // BUILDFLAG(IS_ANDROID) + +#if BUILDFLAG(IS_CHROMEOS_ASH) +#include "ash/constants/ash_features.h" +#include "ash/webui/eche_app_ui/untrusted_eche_app_ui.h" +#include "ash/webui/file_manager/file_manager_untrusted_ui.h" +#include "ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.h" +#include "ash/webui/os_feedback_ui/os_feedback_untrusted_ui.h" +#include "chrome/browser/ash/web_applications/camera_app/camera_app_untrusted_ui_config.h" +#include "chrome/browser/ash/web_applications/crosh_ui.h" +#include "chrome/browser/ash/web_applications/help_app/help_app_untrusted_ui_config.h" +#include "chrome/browser/ash/web_applications/media_app/media_app_guest_ui_config.h" +#include "chrome/browser/ash/web_applications/projector_app/untrusted_projector_annotator_ui_config.h" +#include "chrome/browser/ash/web_applications/projector_app/untrusted_projector_ui_config.h" +#include "chrome/browser/ash/web_applications/terminal_ui.h" +#if !defined(OFFICIAL_BUILD) +#include "ash/webui/sample_system_web_app_ui/untrusted_sample_system_web_app_ui.h" +#endif // !defined(OFFICIAL_BUILD) +#endif // BUILDFLAG(IS_CHROMEOS_ASH) + +void RegisterChromeUntrustedWebUIConfigs() { + auto& map = ui::WebUIConfigMap::GetInstance(); + + // Register WebUIConfigs below. +#if BUILDFLAG(ENABLE_PRINT_PREVIEW) + map.AddUntrustedWebUIConfig( + std::make_unique<printing::PrintPreviewUIUntrustedConfig>()); +#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) + +#if BUILDFLAG(IS_ANDROID) + map.AddUntrustedWebUIConfig( + std::make_unique<video_tutorials::VideoPlayerUIConfig>()); +#else // !BUILDFLAG(IS_ANDROID) + map.AddUntrustedWebUIConfig(std::make_unique<feed::FeedUIConfig>()); + map.AddUntrustedWebUIConfig( + std::make_unique<image_editor::ImageEditorUntrustedUIConfig>()); +#endif // BUILDFLAG(IS_ANDROID) + +#if BUILDFLAG(IS_CHROMEOS_ASH) + map.AddUntrustedWebUIConfig(std::make_unique<CroshUIConfig>()); + map.AddUntrustedWebUIConfig(std::make_unique<TerminalUIConfig>()); + map.AddUntrustedWebUIConfig( + std::make_unique<ash::eche_app::UntrustedEcheAppUIConfig>()); + map.AddUntrustedWebUIConfig(std::make_unique<MediaAppGuestUIConfig>()); + map.AddUntrustedWebUIConfig( + std::make_unique<ash::HelpAppUntrustedUIConfig>()); + map.AddUntrustedWebUIConfig( + std::make_unique<ash::CameraAppUntrustedUIConfig>()); + map.AddUntrustedWebUIConfig( + std::make_unique<ash::HelpAppKidsMagazineUntrustedUIConfig>()); + if (ash::features::IsProjectorEnabled()) + map.AddUntrustedWebUIConfig(std::make_unique<UntrustedProjectorUIConfig>()); + if (ash::features::IsProjectorAnnotatorEnabled()) + map.AddUntrustedWebUIConfig( + std::make_unique<UntrustedProjectorAnnotatorUIConfig>()); + if (ash::features::IsFileManagerSwaEnabled()) { + map.AddUntrustedWebUIConfig( + std::make_unique<ash::file_manager::FileManagerUntrustedUIConfig>()); + } + if (base::FeatureList::IsEnabled(ash::features::kOsFeedback)) { + map.AddUntrustedWebUIConfig( + std::make_unique<ash::feedback::OsFeedbackUntrustedUIConfig>()); + } +#if !defined(OFFICIAL_BUILD) + map.AddUntrustedWebUIConfig( + std::make_unique<ash::UntrustedSampleSystemWebAppUIConfig>()); +#endif // !defined(OFFICIAL_BUILD) +#endif // BUILDFLAG(IS_CHROMEOS_ASH) +}
diff --git a/chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.h b/chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.h new file mode 100644 index 0000000..813fec2 --- /dev/null +++ b/chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.h
@@ -0,0 +1,11 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_WEBUI_CHROME_UNTRUSTED_WEB_UI_CONFIGS_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROME_UNTRUSTED_WEB_UI_CONFIGS_H_ + +// Method that adds /chrome's untrusted `WebUIConfig`s to `WebUIConfigMap`. +void RegisterChromeUntrustedWebUIConfigs(); + +#endif // CHROME_BROWSER_UI_WEBUI_CHROME_UNTRUSTED_WEB_UI_CONFIGS_H_
diff --git a/chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.cc deleted file mode 100644 index 845d1204..0000000 --- a/chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.cc +++ /dev/null
@@ -1,132 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.h" - -#include <memory> - -#include "base/no_destructor.h" -#include "build/build_config.h" -#include "build/chromeos_buildflags.h" -#include "content/public/browser/web_contents.h" -#include "content/public/browser/web_ui.h" -#include "content/public/browser/web_ui_controller.h" -#include "content/public/common/url_constants.h" -#include "printing/buildflags/buildflags.h" -#include "ui/webui/webui_config.h" -#include "url/gurl.h" - -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) -#include "chrome/browser/ui/webui/print_preview/print_preview_ui_untrusted.h" -#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) - -#if BUILDFLAG(IS_ANDROID) -#include "chrome/browser/ui/webui/video_tutorials/video_player_ui.h" -#else // !BUILDFLAG(IS_ANDROID) -#include "chrome/browser/ui/webui/feed/feed_ui_config.h" -#include "chrome/browser/ui/webui/image_editor/image_editor_untrusted_ui.h" -#endif // BUILDFLAG(IS_ANDROID) - -#if BUILDFLAG(IS_CHROMEOS_ASH) -#include "ash/constants/ash_features.h" -#include "ash/webui/eche_app_ui/untrusted_eche_app_ui.h" -#include "ash/webui/file_manager/file_manager_untrusted_ui.h" -#include "ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.h" -#include "ash/webui/os_feedback_ui/os_feedback_untrusted_ui.h" -#include "chrome/browser/ash/web_applications/camera_app/camera_app_untrusted_ui_config.h" -#include "chrome/browser/ash/web_applications/crosh_ui.h" -#include "chrome/browser/ash/web_applications/help_app/help_app_untrusted_ui_config.h" -#include "chrome/browser/ash/web_applications/media_app/media_app_guest_ui_config.h" -#include "chrome/browser/ash/web_applications/projector_app/untrusted_projector_annotator_ui_config.h" -#include "chrome/browser/ash/web_applications/projector_app/untrusted_projector_ui_config.h" -#include "chrome/browser/ash/web_applications/terminal_ui.h" -#if !defined(OFFICIAL_BUILD) -#include "ash/webui/sample_system_web_app_ui/untrusted_sample_system_web_app_ui.h" -#endif // !defined(OFFICIAL_BUILD) -#endif // BUILDFLAG(IS_CHROMEOS_ASH) - -using WebUIConfigList = - std::vector<std::pair<std::string, std::unique_ptr<ui::WebUIConfig>>>; - -namespace { - -// Returns a std::vector<> containing all WebUIConfigs. We use a vector instead -// of adding WebUIConfigs directly into the flat_map because individual inserts -// are O(n), giving O(n^2) construction time for the entire map. By contrast, -// constructing from a vector is O(n log n). -WebUIConfigList CreateConfigs() { - WebUIConfigList config_list; - // Delete [[maybe_unused]] once register_config is used outside of Chrome OS. - [[maybe_unused]] auto register_config = - [&config_list](std::unique_ptr<ui::WebUIConfig> config) { - DCHECK_EQ(config->scheme(), content::kChromeUIUntrustedScheme); - const std::string& host = config->host(); - config_list.emplace_back(host, std::move(config)); - }; - - // Register WebUIConfigs below. -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) - register_config(std::make_unique<printing::PrintPreviewUIUntrustedConfig>()); -#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) - -#if BUILDFLAG(IS_ANDROID) - register_config(std::make_unique<video_tutorials::VideoPlayerUIConfig>()); -#else // !BUILDFLAG(IS_ANDROID) - register_config(std::make_unique<feed::FeedUIConfig>()); - register_config( - std::make_unique<image_editor::ImageEditorUntrustedUIConfig>()); -#endif // BUILDFLAG(IS_ANDROID) - -#if BUILDFLAG(IS_CHROMEOS_ASH) - register_config(std::make_unique<CroshUIConfig>()); - register_config(std::make_unique<TerminalUIConfig>()); - register_config(std::make_unique<ash::eche_app::UntrustedEcheAppUIConfig>()); - register_config(std::make_unique<MediaAppGuestUIConfig>()); - register_config(std::make_unique<ash::HelpAppUntrustedUIConfig>()); - register_config(std::make_unique<ash::CameraAppUntrustedUIConfig>()); - register_config( - std::make_unique<ash::HelpAppKidsMagazineUntrustedUIConfig>()); - if (ash::features::IsProjectorEnabled()) - register_config(std::make_unique<UntrustedProjectorUIConfig>()); - if (ash::features::IsProjectorAnnotatorEnabled()) - register_config(std::make_unique<UntrustedProjectorAnnotatorUIConfig>()); - if (ash::features::IsFileManagerSwaEnabled()) { - register_config( - std::make_unique<ash::file_manager::FileManagerUntrustedUIConfig>()); - } - if (base::FeatureList::IsEnabled(ash::features::kOsFeedback)) { - register_config( - std::make_unique<ash::feedback::OsFeedbackUntrustedUIConfig>()); - } -#if !defined(OFFICIAL_BUILD) - register_config(std::make_unique<ash::UntrustedSampleSystemWebAppUIConfig>()); -#endif // !defined(OFFICIAL_BUILD) -#endif // BUILDFLAG(IS_CHROMEOS_ASH) - return config_list; -} - -} // namespace - -// static -ChromeUntrustedWebUIControllerFactory* -ChromeUntrustedWebUIControllerFactory::GetInstance() { - static base::NoDestructor<ChromeUntrustedWebUIControllerFactory> instance; - return instance.get(); -} - -// static -void ChromeUntrustedWebUIControllerFactory::RegisterInstance() { - content::WebUIControllerFactory::RegisterFactory(GetInstance()); -} - -ChromeUntrustedWebUIControllerFactory::ChromeUntrustedWebUIControllerFactory() - : configs_(CreateConfigs()) {} - -ChromeUntrustedWebUIControllerFactory:: - ~ChromeUntrustedWebUIControllerFactory() = default; - -const ui::UntrustedWebUIControllerFactory::WebUIConfigMap& -ChromeUntrustedWebUIControllerFactory::GetWebUIConfigMap() { - return configs_; -}
diff --git a/chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.h b/chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.h deleted file mode 100644 index 738afa66..0000000 --- a/chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.h +++ /dev/null
@@ -1,31 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_WEBUI_CHROME_UNTRUSTED_WEB_UI_CONTROLLER_FACTORY_H_ -#define CHROME_BROWSER_UI_WEBUI_CHROME_UNTRUSTED_WEB_UI_CONTROLLER_FACTORY_H_ - -#include "ui/webui/untrusted_web_ui_controller_factory.h" - -class ChromeUntrustedWebUIControllerFactory - : public ui::UntrustedWebUIControllerFactory { - public: - // Register the singleton instance of this class. - static void RegisterInstance(); - static ChromeUntrustedWebUIControllerFactory* GetInstance(); - - ChromeUntrustedWebUIControllerFactory(); - ChromeUntrustedWebUIControllerFactory( - const ChromeUntrustedWebUIControllerFactory&) = delete; - ChromeUntrustedWebUIControllerFactory& operator=( - const ChromeUntrustedWebUIControllerFactory&) = delete; - - protected: - const WebUIConfigMap& GetWebUIConfigMap() override; - - private: - ~ChromeUntrustedWebUIControllerFactory() override; - WebUIConfigMap configs_; -}; - -#endif // CHROME_BROWSER_UI_WEBUI_CHROME_UNTRUSTED_WEB_UI_CONTROLLER_FACTORY_H_
diff --git a/chrome/browser/ui/webui/realbox/realbox_handler.cc b/chrome/browser/ui/webui/realbox/realbox_handler.cc index 938f9cc8..e8bfe81 100644 --- a/chrome/browser/ui/webui/realbox/realbox_handler.cc +++ b/chrome/browser/ui/webui/realbox/realbox_handler.cc
@@ -21,6 +21,8 @@ #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/predictors/autocomplete_action_predictor.h" #include "chrome/browser/predictors/autocomplete_action_predictor_factory.h" +#include "chrome/browser/prefetch/search_prefetch/search_prefetch_service.h" +#include "chrome/browser/prefetch/search_prefetch/search_prefetch_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/ui/bookmarks/bookmark_stats.h" @@ -746,6 +748,14 @@ BookmarkModelFactory::GetForBrowserContext(profile_), profile_->GetPrefs())); + if (autocomplete_controller_->done()) { + if (SearchPrefetchService* search_prefetch_service = + SearchPrefetchServiceFactory::GetForProfile(profile_)) { + search_prefetch_service->OnResultChanged( + autocomplete_controller_->result()); + } + } + // Clear pending bitmap requests before requesting new ones. for (auto bitmap_request_id : bitmap_request_ids_) { bitmap_fetcher_service_->CancelRequest(bitmap_request_id);
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc index ee3d6d0..b218247 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc
@@ -321,8 +321,8 @@ for (auto& window_tab : window->tabs) { sessions::TabRestoreService::Tab* tab = static_cast<sessions::TabRestoreService::Tab*>(window_tab.get()); - if (AddRecentlyClosedTab(tab, recently_closed_tabs, tab_dedup_keys, - tab_group_ids, tab_groups)) { + if (AddRecentlyClosedTab(tab, entry->timestamp, recently_closed_tabs, + tab_dedup_keys, tab_group_ids, tab_groups)) { recently_closed_tab_count += 1; recently_closed_item_count += 1; } @@ -336,8 +336,8 @@ sessions::TabRestoreService::Tab* tab = static_cast<sessions::TabRestoreService::Tab*>(entry.get()); - if (AddRecentlyClosedTab(tab, recently_closed_tabs, tab_dedup_keys, - tab_group_ids, tab_groups)) { + if (AddRecentlyClosedTab(tab, entry->timestamp, recently_closed_tabs, + tab_dedup_keys, tab_group_ids, tab_groups)) { recently_closed_tab_count += 1; recently_closed_item_count += 1; } @@ -360,8 +360,9 @@ GetLastActiveElapsedText(entry->timestamp); for (auto& tab : group->tabs) { - if (AddRecentlyClosedTab(tab.get(), recently_closed_tabs, - tab_dedup_keys, tab_group_ids, tab_groups)) { + if (AddRecentlyClosedTab(tab.get(), entry->timestamp, + recently_closed_tabs, tab_dedup_keys, + tab_group_ids, tab_groups)) { recently_closed_tab_count += 1; } } @@ -376,6 +377,7 @@ bool TabSearchPageHandler::AddRecentlyClosedTab( sessions::TabRestoreService::Tab* tab, + const base::Time& close_time, std::vector<tab_search::mojom::RecentlyClosedTabPtr>& recently_closed_tabs, std::set<DedupKey>& tab_dedup_keys, std::set<tab_groups::TabGroupId>& tab_group_ids, @@ -384,7 +386,7 @@ return false; tab_search::mojom::RecentlyClosedTabPtr recently_closed_tab = - GetRecentlyClosedTab(tab); + GetRecentlyClosedTab(tab, close_time); DedupKey dedup_id(recently_closed_tab->url, recently_closed_tab->group_id); // Ignore NTP entries, duplicate entries and tabs with invalid URLs such as @@ -462,7 +464,8 @@ tab_search::mojom::RecentlyClosedTabPtr TabSearchPageHandler::GetRecentlyClosedTab( - sessions::TabRestoreService::Tab* tab) { + sessions::TabRestoreService::Tab* tab, + const base::Time& close_time) { auto recently_closed_tab = tab_search::mojom::RecentlyClosedTab::New(); DCHECK(tab->navigations.size() > 0); sessions::SerializedNavigationEntry& entry = @@ -472,7 +475,10 @@ recently_closed_tab->title = entry.title().empty() ? recently_closed_tab->url.spec() : base::UTF16ToUTF8(entry.title()); - const base::Time last_active_time = entry.timestamp(); + // Fall back to the navigation last active time if the restore entry has no + // associated timestamp. + const base::Time last_active_time = + close_time.is_null() ? entry.timestamp() : close_time; recently_closed_tab->last_active_time = last_active_time; recently_closed_tab->last_active_elapsed_text = GetLastActiveElapsedText(last_active_time); @@ -522,7 +528,7 @@ sessions::TabRestoreService::Tab* tab = static_cast<sessions::TabRestoreService::Tab*>(entry.get()); tab_search::mojom::RecentlyClosedTabPtr recently_closed_tab = - GetRecentlyClosedTab(tab); + GetRecentlyClosedTab(tab, entry->timestamp); tabs_removed_info->recently_closed_tabs.push_back( std::move(recently_closed_tab)); }
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h index d43932c..fd7ff6b 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h
@@ -114,6 +114,7 @@ // Returns true if a recently closed tab was added to `recently_closed_tabs` bool AddRecentlyClosedTab( sessions::TabRestoreService::Tab* tab, + const base::Time& close_time, std::vector<tab_search::mojom::RecentlyClosedTabPtr>& recently_closed_tabs, std::set<DedupKey>& tab_dedup_keys, @@ -124,7 +125,8 @@ content::WebContents* contents, int index); tab_search::mojom::RecentlyClosedTabPtr GetRecentlyClosedTab( - sessions::TabRestoreService::Tab* tab); + sessions::TabRestoreService::Tab* tab, + const base::Time& close_time); // Returns tab details required to perform an action on the tab. absl::optional<TabDetails> GetTabDetails(int32_t tab_id);
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index de7d823..432c517 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1648877775-5be7808ca7b458c5a256400de5610d4c7d2475fe.profdata +chrome-linux-main-1648998144-eb2a9520d68471dcbd0fb7ac41d3477513f4ffe3.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 52403753..50a00e97 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1648911724-2039f13a89cad4ab18499b595b0d3663b43cb4a6.profdata +chrome-mac-arm-main-1648998144-5fc2e83170c5ba943784576e696bd8fd878c06dc.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 074fbff..0aae658 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1648877775-0cf28bb11c81a9038aaf9385ecf26b64942aeb93.profdata +chrome-mac-main-1648998144-0cbc92fbff4e13aa632c2d034e446dc9ae7c07df.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 39536a4e..f38c7fba 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1648867963-938b998b52b05bac0b485b7c4eeef7c1804f124d.profdata +chrome-win32-main-1649037892-4267dccb6975dbf05236b585a1142feefb84379d.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 5c09871..c2c88e1 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1648877775-edd2a2182da9be2b72dc53d309aa04d4fc8da88b.profdata +chrome-win64-main-1649037892-0ff63f7405e999cff5db9ba73b26ce4f77532cf7.profdata
diff --git a/chrome/renderer/cart/commerce_hint_agent_browsertest.cc b/chrome/renderer/cart/commerce_hint_agent_browsertest.cc index b5636d0f..234a89d 100644 --- a/chrome/renderer/cart/commerce_hint_agent_browsertest.cc +++ b/chrome/renderer/cart/commerce_hint_agent_browsertest.cc
@@ -1038,7 +1038,9 @@ }; // Flaky on Linux, ChromeOS and Windows: https://crbug.com/1257964. -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) +// Falky on Mac: https://crbug.com/1312849. +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) || \ + BUILDFLAG(IS_MAC) #define MAYBE_ExtractCart DISABLED_ExtractCart #else #define MAYBE_ExtractCart ExtractCart
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 1ec0c404..d578de3 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -204,6 +204,7 @@ "//components/safe_browsing/content/renderer/phishing_classifier:unit_tests_support", "//components/security_interstitials/content:security_interstitial_page", "//components/spellcheck/renderer", + "//ui/webui", ] # New deps should go in the non-iOS section below.
diff --git a/chrome/test/base/chrome_unit_test_suite.cc b/chrome/test/base/chrome_unit_test_suite.cc index f4a4540..4c6e121 100644 --- a/chrome/test/base/chrome_unit_test_suite.cc +++ b/chrome/test/base/chrome_unit_test_suite.cc
@@ -32,6 +32,7 @@ #include "ui/base/resource/resource_handle.h" #include "ui/base/ui_base_paths.h" #include "ui/gl/test/gl_surface_test_support.h" +#include "ui/webui/webui_config_map.h" #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS) #include "chromeos/dbus/constants/dbus_paths.h" @@ -161,6 +162,8 @@ content::WebUIControllerFactory::RegisterFactory( ChromeWebUIControllerFactory::GetInstance()); + // Ensure the WebUIConfigMap registers its WebUIControllerFactory. + ui::WebUIConfigMap::GetInstance(); gl::GLSurfaceTestSupport::InitializeOneOff();
diff --git a/chrome/test/chromedriver/BUILD.gn b/chrome/test/chromedriver/BUILD.gn index b3004cd..eab8b9f4 100644 --- a/chrome/test/chromedriver/BUILD.gn +++ b/chrome/test/chromedriver/BUILD.gn
@@ -38,23 +38,6 @@ args += rebase_path(js_files, root_build_dir) } -action("embed_mobile_devices_in_cpp") { - script = "embed_mobile_devices_in_cpp.py" - - ts_files = [ "//third_party/devtools-frontend/src/front_end/models/emulation/EmulatedDevices.ts" ] - inputs = [ "cpp_source.py" ] + ts_files - - outputs = [ - "$target_gen_dir/chrome/mobile_device_list.cc", - "$target_gen_dir/chrome/mobile_device_list.h", - ] - args = [ - "--directory", - rebase_path("$target_gen_dir/chrome", root_build_dir), - ] - args += rebase_path(ts_files, root_build_dir) -} - action("embed_user_data_dir_in_cpp") { script = "embed_user_data_dir_in_cpp.py" @@ -130,6 +113,8 @@ "chrome/log.h", "chrome/mobile_device.cc", "chrome/mobile_device.h", + "chrome/mobile_device_list.cc", + "chrome/mobile_device_list.h", "chrome/mobile_emulation_override_manager.cc", "chrome/mobile_emulation_override_manager.h", "chrome/navigation_tracker.cc", @@ -191,12 +176,10 @@ # Also compile the generated files. sources += get_target_outputs(":embed_js_in_cpp") - sources += get_target_outputs(":embed_mobile_devices_in_cpp") sources += get_target_outputs(":embed_user_data_dir_in_cpp") deps = [ ":embed_js_in_cpp", - ":embed_mobile_devices_in_cpp", ":embed_user_data_dir_in_cpp", "//base", "//base/third_party/dynamic_annotations",
diff --git a/chrome/test/chromedriver/chrome/mobile_device_list.cc b/chrome/test/chromedriver/chrome/mobile_device_list.cc new file mode 100644 index 0000000..19a5991 --- /dev/null +++ b/chrome/test/chromedriver/chrome/mobile_device_list.cc
@@ -0,0 +1,180 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file was generated by running: +// ./chrome/test/chromedriver/embed_mobile_devices_in_cpp.py --directory +// chrome/test/chromedriver/chrome/ +// third_party/devtools-frontend/src/front_end/emulated_devices/module.json + +#include "chrome/test/chromedriver/chrome/mobile_device_list.h" + +const char kMobileDevices[] = + "{\"iPad\": {\"deviceScaleFactor\": 2, \"mobile\": true, \"height\": 1024, " + "\"width\": 768, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (iPad; CPU " + "OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) " + "Version/11.0 Mobile/15A5341f Safari/604.1\"}, \"Laptop with touch\": " + "{\"deviceScaleFactor\": 1, \"mobile\": false, \"height\": 1280, " + "\"width\": 950, \"touch\": true, \"userAgent\": \"\"}, \"BlackBerry " + "Z30\": {\"deviceScaleFactor\": 2, \"mobile\": true, \"height\": 640, " + "\"width\": 360, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (BB10; " + "Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile " + "Safari/537.10+\"}, \"Nexus 6\": {\"deviceScaleFactor\": 3.5, \"mobile\": " + "true, \"height\": 732, \"width\": 412, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) " + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4239.0 Mobile " + "Safari/537.36\"}, \"Nexus 7\": {\"deviceScaleFactor\": 2, \"mobile\": " + "true, \"height\": 960, \"width\": 600, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) " + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4239.0 " + "Safari/537.36\"}, \"Nexus 4\": {\"deviceScaleFactor\": 2, \"mobile\": " + "true, \"height\": 640, \"width\": 384, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) " + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4239.0 Mobile " + "Safari/537.36\"}, \"Nexus 5\": {\"deviceScaleFactor\": 3, \"mobile\": " + "true, \"height\": 640, \"width\": 360, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) " + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4239.0 Mobile " + "Safari/537.36\"}, \"Blackberry PlayBook\": {\"deviceScaleFactor\": 1, " + "\"mobile\": true, \"height\": 1024, \"width\": 600, \"touch\": true, " + "\"userAgent\": \"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) " + "AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+\"}, " + "\"Pixel 2\": {\"deviceScaleFactor\": 2.625, \"mobile\": true, \"height\": " + "731, \"width\": 411, \"touch\": true, \"userAgent\": \"Mozilla/5.0 " + "(Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 " + "(KHTML, like Gecko) Chrome/86.0.4239.0 Mobile Safari/537.36\"}, \"Nexus " + "6P\": {\"deviceScaleFactor\": 3.5, \"mobile\": true, \"height\": 732, " + "\"width\": 412, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Linux; " + "Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, " + "like Gecko) Chrome/86.0.4239.0 Mobile Safari/537.36\"}, \"iPhone 8 " + "Plus\": {\"deviceScaleFactor\": 3, \"mobile\": true, \"height\": 736, " + "\"width\": 414, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (iPhone; " + "CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like " + "Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1\"}, \"iPhone 7 Plus\": " + "{\"deviceScaleFactor\": 3, \"mobile\": true, \"height\": 736, \"width\": " + "414, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS " + "13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) " + "Version/13.0.3 Mobile/15E148 Safari/604.1\"}, \"Laptop with HiDPI " + "screen\": {\"deviceScaleFactor\": 2, \"mobile\": false, \"height\": 1440, " + "\"width\": 900, \"touch\": false, \"userAgent\": \"\"}, \"Moto G4\": " + "{\"deviceScaleFactor\": 3, \"mobile\": true, \"height\": 640, \"width\": " + "360, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0.1; " + "Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4239.0 " + "Mobile Safari/537.36\"}, \"Nokia N9\": {\"deviceScaleFactor\": 1, " + "\"mobile\": true, \"height\": 854, \"width\": 480, \"touch\": true, " + "\"userAgent\": \"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, " + "like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13\"}, \"Nokia Lumia " + "520\": {\"deviceScaleFactor\": 1.5, \"mobile\": true, \"height\": 533, " + "\"width\": 320, \"touch\": true, \"userAgent\": \"Mozilla/5.0 " + "(compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; " + "ARM; Touch; NOKIA; Lumia 520)\"}, \"Kindle Fire HDX\": " + "{\"deviceScaleFactor\": 2, \"mobile\": true, \"height\": 1280, \"width\": " + "800, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Linux; U; en-us; " + "KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 " + "Safari/535.19 Silk-Accelerated=true\"}, \"Galaxy S5\": " + "{\"deviceScaleFactor\": 3, \"mobile\": true, \"height\": 640, \"width\": " + "360, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Linux; Android 5.0; " + "SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/86.0.4239.0 Mobile Safari/537.36\"}, \"iPhone 7\": " + "{\"deviceScaleFactor\": 2, \"mobile\": true, \"height\": 667, \"width\": " + "375, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS " + "13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) " + "Version/13.0.3 Mobile/15E148 Safari/604.1\"}, \"LG Optimus L70\": " + "{\"deviceScaleFactor\": 1.25, \"mobile\": true, \"height\": 640, " + "\"width\": 384, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Linux; U; " + "Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 " + "(KHTML, like Gecko) Version/4.0 Chrome/86.0.4239.0 Mobile " + "Safari/537.36\"}, \"iPhone 5\": {\"deviceScaleFactor\": 2, \"mobile\": " + "true, \"height\": 568, \"width\": 320, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) " + "AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 " + "Safari/602.1\"}, \"iPhone 4\": {\"deviceScaleFactor\": 2, \"mobile\": " + "true, \"height\": 480, \"width\": 320, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) " + "AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 " + "Safari/9537.53\"}, \"Nexus 10\": {\"deviceScaleFactor\": 2, \"mobile\": " + "true, \"height\": 1280, \"width\": 800, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) " + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4239.0 " + "Safari/537.36\"}, \"iPhone 8\": {\"deviceScaleFactor\": 2, \"mobile\": " + "true, \"height\": 667, \"width\": 375, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) " + "AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 " + "Safari/604.1\"}, \"iPhone 6\": {\"deviceScaleFactor\": 2, \"mobile\": " + "true, \"height\": 667, \"width\": 375, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) " + "AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 " + "Safari/604.1\"}, \"Galaxy S III\": {\"deviceScaleFactor\": 2, \"mobile\": " + "true, \"height\": 640, \"width\": 360, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) " + "AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile " + "Safari/534.30\"}, \"iPhone 6/7/8\": {\"deviceScaleFactor\": 2, " + "\"mobile\": true, \"height\": 667, \"width\": 375, \"touch\": true, " + "\"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) " + "AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 " + "Safari/604.1\"}, \"iPhone SE\": {\"deviceScaleFactor\": 2, \"mobile\": " + "true, \"height\": 568, \"width\": 320, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) " + "AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 " + "Safari/602.1\"}, \"Galaxy Fold\": {\"deviceScaleFactor\": 3, \"mobile\": " + "true, \"height\": 653, \"width\": 280, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) " + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4239.0 Mobile " + "Safari/537.36\"}, \"Microsoft Lumia 550\": {\"deviceScaleFactor\": 2, " + "\"mobile\": true, \"height\": 360, \"width\": 640, \"touch\": true, " + "\"userAgent\": \"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; " + "Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263\"}, \"iPad Mini\": " + "{\"deviceScaleFactor\": 2, \"mobile\": true, \"height\": 1024, \"width\": " + "768, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 11_0 " + "like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 " + "Mobile/15A5341f Safari/604.1\"}, \"iPhone 5/SE\": {\"deviceScaleFactor\": " + "2, \"mobile\": true, \"height\": 568, \"width\": 320, \"touch\": true, " + "\"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) " + "AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 " + "Safari/602.1\"}, \"iPad Pro\": {\"deviceScaleFactor\": 2, \"mobile\": " + "true, \"height\": 1366, \"width\": 1024, \"touch\": true, \"userAgent\": " + "\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 " + "(KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1\"}, \"Nexus " + "5X\": {\"deviceScaleFactor\": 2.625, \"mobile\": true, \"height\": 732, " + "\"width\": 412, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Linux; " + "Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, " + "like Gecko) Chrome/86.0.4239.0 Mobile Safari/537.36\"}, \"iPhone 6/7/8 " + "Plus\": {\"deviceScaleFactor\": 3, \"mobile\": true, \"height\": 736, " + "\"width\": 414, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (iPhone; " + "CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like " + "Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1\"}, \"Galaxy Note II\": " + "{\"deviceScaleFactor\": 2, \"mobile\": true, \"height\": 640, \"width\": " + "360, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Linux; U; Android " + "4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) " + "Version/4.0 Mobile Safari/534.30\"}, \"iPhone 6 Plus\": " + "{\"deviceScaleFactor\": 3, \"mobile\": true, \"height\": 736, \"width\": " + "414, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS " + "13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) " + "Version/13.0.3 Mobile/15E148 Safari/604.1\"}, \"iPhone X\": " + "{\"deviceScaleFactor\": 3, \"mobile\": true, \"height\": 812, \"width\": " + "375, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS " + "13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) " + "Version/13.0.3 Mobile/15E148 Safari/604.1\"}, \"Microsoft Lumia 950\": " + "{\"deviceScaleFactor\": 4, \"mobile\": true, \"height\": 640, \"width\": " + "360, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Windows Phone 10.0; " + "Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like " + "Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263\"}, \"Pixel " + "2 XL\": {\"deviceScaleFactor\": 3.5, \"mobile\": true, \"height\": 823, " + "\"width\": 411, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Linux; " + "Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 " + "(KHTML, like Gecko) Chrome/86.0.4239.0 Mobile Safari/537.36\"}, \"Galaxy " + "Note 3\": {\"deviceScaleFactor\": 3, \"mobile\": true, \"height\": 640, " + "\"width\": 360, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Linux; U; " + "Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, " + "like Gecko) Version/4.0 Mobile Safari/534.30\"}, \"JioPhone 2\": " + "{\"deviceScaleFactor\": 1, \"mobile\": true, \"height\": 320, \"width\": " + "240, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Mobile; " + "LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 " + "Firefox/48.0 KAIOS/2.5\"}, \"Laptop with MDPI screen\": " + "{\"deviceScaleFactor\": 1, \"mobile\": false, \"height\": 1280, " + "\"width\": 800, \"touch\": false, \"userAgent\": \"\"}, \"Surface Duo\": " + "{\"deviceScaleFactor\": 2.5, \"mobile\": true, \"height\": 720, " + "\"width\": 540, \"touch\": true, \"userAgent\": \"Mozilla/5.0 (Linux; " + "Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, " + "like Gecko) Chrome/86.0.4239.0 Mobile Safari/537.36\"}}";
diff --git a/chrome/test/chromedriver/chrome/mobile_device_list.h b/chrome/test/chromedriver/chrome/mobile_device_list.h new file mode 100644 index 0000000..e0e3eb97 --- /dev/null +++ b/chrome/test/chromedriver/chrome/mobile_device_list.h
@@ -0,0 +1,15 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file was generated by running: +// ./chrome/test/chromedriver/embed_mobile_devices_in_cpp.py --directory +// chrome/test/chromedriver/chrome/ +// third_party/devtools-frontend/src/front_end/emulated_devices/module.json + +#ifndef CHROME_TEST_CHROMEDRIVER_CHROME_MOBILE_DEVICE_LIST_H_ +#define CHROME_TEST_CHROMEDRIVER_CHROME_MOBILE_DEVICE_LIST_H_ + +extern const char kMobileDevices[]; + +#endif // CHROME_TEST_CHROMEDRIVER_CHROME_MOBILE_DEVICE_LIST_H_
diff --git a/chrome/test/chromedriver/embed_mobile_devices_in_cpp.py b/chrome/test/chromedriver/embed_mobile_devices_in_cpp.py index 65972d8..7486b061 100755 --- a/chrome/test/chromedriver/embed_mobile_devices_in_cpp.py +++ b/chrome/test/chromedriver/embed_mobile_devices_in_cpp.py
@@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. @@ -11,20 +11,16 @@ parsed with JSONReader. """ -import ast import json import optparse import os +import re +import subprocess import sys import chrome_paths import cpp_source -_EMULATED_DEVICES_BEGIN = '// DEVICE-LIST-BEGIN' -_EMULATED_DEVICES_END = '// DEVICE-LIST-END' -_EMULATED_DEVICES_IF = '/* DEVICE-LIST-IF-JS */' -_EMULATED_DEVICES_ELSE = '/* DEVICE-LIST-ELSE' -_EMULATED_DEVICES_ENDIF = 'DEVICE-LIST-END-IF */' def main(): parser = optparse.OptionParser() @@ -54,62 +50,36 @@ devices = {} file_name = args[0] + inside_list = False with open(file_name, 'r') as f: - data = f.read() - - # Extract the list from the source file. - begin_position = data.find(_EMULATED_DEVICES_BEGIN) - end_position = data.find(_EMULATED_DEVICES_END) - if begin_position == -1 or end_position == -1: - print('Could not find list of emulatedDevices in %s' % file_name) - return 1 - begin_position += len(_EMULATED_DEVICES_BEGIN) - list_string = '[' + data[begin_position:end_position] + ']' - - # Only used the non-localized strings in the list. - while (if_position := list_string.find(_EMULATED_DEVICES_IF)) != -1: - else_position = list_string.find(_EMULATED_DEVICES_ELSE) - if else_position == -1: - print('Could not find list of emulatedDevices in %s' % file_name) - return 1 - else_position += len(_EMULATED_DEVICES_ELSE) - list_string = list_string[0:if_position] + list_string[else_position::] - - endif_position = list_string.find(_EMULATED_DEVICES_ENDIF) - if endif_position == -1: - print('Could not find list of emulatedDevices in %s' % file_name) - return 1 - list_string = list_string[0:endif_position] + \ - list_string[endif_position + len(_EMULATED_DEVICES_ENDIF)::] - - # Do a bunch of substitutions to get something parseable by Python. - list_string = list_string.replace('true', 'True') - list_string = list_string.replace('false', 'False') - emulated_devices = ast.literal_eval(list_string) - for device in emulated_devices: - title = device['title'] - titles = [title] - # For 'iPhone 6/7/8', also add ['iPhone 6', 'iPhone 7', 'iPhone 8'] for - # backward compatibility. - if '/' in title: - words = title.split() - for i in range(len(words)): - if '/' in words[i]: - # Only support one word containing '/' - break - tokens = words[i].split('/') - for token in tokens: - words[i] = token - titles.append(' '.join(words)) - for title in titles: - devices[title] = { - 'userAgent': device['user-agent'].replace('%s', version), - 'width': device['screen']['vertical']['width'], - 'height': device['screen']['vertical']['height'], - 'deviceScaleFactor': device['screen']['device-pixel-ratio'], - 'touch': 'touch' in device['capabilities'], - 'mobile': 'mobile' in device['capabilities'], - } + emulated_devices = json.load(f) + extensions = emulated_devices['extensions'] + for extension in extensions: + if extension['type'] == 'emulated-device': + device = extension['device'] + title = device['title'] + titles = [title] + # For 'iPhone 6/7/8', also add ['iPhone 6', 'iPhone 7', 'iPhone 8'] for + # backward compatibility. + if '/' in title: + words = title.split() + for i in range(len(words)): + if '/' in words[i]: + # Only support one word containing '/' + break + tokens = words[i].split('/') + for token in tokens: + words[i] = token + titles.append(' '.join(words)) + for title in titles: + devices[title] = { + 'userAgent': device['user-agent'].replace('%s', version), + 'width': device['screen']['vertical']['width'], + 'height': device['screen']['vertical']['height'], + 'deviceScaleFactor': device['screen']['device-pixel-ratio'], + 'touch': 'touch' in device['capabilities'], + 'mobile': 'mobile' in device['capabilities'], + } output_dir = 'chrome/test/chromedriver/chrome' cpp_source.WriteSource('mobile_device_list', @@ -117,5 +87,10 @@ options.directory, {'kMobileDevices': json.dumps(devices)}) + clang_format = ['clang-format', '-i'] + subprocess.Popen(clang_format + ['%s/mobile_device_list.cc' % output_dir]) + subprocess.Popen(clang_format + ['%s/mobile_device_list.h' % output_dir]) + + if __name__ == '__main__': sys.exit(main())
diff --git a/chrome/test/chromedriver/util.py b/chrome/test/chromedriver/util.py index 1ceeb4a..9fd70df 100644 --- a/chrome/test/chromedriver/util.py +++ b/chrome/test/chromedriver/util.py
@@ -18,6 +18,7 @@ import sys import tempfile import time +import urllib import zipfile import requests @@ -191,6 +192,30 @@ return process.returncode +def DoesUrlExist(url): + """Determines whether a resource exists at the given URL. + + Args: + url: URL to be verified. + + Returns: + True if url exists, otherwise False. + """ + parsed = urllib.parse.urlparse(url) + try: + conn = http.client.HTTPConnection(parsed.netloc) + conn.request('HEAD', parsed.path) + response = conn.getresponse() + except http.client.HTTPException: + return False + finally: + conn.close() + # Follow both permanent (301) and temporary (302) redirects. + if response.status == 302 or response.status == 301: + return DoesUrlExist(response.getheader('location')) + return response.status == 200 + + def MarkBuildStepStart(name): print('@@@BUILD_STEP %s@@@' % name) sys.stdout.flush()
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index a2ec833..f65dda80 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -18050,5 +18050,24 @@ } } ] + }, + "WarnBeforeQuittingEnabled": { + "os": [ + "mac" + ], + "can_be_recommended": true, + "policy_pref_mapping_tests": [ + { + "policies": { + "WarnBeforeQuittingEnabled": true + }, + "prefs": { + "browser.confirm_to_quit": { + "location": "local_state", + "value": true + } + } + } + ] } }
diff --git a/chromeos/network/managed_cellular_pref_handler.cc b/chromeos/network/managed_cellular_pref_handler.cc index dd4eae7..e489337 100644 --- a/chromeos/network/managed_cellular_pref_handler.cc +++ b/chromeos/network/managed_cellular_pref_handler.cc
@@ -31,6 +31,23 @@ device_prefs_ = device_prefs; } +void ManagedCellularPrefHandler::AddObserver(Observer* observer) { + observer_list_.AddObserver(observer); +} + +void ManagedCellularPrefHandler::RemoveObserver(Observer* observer) { + observer_list_.RemoveObserver(observer); +} + +bool ManagedCellularPrefHandler::HasObserver(Observer* observer) const { + return observer_list_.HasObserver(observer); +} + +void ManagedCellularPrefHandler::NotifyManagedCellularPrefChanged() { + for (auto& observer : observer_list_) + observer.OnManagedCellularPrefChanged(); +} + void ManagedCellularPrefHandler::AddIccidSmdpPair( const std::string& iccid, const std::string& smdp_address) { @@ -48,6 +65,7 @@ device_prefs_, ash::prefs::kManagedCellularIccidSmdpPair); update->SetString(iccid, smdp_address); network_state_handler_->SyncStubCellularNetworks(); + NotifyManagedCellularPrefChanged(); } void ManagedCellularPrefHandler::RemovePairWithIccid(const std::string& iccid) { @@ -65,6 +83,7 @@ device_prefs_, ash::prefs::kManagedCellularIccidSmdpPair); update->Remove(iccid); network_state_handler_->SyncStubCellularNetworks(); + NotifyManagedCellularPrefChanged(); } const std::string* ManagedCellularPrefHandler::GetSmdpAddressFromIccid(
diff --git a/chromeos/network/managed_cellular_pref_handler.h b/chromeos/network/managed_cellular_pref_handler.h index fd0d30a..6c826cf 100644 --- a/chromeos/network/managed_cellular_pref_handler.h +++ b/chromeos/network/managed_cellular_pref_handler.h
@@ -6,6 +6,8 @@ #define CHROMEOS_NETWORK_MANAGED_CELLULAR_PREF_HANDLER_H_ #include "base/component_export.h" +#include "base/observer_list.h" +#include "base/observer_list_types.h" #include "components/prefs/pref_service.h" class PrefService; @@ -20,6 +22,14 @@ // prefs. class COMPONENT_EXPORT(CHROMEOS_NETWORK) ManagedCellularPrefHandler { public: + class Observer : public base::CheckedObserver { + public: + ~Observer() override = default; + + // Invoked when a ICCID - SMDP address is added or removed. + virtual void OnManagedCellularPrefChanged() = 0; + }; + ManagedCellularPrefHandler(); ManagedCellularPrefHandler(const ManagedCellularPrefHandler&) = delete; ManagedCellularPrefHandler& operator=(const ManagedCellularPrefHandler&) = @@ -44,10 +54,18 @@ // nullptr if no such |iccid| is found. const std::string* GetSmdpAddressFromIccid(const std::string& iccid) const; + void AddObserver(Observer* observer); + void RemoveObserver(Observer* observer); + bool HasObserver(Observer* observer) const; + private: + void NotifyManagedCellularPrefChanged(); + NetworkStateHandler* network_state_handler_ = nullptr; // Initialized to null and set once SetDevicePrefs() is called. PrefService* device_prefs_ = nullptr; + + base::ObserverList<Observer> observer_list_; }; } // namespace chromeos
diff --git a/chromeos/network/managed_cellular_pref_handler_unittest.cc b/chromeos/network/managed_cellular_pref_handler_unittest.cc index 44d40c3..be9d3e9 100644 --- a/chromeos/network/managed_cellular_pref_handler_unittest.cc +++ b/chromeos/network/managed_cellular_pref_handler_unittest.cc
@@ -16,6 +16,20 @@ const char kIccid[] = "1234567890"; const char kSmdpAddress[] = "LPA:1$SmdpAddress$ActivationCode"; +class FakeObserver : public ManagedCellularPrefHandler::Observer { + public: + FakeObserver() = default; + ~FakeObserver() override = default; + + int change_count() const { return change_count_; } + + // ManagedCellularPref::Observer: + void OnManagedCellularPrefChanged() override { ++change_count_; } + + private: + int change_count_ = 0u; +}; + } // namespace class ManagedCellularPrefHandlerTest : public testing::Test { @@ -29,11 +43,19 @@ device_prefs_.registry()); } - void TearDown() override { managed_cellular_pref_handler_.reset(); } + void TearDown() override { + managed_cellular_pref_handler_->RemoveObserver(&observer_); + managed_cellular_pref_handler_.reset(); + } void Init() { + if (managed_cellular_pref_handler_ && + managed_cellular_pref_handler_->HasObserver(&observer_)) { + managed_cellular_pref_handler_->RemoveObserver(&observer_); + } managed_cellular_pref_handler_ = std::make_unique<ManagedCellularPrefHandler>(); + managed_cellular_pref_handler_->AddObserver(&observer_); managed_cellular_pref_handler_->Init(helper_.network_state_handler()); } @@ -55,11 +77,14 @@ return managed_cellular_pref_handler_->GetSmdpAddressFromIccid(iccid); } + int NumObserverEvents() { return observer_.change_count(); } + private: base::test::TaskEnvironment task_environment_{ base::test::TaskEnvironment::TimeSource::MOCK_TIME}; NetworkStateTestHelper helper_{/*use_default_devices_and_services=*/false}; TestingPrefServiceSimple device_prefs_; + FakeObserver observer_; std::unique_ptr<ManagedCellularPrefHandler> managed_cellular_pref_handler_; }; @@ -71,11 +96,13 @@ // Add a pair of ICCID - SMDP address pair to pref and verify that the correct // value can be retrieved. AddIccidSmdpPair(kIccid, kSmdpAddress); + EXPECT_EQ(1, NumObserverEvents()); const std::string* smdp_address = GetSmdpAddressFromIccid(kIccid); EXPECT_TRUE(smdp_address); EXPECT_EQ(kSmdpAddress, *smdp_address); EXPECT_FALSE(GetSmdpAddressFromIccid("00000000000")); RemovePairForIccid(kIccid); + EXPECT_EQ(2, NumObserverEvents()); smdp_address = GetSmdpAddressFromIccid(kIccid); EXPECT_FALSE(smdp_address); } @@ -89,6 +116,7 @@ const std::string* smdp_address = GetSmdpAddressFromIccid(kIccid); EXPECT_FALSE(smdp_address); AddIccidSmdpPair(kIccid, kSmdpAddress); + EXPECT_EQ(0, NumObserverEvents()); smdp_address = GetSmdpAddressFromIccid(kIccid); EXPECT_FALSE(smdp_address); }
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt index 63b13a3..50f7847 100644 --- a/chromeos/profiles/orderfile.newest.txt +++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@ -chromeos-chrome-orderfile-field-101-4951.6-1648463443-benchmark-101.0.4951.19-r1.orderfile.xz +chromeos-chrome-orderfile-field-101-4951.6-1648463443-benchmark-101.0.4951.20-r1.orderfile.xz
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index 6fcd3be..c169cfc 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "7.22", - "log_list_timestamp": "2022-04-02T02:55:03Z", + "version": "7.24", + "log_list_timestamp": "2022-04-03T02:52:59Z", "operators": [ { "name": "Google",
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 81f108d..12edc804 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -30618,6 +30618,38 @@ When the device is on AC, the adaptive charging model evaluates if charging process should be hold to extend battery life. If the adaptive charging model holds the charging process, it'll keep the battery at a certain level (i.e. 80%) and then charge the device to 100% when the user need it. If this policy is set to True or left not set, the adaptive charging model will be enabled and allowed to hold the charging process to extend battery life. If this policy is set to False, the adaptive charging model will not influence the charging process.''', }, + { + 'name': 'WarnBeforeQuittingEnabled', + 'owners': ['file://components/policy/resources/OWNERS'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'items': [ + { + 'value': True, + 'caption': '''Show a warning dialog when the user is attempting to quit''', + }, + { + 'value': False, + 'caption': '''Do not show a warning dialog when the user is attempting to quit''', + }, + ], + 'supported_on': ['chrome.mac:102-'], + 'features': { + 'can_be_recommended': True, + 'dynamic_refresh': True, + 'per_profile': False, + }, + 'example_value': True, + 'default': True, + 'id': 973, + 'caption': '''Show a warning dialog when the user is attempting to quit''', + 'tags': [], + 'desc': '''Controls "Warn Before Quitting (⌘Q)" dialog when the user is attempting to quit browser. + + If this policy is set to Enabled or not set, a warning dialog is shown when the user is attempting to quit. + + If this policy is set to Disabled, a warning dialog is not shown when the user is attempting to quit.''' + }, ], 'messages': { # Messages that are not associated to any policies. @@ -31614,6 +31646,6 @@ 'placeholders': [], 'deleted_policy_ids': [114, 115, 204, 205, 206, 341, 412, 476, 544, 546, 562, 569, 578, 583, 585, 586, 587, 588, 589, 590, 591, 600, 668, 669, 872], 'deleted_atomic_policy_group_ids': [19], - 'highest_id_currently_used': 972, + 'highest_id_currently_used': 973, 'highest_atomic_group_id_currently_used': 42 }
diff --git a/components/services/app_service/BUILD.gn b/components/services/app_service/BUILD.gn index d6e3902..5e460cc 100644 --- a/components/services/app_service/BUILD.gn +++ b/components/services/app_service/BUILD.gn
@@ -10,7 +10,6 @@ deps = [ "//base", - "//content/public/browser", "//mojo/public/cpp/bindings", ]
diff --git a/components/services/app_service/app_service_mojom_impl.cc b/components/services/app_service/app_service_mojom_impl.cc index 6099254..b684783 100644 --- a/components/services/app_service/app_service_mojom_impl.cc +++ b/components/services/app_service/app_service_mojom_impl.cc
@@ -4,53 +4,17 @@ #include "components/services/app_service/app_service_mojom_impl.h" -#include <iterator> #include <utility> #include "base/bind.h" -#include "base/containers/contains.h" -#include "base/containers/flat_map.h" -#include "base/debug/dump_without_crashing.h" -#include "base/files/file_util.h" -#include "base/json/json_string_value_serializer.h" -#include "base/metrics/histogram_functions.h" -#include "base/metrics/histogram_macros.h" -#include "base/ranges/algorithm.h" -#include "base/task/task_traits.h" -#include "base/task/thread_pool.h" #include "base/threading/scoped_blocking_call.h" -#include "base/token.h" #include "components/services/app_service/public/cpp/intent_filter_util.h" -#include "components/services/app_service/public/cpp/preferred_apps_converter.h" +#include "components/services/app_service/public/cpp/preferred_apps_list.h" #include "components/services/app_service/public/mojom/types.mojom.h" -#include "content/public/browser/browser_thread.h" #include "mojo/public/cpp/bindings/clone_traits.h" namespace { -const base::FilePath::CharType kPreferredAppsDirname[] = - FILE_PATH_LITERAL("PreferredApps"); - -// These values are persisted to logs. Entries should not be renumbered and -// numeric values should never be reused. -enum class PreferredAppsFileIOAction { - kWriteSuccess = 0, - kWriteFailed = 1, - kReadSuccess = 2, - kReadFailed = 3, - kMaxValue = kReadFailed, -}; - -// These values are persisted to logs. Entries should not be renumbered and -// numeric values should never be reused. -enum class PreferredAppsUpdateAction { - kAdd = 0, - kDeleteForFilter = 1, - kDeleteForAppId = 2, - kUpgraded = 3, - kMaxValue = kUpgraded, -}; - void Connect(apps::mojom::Publisher* publisher, apps::mojom::Subscriber* subscriber) { mojo::PendingRemote<apps::mojom::Subscriber> clone; @@ -59,32 +23,6 @@ publisher->Connect(std::move(clone), nullptr); } -void LogPreferredAppEntryCount(int entry_count) { - base::UmaHistogramCounts10000("Apps.PreferredApps.EntryCount", entry_count); -} - -// Performs blocking I/O. Called on another thread. -void WriteDataBlocking(const base::FilePath& preferred_apps_file, - const std::string& preferred_apps) { - base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, - base::BlockingType::MAY_BLOCK); - bool write_success = - base::WriteFile(preferred_apps_file, preferred_apps.c_str(), - preferred_apps.size()) != -1; - if (!write_success) { - DVLOG(0) << "Fail to write preferred apps to " << preferred_apps_file; - } -} - -// Performs blocking I/O. Called on another thread. -std::string ReadDataBlocking(const base::FilePath& preferred_apps_file) { - base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, - base::BlockingType::MAY_BLOCK); - std::string preferred_apps_string; - base::ReadFileToString(preferred_apps_file, &preferred_apps_string); - return preferred_apps_string; -} - } // namespace namespace apps { @@ -93,16 +31,10 @@ const base::FilePath& profile_dir, base::OnceClosure read_completed_for_testing, base::OnceClosure write_completed_for_testing) - : profile_dir_(profile_dir), - should_write_preferred_apps_to_file_(false), - writing_preferred_apps_(false), - task_runner_(base::ThreadPool::CreateSequencedTaskRunner( - {base::MayBlock(), base::TaskPriority::BEST_EFFORT, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})), - read_completed_for_testing_(std::move(read_completed_for_testing)), - write_completed_for_testing_(std::move(write_completed_for_testing)) { - InitializePreferredApps(); -} + : preferred_apps_(this, + profile_dir, + std::move(read_completed_for_testing), + std::move(write_completed_for_testing)) {} AppServiceMojomImpl::~AppServiceMojomImpl() = default; @@ -149,8 +81,9 @@ // TODO: store the opts somewhere. // Initialise the Preferred Apps in the Subscribers on register. - if (preferred_apps_.IsInitialized()) { - subscriber->InitializePreferredApps(preferred_apps_.GetValue()); + if (preferred_apps_.preferred_apps_list_.IsInitialized()) { + subscriber->InitializePreferredApps( + preferred_apps_.preferred_apps_list_.GetValue()); } // Add the new subscriber to the set. @@ -315,48 +248,35 @@ apps::mojom::IntentFilterPtr intent_filter, apps::mojom::IntentPtr intent, bool from_publisher) { - // Unretained is safe as the callback is owned by |this|. - RunAfterPreferredAppsReady(base::BindOnce( - &AppServiceMojomImpl::AddPreferredAppImpl, base::Unretained(this), - app_type, app_id, std::move(intent_filter), std::move(intent), - from_publisher)); + preferred_apps_.AddPreferredApp(app_type, app_id, std::move(intent_filter), + std::move(intent), from_publisher); } void AppServiceMojomImpl::RemovePreferredApp(apps::mojom::AppType app_type, const std::string& app_id) { - // Unretained is safe as the callback is owned by |this|. - RunAfterPreferredAppsReady( - base::BindOnce(&AppServiceMojomImpl::RemovePreferredAppImpl, - base::Unretained(this), app_type, app_id)); + preferred_apps_.RemovePreferredApp(app_type, app_id); } void AppServiceMojomImpl::RemovePreferredAppForFilter( apps::mojom::AppType app_type, const std::string& app_id, apps::mojom::IntentFilterPtr intent_filter) { - // Unretained is safe as the callback is owned by |this|. - RunAfterPreferredAppsReady(base::BindOnce( - &AppServiceMojomImpl::RemovePreferredAppForFilterImpl, - base::Unretained(this), app_type, app_id, std::move(intent_filter))); + preferred_apps_.RemovePreferredAppForFilter(app_type, app_id, + std::move(intent_filter)); } void AppServiceMojomImpl::SetSupportedLinksPreference( apps::mojom::AppType app_type, const std::string& app_id, std::vector<apps::mojom::IntentFilterPtr> all_link_filters) { - // Unretained is safe as the callback is owned by |this|. - RunAfterPreferredAppsReady(base::BindOnce( - &AppServiceMojomImpl::SetSupportedLinksPreferenceImpl, - base::Unretained(this), app_type, app_id, std::move(all_link_filters))); + preferred_apps_.SetSupportedLinksPreference(app_type, app_id, + std::move(all_link_filters)); } void AppServiceMojomImpl::RemoveSupportedLinksPreference( apps::mojom::AppType app_type, const std::string& app_id) { - // Unretained is safe as the callback is owned by |this|. - RunAfterPreferredAppsReady( - base::BindOnce(&AppServiceMojomImpl::RemoveSupportedLinksPreferenceImpl, - base::Unretained(this), app_type, app_id)); + preferred_apps_.RemoveSupportedLinksPreference(app_type, app_id); } void AppServiceMojomImpl::SetResizeLocked(apps::mojom::AppType app_type, @@ -390,8 +310,51 @@ iter->second->SetRunOnOsLoginMode(app_id, run_on_os_login_mode); } -PreferredAppsList& AppServiceMojomImpl::GetPreferredAppsForTesting() { - return preferred_apps_; +void AppServiceMojomImpl::InitializePreferredAppsForAllSubscribers() { + for (auto& subscriber : subscribers_) { + subscriber->InitializePreferredApps( + preferred_apps_.preferred_apps_list_.GetValue()); + } +} + +void AppServiceMojomImpl::OnPreferredAppsChanged( + apps::mojom::PreferredAppChangesPtr changes) { + for (auto& subscriber : subscribers_) { + subscriber->OnPreferredAppsChanged(changes->Clone()); + } +} + +void AppServiceMojomImpl::OnPreferredAppSet( + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter, + apps::mojom::IntentPtr intent, + apps::mojom::ReplacedAppPreferencesPtr replaced_app_preferences) { + for (const auto& iter : publishers_) { + iter.second->OnPreferredAppSet(app_id, intent_filter->Clone(), + intent->Clone(), + replaced_app_preferences->Clone()); + } +} + +void AppServiceMojomImpl::OnSupportedLinksPreferenceChanged( + const std::string& app_id, + bool open_in_app) { + for (const auto& iter : publishers_) { + iter.second->OnSupportedLinksPreferenceChanged(app_id, open_in_app); + } +} + +apps::mojom::Publisher* AppServiceMojomImpl::GetPublisher( + apps::mojom::AppType app_type) { + auto iter = publishers_.find(app_type); + if (iter == publishers_.end()) { + return nullptr; + } + return iter->second.get(); +} + +PreferredAppsList& AppServiceMojomImpl::GetPreferredAppsListForTesting() { + return preferred_apps_.preferred_apps_list_; } void AppServiceMojomImpl::OnPublisherDisconnected( @@ -399,288 +362,4 @@ publishers_.erase(app_type); } -void AppServiceMojomImpl::InitializePreferredApps() { - ReadFromJSON(profile_dir_); -} - -void AppServiceMojomImpl::WriteToJSON( - const base::FilePath& profile_dir, - const apps::PreferredAppsList& preferred_apps) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - // If currently is writing preferred apps to file, set a flag to write after - // the current write completed. - if (writing_preferred_apps_) { - should_write_preferred_apps_to_file_ = true; - return; - } - - writing_preferred_apps_ = true; - - auto preferred_apps_value = - apps::ConvertPreferredAppsToValue(preferred_apps.GetReference()); - - std::string json_string; - JSONStringValueSerializer serializer(&json_string); - serializer.Serialize(preferred_apps_value); - - task_runner_->PostTaskAndReply( - FROM_HERE, - base::BindOnce(&WriteDataBlocking, - profile_dir.Append(kPreferredAppsDirname), json_string), - base::BindOnce(&AppServiceMojomImpl::WriteCompleted, - weak_ptr_factory_.GetWeakPtr())); -} - -void AppServiceMojomImpl::WriteCompleted() { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - writing_preferred_apps_ = false; - if (!should_write_preferred_apps_to_file_) { - // Call the testing callback if it is set. - if (write_completed_for_testing_) { - std::move(write_completed_for_testing_).Run(); - } - return; - } - // If need to perform another write, write the most up to date preferred apps - // from memory to file. - should_write_preferred_apps_to_file_ = false; - WriteToJSON(profile_dir_, preferred_apps_); -} - -void AppServiceMojomImpl::ReadFromJSON(const base::FilePath& profile_dir) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - task_runner_->PostTaskAndReplyWithResult( - FROM_HERE, - base::BindOnce(&ReadDataBlocking, - profile_dir.Append(kPreferredAppsDirname)), - base::BindOnce(&AppServiceMojomImpl::ReadCompleted, - weak_ptr_factory_.GetWeakPtr())); -} - -void AppServiceMojomImpl::ReadCompleted(std::string preferred_apps_string) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - bool preferred_apps_upgraded = false; - if (preferred_apps_string.empty()) { - preferred_apps_.Init(); - } else { - std::string json_string; - JSONStringValueDeserializer deserializer(preferred_apps_string); - int error_code; - std::string error_message; - auto preferred_apps_value = - deserializer.Deserialize(&error_code, &error_message); - - if (!preferred_apps_value) { - DVLOG(0) << "Fail to deserialize json value from string with error code: " - << error_code << " and error message: " << error_message; - preferred_apps_.Init(); - } else { - preferred_apps_upgraded = IsUpgradedForSharing(*preferred_apps_value); - auto preferred_apps = - apps::ParseValueToPreferredApps(*preferred_apps_value); - if (!preferred_apps_upgraded) { - UpgradePreferredApps(preferred_apps); - } - preferred_apps_.Init(preferred_apps); - } - } - if (!preferred_apps_upgraded) { - WriteToJSON(profile_dir_, preferred_apps_); - } - - for (auto& subscriber : subscribers_) { - subscriber->InitializePreferredApps(preferred_apps_.GetValue()); - } - - LogPreferredAppEntryCount(preferred_apps_.GetEntrySize()); - - while (!pending_preferred_apps_tasks_.empty()) { - std::move(pending_preferred_apps_tasks_.front()).Run(); - pending_preferred_apps_tasks_.pop(); - } - - if (read_completed_for_testing_) { - std::move(read_completed_for_testing_).Run(); - } -} - -void AppServiceMojomImpl::RunAfterPreferredAppsReady(base::OnceClosure task) { - if (preferred_apps_.IsInitialized()) { - std::move(task).Run(); - } else { - pending_preferred_apps_tasks_.push(std::move(task)); - } -} - -void AppServiceMojomImpl::AddPreferredAppImpl( - apps::mojom::AppType app_type, - const std::string& app_id, - apps::mojom::IntentFilterPtr intent_filter, - apps::mojom::IntentPtr intent, - bool from_publisher) { - // TODO(https://crbug.com/853604): Remove this and convert to a DCHECK - // after finding out the root cause. - if (app_id.empty()) { - base::debug::DumpWithoutCrashing(); - return; - } - - apps::mojom::ReplacedAppPreferencesPtr replaced_apps = - preferred_apps_.AddPreferredApp(app_id, intent_filter); - - WriteToJSON(profile_dir_, preferred_apps_); - - auto changes = apps::mojom::PreferredAppChanges::New(); - - changes->added_filters[app_id].push_back(intent_filter->Clone()); - changes->removed_filters = Clone(replaced_apps->replaced_preference); - - for (auto& subscriber : subscribers_) { - subscriber->OnPreferredAppsChanged(changes->Clone()); - } - - if (from_publisher || !intent) { - return; - } - - // Sync the change to publishers. Because |replaced_app_preference| can - // be any app type, we should run this for all publishers. Currently - // only implemented in ARC publisher. - // TODO(crbug.com/853604): The |replaced_app_preference| can be really big, - // update this logic to only call the relevant publisher for each app after - // updating the storage structure. - for (const auto& iter : publishers_) { - iter.second->OnPreferredAppSet(app_id, intent_filter->Clone(), - intent->Clone(), replaced_apps->Clone()); - } -} - -void AppServiceMojomImpl::RemovePreferredAppImpl(apps::mojom::AppType app_type, - const std::string& app_id) { - std::vector<apps::mojom::IntentFilterPtr> removed_filters = - preferred_apps_.DeleteAppId(app_id); - if (!removed_filters.empty()) { - WriteToJSON(profile_dir_, preferred_apps_); - - auto changes = apps::mojom::PreferredAppChanges::New(); - changes->removed_filters.emplace(app_id, std::move(removed_filters)); - for (auto& subscriber : subscribers_) { - subscriber->OnPreferredAppsChanged(changes->Clone()); - } - } -} - -void AppServiceMojomImpl::RemovePreferredAppForFilterImpl( - apps::mojom::AppType app_type, - const std::string& app_id, - apps::mojom::IntentFilterPtr intent_filter) { - std::vector<apps::mojom::IntentFilterPtr> removed_filters = - preferred_apps_.DeletePreferredApp(app_id, intent_filter); - - if (!removed_filters.empty()) { - WriteToJSON(profile_dir_, preferred_apps_); - - auto changes = apps::mojom::PreferredAppChanges::New(); - changes->removed_filters.emplace(app_id, std::move(removed_filters)); - for (auto& subscriber : subscribers_) { - subscriber->OnPreferredAppsChanged(changes->Clone()); - } - } -} - -void AppServiceMojomImpl::SetSupportedLinksPreferenceImpl( - apps::mojom::AppType app_type, - const std::string& app_id, - std::vector<apps::mojom::IntentFilterPtr> all_link_filters) { - auto changes = apps::mojom::PreferredAppChanges::New(); - auto& added = changes->added_filters; - auto& removed = changes->removed_filters; - - for (auto& filter : all_link_filters) { - apps::mojom::ReplacedAppPreferencesPtr replaced_apps = - preferred_apps_.AddPreferredApp(app_id, filter); - added[app_id].push_back(std::move(filter)); - - // If we removed overlapping supported links when adding the new app, those - // affected apps no longer handle all their Supported Links filters and so - // need to have all their other Supported Links filters removed. - // Additionally, track all removals in the |removed| map so that subscribers - // can be notified correctly. - for (auto& replaced_app_and_filters : replaced_apps->replaced_preference) { - const std::string& removed_app_id = replaced_app_and_filters.first; - bool first_removal_for_app = !base::Contains(removed, app_id); - bool did_replace_supported_link = base::ranges::any_of( - replaced_app_and_filters.second, - [&removed_app_id](const auto& filter) { - return apps_util::IsSupportedLinkForApp(removed_app_id, filter); - }); - - std::vector<apps::mojom::IntentFilterPtr>& removed_filters_for_app = - removed[removed_app_id]; - removed_filters_for_app.insert( - removed_filters_for_app.end(), - std::make_move_iterator(replaced_app_and_filters.second.begin()), - std::make_move_iterator(replaced_app_and_filters.second.end())); - - // We only need to remove other supported links once per app. - if (first_removal_for_app && did_replace_supported_link) { - std::vector<apps::mojom::IntentFilterPtr> removed_filters = - preferred_apps_.DeleteSupportedLinks(removed_app_id); - removed_filters_for_app.insert( - removed_filters_for_app.end(), - std::make_move_iterator(removed_filters.begin()), - std::make_move_iterator(removed_filters.end())); - } - } - } - - WriteToJSON(profile_dir_, preferred_apps_); - - for (auto& subscriber : subscribers_) { - subscriber->OnPreferredAppsChanged(changes->Clone()); - } - - // Notify publishers: The new app has been set to open links, and all removed - // apps no longer handle links. - const auto publisher_iter = publishers_.find(app_type); - if (publisher_iter != publishers_.end()) { - publisher_iter->second->OnSupportedLinksPreferenceChanged( - app_id, /*open_in_app=*/true); - } - for (const auto& removed_app_and_filters : removed) { - // We don't know what app type the app is, so we have to notify all - // publishers. - for (const auto& iter : publishers_) { - iter.second->OnSupportedLinksPreferenceChanged( - removed_app_and_filters.first, - /*open_in_app=*/false); - } - } -} -void AppServiceMojomImpl::RemoveSupportedLinksPreferenceImpl( - apps::mojom::AppType app_type, - const std::string& app_id) { - auto iter = publishers_.find(app_type); - if (iter == publishers_.end()) { - return; - } - - std::vector<apps::mojom::IntentFilterPtr> removed_filters = - preferred_apps_.DeleteSupportedLinks(app_id); - - if (!removed_filters.empty()) { - WriteToJSON(profile_dir_, preferred_apps_); - - auto changes = apps::mojom::PreferredAppChanges::New(); - changes->removed_filters.emplace(app_id, std::move(removed_filters)); - - for (auto& subscriber : subscribers_) { - subscriber->OnPreferredAppsChanged(changes->Clone()); - } - } - - iter->second->OnSupportedLinksPreferenceChanged(app_id, - /*open_in_app=*/false); -} - } // namespace apps
diff --git a/components/services/app_service/app_service_mojom_impl.h b/components/services/app_service/app_service_mojom_impl.h index d5ca5c72..6e1b40fc 100644 --- a/components/services/app_service/app_service_mojom_impl.h +++ b/components/services/app_service/app_service_mojom_impl.h
@@ -7,13 +7,8 @@ #include <map> -#include "base/callback.h" -#include "base/containers/queue.h" #include "base/files/file_path.h" -#include "base/memory/scoped_refptr.h" -#include "base/memory/weak_ptr.h" -#include "base/task/sequenced_task_runner.h" -#include "components/services/app_service/public/cpp/preferred_apps_list.h" +#include "components/services/app_service/public/cpp/preferred_apps.h" #include "components/services/app_service/public/mojom/app_service.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" @@ -23,10 +18,13 @@ namespace apps { +class PreferredAppsList; + // The implementation of the apps::mojom::AppService Mojo interface. // // See components/services/app_service/README.md. -class AppServiceMojomImpl : public apps::mojom::AppService { +class AppServiceMojomImpl : public apps::mojom::AppService, + public PreferredApps::Host { public: AppServiceMojomImpl( const base::FilePath& profile_dir, @@ -127,49 +125,31 @@ const std::string& app_id, apps::mojom::RunOnOsLoginMode run_on_os_login_mode) override; - // Retern the preferred_apps_ for testing. - PreferredAppsList& GetPreferredAppsForTesting(); + // PreferredApps::Host overrides. + void InitializePreferredAppsForAllSubscribers() override; - void SetWriteCompletedCallbackForTesting(base::OnceClosure testing_callback); + void OnPreferredAppsChanged( + apps::mojom::PreferredAppChangesPtr changes) override; + + void OnPreferredAppSet( + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter, + apps::mojom::IntentPtr intent, + apps::mojom::ReplacedAppPreferencesPtr replaced_app_preferences) override; + + void OnSupportedLinksPreferenceChanged(const std::string& app_id, + bool open_in_app) override; + + // Returns publisher for `app_type`, or nullptr if there is no publisher for + // `app_type`. + apps::mojom::Publisher* GetPublisher(apps::mojom::AppType app_type) override; + + // Retern the preferred_apps_list_ for testing. + PreferredAppsList& GetPreferredAppsListForTesting(); private: void OnPublisherDisconnected(apps::mojom::AppType app_type); - // Initialize the preferred apps from disk. - void InitializePreferredApps(); - - // Write the preferred apps to a json file. - void WriteToJSON(const base::FilePath& profile_dir, - const apps::PreferredAppsList& preferred_apps); - - void WriteCompleted(); - - void ReadFromJSON(const base::FilePath& profile_dir); - - void ReadCompleted(std::string preferred_apps_string); - - // Runs |task| after the PreferredAppsList is fully initialized. |task| will - // be run immediately if preferred apps are already initialized. - void RunAfterPreferredAppsReady(base::OnceClosure task); - - void AddPreferredAppImpl(apps::mojom::AppType app_type, - const std::string& app_id, - apps::mojom::IntentFilterPtr intent_filter, - apps::mojom::IntentPtr intent, - bool from_publisher); - void RemovePreferredAppImpl(apps::mojom::AppType app_type, - const std::string& app_id); - void RemovePreferredAppForFilterImpl( - apps::mojom::AppType app_type, - const std::string& app_id, - apps::mojom::IntentFilterPtr intent_filter); - void SetSupportedLinksPreferenceImpl( - apps::mojom::AppType app_type, - const std::string& app_id, - std::vector<apps::mojom::IntentFilterPtr> all_link_filters); - void RemoveSupportedLinksPreferenceImpl(apps::mojom::AppType app_type, - const std::string& app_id); - // publishers_ is a std::map, not a mojo::RemoteSet, since we want to // be able to find *the* publisher for a given apps::mojom::AppType. std::map<apps::mojom::AppType, mojo::Remote<apps::mojom::Publisher>> @@ -180,28 +160,7 @@ // destroyed first, closing the connection to avoid dangling callbacks. mojo::ReceiverSet<apps::mojom::AppService> receivers_; - PreferredAppsList preferred_apps_; - - base::FilePath profile_dir_; - - // True if need to write preferred apps to file after the current write is - // completed. - bool should_write_preferred_apps_to_file_; - - // True if it is currently writing preferred apps to file. - bool writing_preferred_apps_; - - // Task runner where the file operations takes place. This is to make sure the - // write operation will be operated in sequence. - scoped_refptr<base::SequencedTaskRunner> const task_runner_; - - base::OnceClosure read_completed_for_testing_; - - base::OnceClosure write_completed_for_testing_; - - base::queue<base::OnceClosure> pending_preferred_apps_tasks_; - - base::WeakPtrFactory<AppServiceMojomImpl> weak_ptr_factory_{this}; + PreferredApps preferred_apps_; }; } // namespace apps
diff --git a/components/services/app_service/app_service_mojom_impl_unittest.cc b/components/services/app_service/app_service_mojom_impl_unittest.cc index 1c3e8c5..ff4c3e6 100644 --- a/components/services/app_service/app_service_mojom_impl_unittest.cc +++ b/components/services/app_service/app_service_mojom_impl_unittest.cc
@@ -382,26 +382,26 @@ // Test Initialize. ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); AppServiceMojomImpl impl(temp_dir_.GetPath()); - impl.GetPreferredAppsForTesting().Init(); + impl.GetPreferredAppsListForTesting().Init(); const char kAppId1[] = "abcdefg"; const char kAppId2[] = "aaaaaaa"; GURL filter_url = GURL("https://www.google.com/abc"); auto intent_filter = apps_util::CreateIntentFilterForUrlScope(filter_url); - impl.GetPreferredAppsForTesting().AddPreferredApp(kAppId1, intent_filter); + impl.GetPreferredAppsListForTesting().AddPreferredApp(kAppId1, intent_filter); // Add one subscriber. FakeSubscriber sub0(&impl); task_environment_.RunUntilIdle(); EXPECT_EQ(sub0.PreferredApps().GetValue(), - impl.GetPreferredAppsForTesting().GetValue()); + impl.GetPreferredAppsListForTesting().GetValue()); // Add another subscriber. FakeSubscriber sub1(&impl); task_environment_.RunUntilIdle(); EXPECT_EQ(sub1.PreferredApps().GetValue(), - impl.GetPreferredAppsForTesting().GetValue()); + impl.GetPreferredAppsListForTesting().GetValue()); FakePublisher pub0(&impl, apps::mojom::AppType::kArc, std::vector<std::string>{kAppId1, kAppId2}); @@ -509,11 +509,12 @@ // Both changes to the PreferredAppsList should have been applied. ASSERT_EQ( kAppId1, - impl.GetPreferredAppsForTesting().FindPreferredAppForIntent( + impl.GetPreferredAppsListForTesting().FindPreferredAppForIntent( apps_util::CreateShareIntentFromFiles( {GURL("filesystem:chrome://foo/image.png")}, {"image/png"}))); - ASSERT_EQ(kAppId2, impl.GetPreferredAppsForTesting().FindPreferredAppForUrl( - filter_url)); + ASSERT_EQ( + kAppId2, + impl.GetPreferredAppsListForTesting().FindPreferredAppForUrl(filter_url)); } TEST_F(AppServiceMojomImplTest, PreferredAppsPersistency) { @@ -542,8 +543,9 @@ AppServiceMojomImpl impl(temp_dir_.GetPath(), run_loop_read.QuitClosure()); impl.FlushMojoCallsForTesting(); run_loop_read.Run(); - EXPECT_EQ(kAppId1, impl.GetPreferredAppsForTesting().FindPreferredAppForUrl( - filter_url)); + EXPECT_EQ(kAppId1, + impl.GetPreferredAppsListForTesting().FindPreferredAppForUrl( + filter_url)); } } @@ -551,7 +553,7 @@ // Test Initialize. ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); AppServiceMojomImpl impl(temp_dir_.GetPath()); - impl.GetPreferredAppsForTesting().Init(); + impl.GetPreferredAppsListForTesting().Init(); const char kAppId1[] = "abcdefg"; const char kAppId2[] = "hijklmn"; @@ -640,7 +642,7 @@ // Test Initialize. ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); AppServiceMojomImpl impl(temp_dir_.GetPath()); - impl.GetPreferredAppsForTesting().Init(); + impl.GetPreferredAppsListForTesting().Init(); const char kAppId1[] = "abcdefg"; const char kAppId2[] = "hijklmn"; @@ -676,7 +678,7 @@ sub0.PreferredApps().FindPreferredAppForUrl(filter_url_2)); EXPECT_EQ(absl::nullopt, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); - EXPECT_EQ(0U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(0U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(0U, sub0.PreferredApps().GetEntrySize()); impl.AddPreferredApp( @@ -687,7 +689,7 @@ EXPECT_EQ(kAppId1, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_2)); EXPECT_EQ(absl::nullopt, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); - EXPECT_EQ(1U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(1U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(1U, sub0.PreferredApps().GetEntrySize()); // Add preferred app with intent filter overlap with existing entry for @@ -700,7 +702,7 @@ sub0.PreferredApps().FindPreferredAppForUrl(filter_url_1)); EXPECT_EQ(kAppId2, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_2)); EXPECT_EQ(kAppId2, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); - EXPECT_EQ(1U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(1U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(1U, sub0.PreferredApps().GetEntrySize()); // Test that can remove entry with overlapped filter. @@ -713,7 +715,7 @@ sub0.PreferredApps().FindPreferredAppForUrl(filter_url_2)); EXPECT_EQ(absl::nullopt, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); - EXPECT_EQ(0U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(0U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(0U, sub0.PreferredApps().GetEntrySize()); } @@ -722,7 +724,7 @@ // Test Initialize. ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); AppServiceMojomImpl impl(temp_dir_.GetPath()); - impl.GetPreferredAppsForTesting().Init(); + impl.GetPreferredAppsListForTesting().Init(); const char kAppId1[] = "abcdefg"; const char kAppId2[] = "hijklmn"; @@ -768,7 +770,7 @@ sub0.PreferredApps().FindPreferredAppForUrl(filter_url_2)); EXPECT_EQ(absl::nullopt, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); - EXPECT_EQ(0U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(0U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(0U, sub0.PreferredApps().GetEntrySize()); // Test that add preferred app with overlapped filters for same app will @@ -781,7 +783,7 @@ EXPECT_EQ(kAppId1, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); EXPECT_TRUE(pub0.AppHasSupportedLinksPreference(kAppId1)); EXPECT_FALSE(pub0.AppHasSupportedLinksPreference(kAppId2)); - EXPECT_EQ(2U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(2U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(2U, sub0.PreferredApps().GetEntrySize()); // Test that add preferred app with another app that has overlapped filter @@ -796,7 +798,7 @@ sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); EXPECT_FALSE(pub0.AppHasSupportedLinksPreference(kAppId1)); EXPECT_TRUE(pub0.AppHasSupportedLinksPreference(kAppId2)); - EXPECT_EQ(1U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(1U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(1U, sub0.PreferredApps().GetEntrySize()); // Test that setting back to app 1 works. @@ -808,7 +810,7 @@ EXPECT_EQ(kAppId1, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); EXPECT_TRUE(pub0.AppHasSupportedLinksPreference(kAppId1)); EXPECT_FALSE(pub0.AppHasSupportedLinksPreference(kAppId2)); - EXPECT_EQ(2U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(2U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(2U, sub0.PreferredApps().GetEntrySize()); } @@ -817,7 +819,7 @@ // Test Initialize. ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); AppServiceMojomImpl impl(temp_dir_.GetPath()); - impl.GetPreferredAppsForTesting().Init(); + impl.GetPreferredAppsListForTesting().Init(); const char kAppId1[] = "abcdefg"; @@ -830,7 +832,7 @@ EXPECT_EQ(absl::nullopt, sub0.PreferredApps().FindPreferredAppForUrl(filter_url)); - EXPECT_EQ(0U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(0U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(0U, sub0.PreferredApps().GetEntrySize()); impl.AddPreferredApp( @@ -838,7 +840,7 @@ apps_util::CreateIntentFromUrl(filter_url), /*from_publisher=*/true); task_environment_.RunUntilIdle(); EXPECT_EQ(kAppId1, sub0.PreferredApps().FindPreferredAppForUrl(filter_url)); - EXPECT_EQ(1U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(1U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(1U, sub0.PreferredApps().GetEntrySize()); impl.AddPreferredApp( @@ -846,7 +848,7 @@ apps_util::CreateIntentFromUrl(filter_url), /*from_publisher=*/true); task_environment_.RunUntilIdle(); EXPECT_EQ(kAppId1, sub0.PreferredApps().FindPreferredAppForUrl(filter_url)); - EXPECT_EQ(1U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(1U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(1U, sub0.PreferredApps().GetEntrySize()); } @@ -855,7 +857,7 @@ // Test Initialize. ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); AppServiceMojomImpl impl(temp_dir_.GetPath()); - impl.GetPreferredAppsForTesting().Init(); + impl.GetPreferredAppsListForTesting().Init(); const char kAppId1[] = "abcdefg"; @@ -887,7 +889,7 @@ sub0.PreferredApps().FindPreferredAppForUrl(filter_url_2)); EXPECT_EQ(absl::nullopt, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); - EXPECT_EQ(0U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(0U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(0U, sub0.PreferredApps().GetEntrySize()); impl.SetSupportedLinksPreference(apps::mojom::AppType::kArc, kAppId1, @@ -898,7 +900,7 @@ EXPECT_EQ(kAppId1, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); EXPECT_TRUE(pub0.AppHasSupportedLinksPreference(kAppId1)); - EXPECT_EQ(3U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(3U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(3U, sub0.PreferredApps().GetEntrySize()); impl.SetSupportedLinksPreference(apps::mojom::AppType::kArc, kAppId1, @@ -909,7 +911,7 @@ EXPECT_EQ(kAppId1, sub0.PreferredApps().FindPreferredAppForUrl(filter_url_3)); EXPECT_TRUE(pub0.AppHasSupportedLinksPreference(kAppId1)); - EXPECT_EQ(3U, impl.GetPreferredAppsForTesting().GetEntrySize()); + EXPECT_EQ(3U, impl.GetPreferredAppsListForTesting().GetEntrySize()); EXPECT_EQ(3U, sub0.PreferredApps().GetEntrySize()); }
diff --git a/components/services/app_service/public/cpp/BUILD.gn b/components/services/app_service/public/cpp/BUILD.gn index d22092e..0d662f0 100644 --- a/components/services/app_service/public/cpp/BUILD.gn +++ b/components/services/app_service/public/cpp/BUILD.gn
@@ -230,6 +230,8 @@ source_set("preferred_apps") { sources = [ + "preferred_apps.cc", + "preferred_apps.h", "preferred_apps_converter.cc", "preferred_apps_converter.h", "preferred_apps_list.cc", @@ -243,6 +245,7 @@ ":intents", "//base", "//components/services/app_service/public/mojom", + "//content/public/browser", "//url", ] }
diff --git a/components/services/app_service/public/cpp/preferred_apps.cc b/components/services/app_service/public/cpp/preferred_apps.cc new file mode 100644 index 0000000..0ba48bc1 --- /dev/null +++ b/components/services/app_service/public/cpp/preferred_apps.cc
@@ -0,0 +1,407 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/services/app_service/public/cpp/preferred_apps.h" + +#include <iterator> +#include <utility> + +#include "base/bind.h" +#include "base/containers/contains.h" +#include "base/debug/dump_without_crashing.h" +#include "base/files/file_util.h" +#include "base/json/json_string_value_serializer.h" +#include "base/metrics/histogram_functions.h" +#include "base/metrics/histogram_macros.h" +#include "base/ranges/algorithm.h" +#include "base/task/task_traits.h" +#include "base/task/thread_pool.h" +#include "base/threading/scoped_blocking_call.h" +#include "components/services/app_service/public/cpp/intent_filter_util.h" +#include "components/services/app_service/public/cpp/preferred_apps_converter.h" +#include "content/public/browser/browser_thread.h" + +namespace { + +const base::FilePath::CharType kPreferredAppsDirname[] = + FILE_PATH_LITERAL("PreferredApps"); + +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +enum class PreferredAppsFileIOAction { + kWriteSuccess = 0, + kWriteFailed = 1, + kReadSuccess = 2, + kReadFailed = 3, + kMaxValue = kReadFailed, +}; + +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +enum class PreferredAppsUpdateAction { + kAdd = 0, + kDeleteForFilter = 1, + kDeleteForAppId = 2, + kUpgraded = 3, + kMaxValue = kUpgraded, +}; + +void LogPreferredAppEntryCount(int entry_count) { + base::UmaHistogramCounts10000("Apps.PreferredApps.EntryCount", entry_count); +} + +// Performs blocking I/O. Called on another thread. +void WriteDataBlocking(const base::FilePath& preferred_apps_file, + const std::string& preferred_apps) { + base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, + base::BlockingType::MAY_BLOCK); + bool write_success = + base::WriteFile(preferred_apps_file, preferred_apps.c_str(), + preferred_apps.size()) != -1; + if (!write_success) { + DVLOG(0) << "Fail to write preferred apps to " << preferred_apps_file; + } +} + +// Performs blocking I/O. Called on another thread. +std::string ReadDataBlocking(const base::FilePath& preferred_apps_file) { + base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, + base::BlockingType::MAY_BLOCK); + std::string preferred_apps_string; + base::ReadFileToString(preferred_apps_file, &preferred_apps_string); + return preferred_apps_string; +} + +} // namespace + +namespace apps { + +PreferredApps::PreferredApps(Host* host, + const base::FilePath& profile_dir, + base::OnceClosure read_completed_for_testing, + base::OnceClosure write_completed_for_testing) + : host_(host), + profile_dir_(profile_dir), + task_runner_(base::ThreadPool::CreateSequencedTaskRunner( + {base::MayBlock(), base::TaskPriority::BEST_EFFORT, + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})), + read_completed_for_testing_(std::move(read_completed_for_testing)), + write_completed_for_testing_(std::move(write_completed_for_testing)) { + DCHECK(host_); + InitializePreferredApps(); +} + +PreferredApps::~PreferredApps() = default; + +void PreferredApps::AddPreferredApp(apps::mojom::AppType app_type, + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter, + apps::mojom::IntentPtr intent, + bool from_publisher) { + RunAfterPreferredAppsReady(base::BindOnce( + &PreferredApps::AddPreferredAppImpl, weak_ptr_factory_.GetWeakPtr(), + app_type, app_id, std::move(intent_filter), std::move(intent), + from_publisher)); +} + +void PreferredApps::RemovePreferredApp(apps::mojom::AppType app_type, + const std::string& app_id) { + RunAfterPreferredAppsReady( + base::BindOnce(&PreferredApps::RemovePreferredAppImpl, + weak_ptr_factory_.GetWeakPtr(), app_type, app_id)); +} + +void PreferredApps::RemovePreferredAppForFilter( + apps::mojom::AppType app_type, + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter) { + RunAfterPreferredAppsReady( + base::BindOnce(&PreferredApps::RemovePreferredAppForFilterImpl, + weak_ptr_factory_.GetWeakPtr(), app_type, app_id, + std::move(intent_filter))); +} + +void PreferredApps::SetSupportedLinksPreference( + apps::mojom::AppType app_type, + const std::string& app_id, + std::vector<apps::mojom::IntentFilterPtr> all_link_filters) { + RunAfterPreferredAppsReady( + base::BindOnce(&PreferredApps::SetSupportedLinksPreferenceImpl, + weak_ptr_factory_.GetWeakPtr(), app_type, app_id, + std::move(all_link_filters))); +} + +void PreferredApps::RemoveSupportedLinksPreference( + apps::mojom::AppType app_type, + const std::string& app_id) { + RunAfterPreferredAppsReady( + base::BindOnce(&PreferredApps::RemoveSupportedLinksPreferenceImpl, + weak_ptr_factory_.GetWeakPtr(), app_type, app_id)); +} + +void PreferredApps::InitializePreferredApps() { + ReadFromJSON(profile_dir_); +} + +void PreferredApps::WriteToJSON(const base::FilePath& profile_dir, + const apps::PreferredAppsList& preferred_apps) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + // If currently is writing preferred apps to file, set a flag to write after + // the current write completed. + if (writing_preferred_apps_) { + should_write_preferred_apps_to_file_ = true; + return; + } + + writing_preferred_apps_ = true; + + auto preferred_apps_value = + apps::ConvertPreferredAppsToValue(preferred_apps.GetReference()); + + std::string json_string; + JSONStringValueSerializer serializer(&json_string); + serializer.Serialize(preferred_apps_value); + + task_runner_->PostTaskAndReply( + FROM_HERE, + base::BindOnce(&WriteDataBlocking, + profile_dir.Append(kPreferredAppsDirname), json_string), + base::BindOnce(&PreferredApps::WriteCompleted, + weak_ptr_factory_.GetWeakPtr())); +} + +void PreferredApps::WriteCompleted() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + writing_preferred_apps_ = false; + if (!should_write_preferred_apps_to_file_) { + // Call the testing callback if it is set. + if (write_completed_for_testing_) { + std::move(write_completed_for_testing_).Run(); + } + return; + } + // If need to perform another write, write the most up to date preferred apps + // from memory to file. + should_write_preferred_apps_to_file_ = false; + WriteToJSON(profile_dir_, preferred_apps_list_); +} + +void PreferredApps::ReadFromJSON(const base::FilePath& profile_dir) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + task_runner_->PostTaskAndReplyWithResult( + FROM_HERE, + base::BindOnce(&ReadDataBlocking, + profile_dir.Append(kPreferredAppsDirname)), + base::BindOnce(&PreferredApps::ReadCompleted, + weak_ptr_factory_.GetWeakPtr())); +} + +void PreferredApps::ReadCompleted(std::string preferred_apps_string) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + bool preferred_apps_upgraded = false; + if (preferred_apps_string.empty()) { + preferred_apps_list_.Init(); + } else { + std::string json_string; + JSONStringValueDeserializer deserializer(preferred_apps_string); + int error_code; + std::string error_message; + auto preferred_apps_value = + deserializer.Deserialize(&error_code, &error_message); + + if (!preferred_apps_value) { + DVLOG(0) << "Fail to deserialize json value from string with error code: " + << error_code << " and error message: " << error_message; + preferred_apps_list_.Init(); + } else { + preferred_apps_upgraded = IsUpgradedForSharing(*preferred_apps_value); + auto preferred_apps = + apps::ParseValueToPreferredApps(*preferred_apps_value); + if (!preferred_apps_upgraded) { + UpgradePreferredApps(preferred_apps); + } + preferred_apps_list_.Init(preferred_apps); + } + } + if (!preferred_apps_upgraded) { + WriteToJSON(profile_dir_, preferred_apps_list_); + } + + host_->InitializePreferredAppsForAllSubscribers(); + + LogPreferredAppEntryCount(preferred_apps_list_.GetEntrySize()); + + while (!pending_preferred_apps_tasks_.empty()) { + std::move(pending_preferred_apps_tasks_.front()).Run(); + pending_preferred_apps_tasks_.pop(); + } + + if (read_completed_for_testing_) { + std::move(read_completed_for_testing_).Run(); + } +} + +void PreferredApps::RunAfterPreferredAppsReady(base::OnceClosure task) { + if (preferred_apps_list_.IsInitialized()) { + std::move(task).Run(); + } else { + pending_preferred_apps_tasks_.push(std::move(task)); + } +} + +void PreferredApps::AddPreferredAppImpl( + apps::mojom::AppType app_type, + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter, + apps::mojom::IntentPtr intent, + bool from_publisher) { + // TODO(https://crbug.com/853604): Remove this and convert to a DCHECK + // after finding out the root cause. + if (app_id.empty()) { + base::debug::DumpWithoutCrashing(); + return; + } + + apps::mojom::ReplacedAppPreferencesPtr replaced_apps = + preferred_apps_list_.AddPreferredApp(app_id, intent_filter); + + WriteToJSON(profile_dir_, preferred_apps_list_); + + auto changes = apps::mojom::PreferredAppChanges::New(); + + changes->added_filters[app_id].push_back(intent_filter->Clone()); + changes->removed_filters = Clone(replaced_apps->replaced_preference); + host_->OnPreferredAppsChanged(std::move(changes)); + + if (from_publisher || !intent) { + return; + } + + // Sync the change to publishers. Because |replaced_app_preference| can + // be any app type, we should run this for all publishers. Currently + // only implemented in ARC publisher. + // TODO(crbug.com/853604): The |replaced_app_preference| can be really big, + // update this logic to only call the relevant publisher for each app after + // updating the storage structure. + host_->OnPreferredAppSet(app_id, std::move(intent_filter), std::move(intent), + std::move(replaced_apps)); +} + +void PreferredApps::RemovePreferredAppImpl(apps::mojom::AppType app_type, + const std::string& app_id) { + std::vector<apps::mojom::IntentFilterPtr> removed_filters = + preferred_apps_list_.DeleteAppId(app_id); + if (!removed_filters.empty()) { + WriteToJSON(profile_dir_, preferred_apps_list_); + + auto changes = apps::mojom::PreferredAppChanges::New(); + changes->removed_filters.emplace(app_id, std::move(removed_filters)); + host_->OnPreferredAppsChanged(std::move(changes)); + } +} + +void PreferredApps::RemovePreferredAppForFilterImpl( + apps::mojom::AppType app_type, + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter) { + std::vector<apps::mojom::IntentFilterPtr> removed_filters = + preferred_apps_list_.DeletePreferredApp(app_id, intent_filter); + + if (!removed_filters.empty()) { + WriteToJSON(profile_dir_, preferred_apps_list_); + + auto changes = apps::mojom::PreferredAppChanges::New(); + changes->removed_filters.emplace(app_id, std::move(removed_filters)); + host_->OnPreferredAppsChanged(std::move(changes)); + } +} + +void PreferredApps::SetSupportedLinksPreferenceImpl( + apps::mojom::AppType app_type, + const std::string& app_id, + std::vector<apps::mojom::IntentFilterPtr> all_link_filters) { + auto changes = apps::mojom::PreferredAppChanges::New(); + auto& added = changes->added_filters; + auto& removed = changes->removed_filters; + + for (auto& filter : all_link_filters) { + apps::mojom::ReplacedAppPreferencesPtr replaced_apps = + preferred_apps_list_.AddPreferredApp(app_id, filter); + added[app_id].push_back(std::move(filter)); + + // If we removed overlapping supported links when adding the new app, those + // affected apps no longer handle all their Supported Links filters and so + // need to have all their other Supported Links filters removed. + // Additionally, track all removals in the |removed| map so that subscribers + // can be notified correctly. + for (auto& replaced_app_and_filters : replaced_apps->replaced_preference) { + const std::string& removed_app_id = replaced_app_and_filters.first; + bool first_removal_for_app = !base::Contains(removed, app_id); + bool did_replace_supported_link = base::ranges::any_of( + replaced_app_and_filters.second, + [&removed_app_id](const auto& filter) { + return apps_util::IsSupportedLinkForApp(removed_app_id, filter); + }); + + std::vector<apps::mojom::IntentFilterPtr>& removed_filters_for_app = + removed[removed_app_id]; + removed_filters_for_app.insert( + removed_filters_for_app.end(), + std::make_move_iterator(replaced_app_and_filters.second.begin()), + std::make_move_iterator(replaced_app_and_filters.second.end())); + + // We only need to remove other supported links once per app. + if (first_removal_for_app && did_replace_supported_link) { + std::vector<apps::mojom::IntentFilterPtr> removed_filters = + preferred_apps_list_.DeleteSupportedLinks(removed_app_id); + removed_filters_for_app.insert( + removed_filters_for_app.end(), + std::make_move_iterator(removed_filters.begin()), + std::make_move_iterator(removed_filters.end())); + } + } + } + + WriteToJSON(profile_dir_, preferred_apps_list_); + + host_->OnPreferredAppsChanged(changes->Clone()); + + // Notify publishers: The new app has been set to open links, and all removed + // apps no longer handle links. + auto* publisher = host_->GetPublisher(app_type); + if (publisher) { + publisher->OnSupportedLinksPreferenceChanged(app_id, + /*open_in_app=*/true); + } + for (const auto& removed_app_and_filters : removed) { + // We don't know what app type the app is, so we have to notify all + // publishers. + host_->OnSupportedLinksPreferenceChanged(removed_app_and_filters.first, + /*open_in_app=*/false); + } +} +void PreferredApps::RemoveSupportedLinksPreferenceImpl( + apps::mojom::AppType app_type, + const std::string& app_id) { + auto* publisher = host_->GetPublisher(app_type); + if (!publisher) { + return; + } + + std::vector<apps::mojom::IntentFilterPtr> removed_filters = + preferred_apps_list_.DeleteSupportedLinks(app_id); + + if (!removed_filters.empty()) { + WriteToJSON(profile_dir_, preferred_apps_list_); + + auto changes = apps::mojom::PreferredAppChanges::New(); + changes->removed_filters.emplace(app_id, std::move(removed_filters)); + host_->OnPreferredAppsChanged(std::move(changes)); + } + + publisher->OnSupportedLinksPreferenceChanged(app_id, + /*open_in_app=*/false); +} + +} // namespace apps
diff --git a/components/services/app_service/public/cpp/preferred_apps.h b/components/services/app_service/public/cpp/preferred_apps.h new file mode 100644 index 0000000..6b59de81 --- /dev/null +++ b/components/services/app_service/public/cpp/preferred_apps.h
@@ -0,0 +1,150 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_PREFERRED_APPS_H_ +#define COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_PREFERRED_APPS_H_ + +#include <map> + +#include "base/callback.h" +#include "base/containers/queue.h" +#include "base/files/file_path.h" +#include "base/memory/raw_ptr.h" +#include "base/memory/scoped_refptr.h" +#include "base/memory/weak_ptr.h" +#include "base/task/sequenced_task_runner.h" +#include "components/services/app_service/public/cpp/preferred_apps_list.h" +#include "components/services/app_service/public/mojom/app_service.mojom.h" +#include "components/services/app_service/public/mojom/types.mojom.h" + +namespace apps { + +class AppServiceMojomImpl; + +// The implementation of the preferred apps to manage the PreferredAppsList. +class PreferredApps { + public: + class Host { + public: + Host() = default; + Host(const Host&) = delete; + Host& operator=(const Host&) = delete; + ~Host() = default; + + virtual void InitializePreferredAppsForAllSubscribers() = 0; + + virtual void OnPreferredAppsChanged( + apps::mojom::PreferredAppChangesPtr changes) = 0; + + virtual void OnPreferredAppSet( + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter, + apps::mojom::IntentPtr intent, + apps::mojom::ReplacedAppPreferencesPtr replaced_app_preferences) = 0; + + virtual void OnSupportedLinksPreferenceChanged(const std::string& app_id, + bool open_in_app) = 0; + + // Returns publisher for `app_type`, or nullptr if there is no publisher for + // `app_type`. + virtual apps::mojom::Publisher* GetPublisher( + apps::mojom::AppType app_type) = 0; + }; + + PreferredApps( + Host* host, + const base::FilePath& profile_dir, + base::OnceClosure read_completed_for_testing = base::OnceClosure(), + base::OnceClosure write_completed_for_testing = base::OnceClosure()); + + PreferredApps(const PreferredApps&) = delete; + PreferredApps& operator=(const PreferredApps&) = delete; + + ~PreferredApps(); + + void AddPreferredApp(apps::mojom::AppType app_type, + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter, + apps::mojom::IntentPtr intent, + bool from_publisher); + void RemovePreferredApp(apps::mojom::AppType app_type, + const std::string& app_id); + void RemovePreferredAppForFilter(apps::mojom::AppType app_type, + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter); + void SetSupportedLinksPreference( + apps::mojom::AppType app_type, + const std::string& app_id, + std::vector<apps::mojom::IntentFilterPtr> all_link_filters); + void RemoveSupportedLinksPreference(apps::mojom::AppType app_type, + const std::string& app_id); + + private: + friend AppServiceMojomImpl; + + // Initialize the preferred apps from disk. + void InitializePreferredApps(); + + // Write the preferred apps to a json file. + void WriteToJSON(const base::FilePath& profile_dir, + const apps::PreferredAppsList& preferred_apps); + + void WriteCompleted(); + + void ReadFromJSON(const base::FilePath& profile_dir); + + void ReadCompleted(std::string preferred_apps_string); + + // Runs |task| after the PreferredAppsList is fully initialized. |task| will + // be run immediately if preferred apps are already initialized. + void RunAfterPreferredAppsReady(base::OnceClosure task); + + void AddPreferredAppImpl(apps::mojom::AppType app_type, + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter, + apps::mojom::IntentPtr intent, + bool from_publisher); + void RemovePreferredAppImpl(apps::mojom::AppType app_type, + const std::string& app_id); + void RemovePreferredAppForFilterImpl( + apps::mojom::AppType app_type, + const std::string& app_id, + apps::mojom::IntentFilterPtr intent_filter); + void SetSupportedLinksPreferenceImpl( + apps::mojom::AppType app_type, + const std::string& app_id, + std::vector<apps::mojom::IntentFilterPtr> all_link_filters); + void RemoveSupportedLinksPreferenceImpl(apps::mojom::AppType app_type, + const std::string& app_id); + + // `host_` owns `this`. + raw_ptr<Host> host_; + + PreferredAppsList preferred_apps_list_; + + base::FilePath profile_dir_; + + // True if need to write preferred apps to file after the current write is + // completed. + bool should_write_preferred_apps_to_file_ = false; + + // True if it is currently writing preferred apps to file. + bool writing_preferred_apps_ = false; + + // Task runner where the file operations takes place. This is to make sure the + // write operation will be operated in sequence. + scoped_refptr<base::SequencedTaskRunner> const task_runner_; + + base::OnceClosure read_completed_for_testing_; + + base::OnceClosure write_completed_for_testing_; + + base::queue<base::OnceClosure> pending_preferred_apps_tasks_; + + base::WeakPtrFactory<PreferredApps> weak_ptr_factory_{this}; +}; + +} // namespace apps + +#endif // COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_PREFERRED_APPS_H_
diff --git a/content/browser/renderer_host/mixed_content_navigation_throttle.cc b/content/browser/renderer_host/mixed_content_navigation_throttle.cc index c553863..b7c4fcfc 100644 --- a/content/browser/renderer_host/mixed_content_navigation_throttle.cc +++ b/content/browser/renderer_host/mixed_content_navigation_throttle.cc
@@ -142,12 +142,17 @@ // If we're in strict mode, we'll automagically fail everything, and // intentionally skip the client/embedder checks in order to prevent degrading // the site's security UI. + // TODO(crbug.com/1312424): Instead of checking node->IsInFencedFrameTree() + // set insecure_request_policy to block mixed content requests in a + // fenced frame tree and change InWhichFrameIsContentMixed to not cross + // the frame tree boundary. bool block_all_mixed_content = - (mixed_content_frame->frame_tree_node() - ->current_replication_state() - .insecure_request_policy & - blink::mojom::InsecureRequestPolicy::kBlockAllMixedContent) != - blink::mojom::InsecureRequestPolicy::kLeaveInsecureRequestsAlone; + ((mixed_content_frame->frame_tree_node() + ->current_replication_state() + .insecure_request_policy & + blink::mojom::InsecureRequestPolicy::kBlockAllMixedContent) != + blink::mojom::InsecureRequestPolicy::kLeaveInsecureRequestsAlone) || + node->IsInFencedFrameTree(); const auto& prefs = mixed_content_frame->GetOrCreateWebPreferences(); bool strict_mode = prefs.strict_mixed_content_checking || block_all_mixed_content;
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 index 0e72190..fadf66e 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -ee7531d93e37545b1f10feb50c6e6d4c6eb054e4 \ No newline at end of file +09ef611186118dcc05839ae8cea3171005e1adbc \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 index b720900..5654f11 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -633e97e64072327862372480632b699b981e515d \ No newline at end of file +b71644195d0c610382a0b772e0572ab00b083919 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 index a4f1243..bed42d47 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -e44f48a3e4c8e8bd6a5787ad72b07e483cb59a6c \ No newline at end of file +7f08685a8606893d8200ed37c0117394a683d9f4 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 index e8ce3fa1..1952c96e 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -e93e04a2198777fa55a0ff43293e65b1db59ea79 \ No newline at end of file +21d8aaa5967b8a4f2c631585279c9420985baac9 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 index 90337cd..b8c0e95 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -00aa3924a9ae521e775ef51b54dfb3059f60177e \ No newline at end of file +00b14326ff2e8aea01a7072a34648387a50ce57b \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 index 3de54387..5211db7 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -278b1db442ed04e67475e7548da69ce29d9ac43a \ No newline at end of file +7eb732be764d6e59e3cdac2239b3af419695a8a5 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 index 28357c4..14819f9 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -afb529137a2fed1d675d41c0a0688e2085f203fb \ No newline at end of file +3b600f9821e5f459f835f5662edadb1b80eb1250 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 index 5ed1716..3431dc9 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -5343565e406380c94f8775597115c43648625120 \ No newline at end of file +d4fba11b7163267002242b5e3799a945f0f6a6a6 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 index cca28d1..5218db3d 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -002e0a3d79fd318ef8a0614b9fc3432cc5e916a3 \ No newline at end of file +2752f0138e794abddb30192b3b910718afb4092d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 index e196109c..6d1daa2 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -d6342adfd231de0279eebe9ffa7d0f1f41a29253 \ No newline at end of file +c72f5e6137570787819676cfb2c365e396ad27d8 \ No newline at end of file
diff --git a/media/audio/audio_encoders_unittest.cc b/media/audio/audio_encoders_unittest.cc index 5fffe63..3d6101b 100644 --- a/media/audio/audio_encoders_unittest.cc +++ b/media/audio/audio_encoders_unittest.cc
@@ -27,15 +27,6 @@ #include "base/win/scoped_com_initializer.h" #include "base/win/windows_version.h" #include "media/gpu/windows/mf_audio_encoder.h" -#include "media/media_buildflags.h" - -#if BUILDFLAG(ENABLE_FFMPEG) -#include "media/base/audio_decoder.h" -#include "media/base/channel_layout.h" -#include "media/base/decoder_status.h" -#include "media/base/mock_media_log.h" -#include "media/filters/ffmpeg_audio_decoder.h" -#endif // BUILDFLAG(ENABLE_FFMPEG) #endif // BUILDFLAG(IS_WIN) namespace media { @@ -129,9 +120,6 @@ options_.codec = GetParam().codec; options_.sample_rate = GetParam().sample_rate; options_.channels = GetParam().channels; - expected_duration_helper_ = - std::make_unique<AudioTimestampHelper>(options_.sample_rate); - expected_duration_helper_->SetBaseTimestamp(base::Microseconds(0)); } AudioEncodersTest(const AudioEncodersTest&) = delete; AudioEncodersTest& operator=(const AudioEncodersTest&) = delete; @@ -237,8 +225,7 @@ encoder_->Encode(std::move(audio_bus), timestamp, std::move(done_cb)); expected_output_duration_ += - expected_duration_helper_->GetFrameDuration(num_frames); - expected_duration_helper_->AddFrames(num_frames); + AudioTimestampHelper::FramesToTime(num_frames, options_.sample_rate); } void FlushAndVerifyStatus( @@ -263,15 +250,9 @@ } void ValidateOutputDuration() { - int64_t amount_of_padding = - frames_per_buffer_ - - (expected_duration_helper_->frame_count() % frames_per_buffer_); - int64_t duration_of_padding_us = - (amount_of_padding * base::Time::kMicrosecondsPerSecond) / - options_.sample_rate; - int64_t acceptable_diff = duration_of_padding_us + 10; - EXPECT_NEAR(expected_output_duration_.InMicroseconds(), - observed_output_duration_.InMicroseconds(), acceptable_diff); + base::TimeDelta delta = + (expected_output_duration_ - observed_output_duration_).magnitude(); + EXPECT_LE(delta, base::Microseconds(10)); } void RunLoop() { run_loop_.RunUntilIdle(); } @@ -295,7 +276,6 @@ base::TimeDelta buffer_duration_; int frames_per_buffer_; - std::unique_ptr<AudioTimestampHelper> expected_duration_helper_; base::TimeDelta expected_output_duration_; base::TimeDelta observed_output_duration_; @@ -448,22 +428,6 @@ ValidateOutputDuration(); } -TEST_P(AudioEncodersTest, ManySmallInputs) { - if (EncoderHasDelay()) - return; - - InitializeEncoder(); - base::TimeTicks timestamp = base::TimeTicks::Now(); - int frame_count = frames_per_buffer_ / 10; - for (int i = 0; i < 100; i++) - ProduceAudioAndEncode(timestamp, frame_count); - - FlushAndVerifyStatus(); - - ValidateDoneCallbacksRun(); - ValidateOutputDuration(); -} - // Check that the encoder's timestamps don't drift from the expected timestamp // over multiple inputs. TEST_P(AudioEncodersTest, Timestamps) { @@ -739,51 +703,10 @@ #if BUILDFLAG(IS_WIN) class MFAudioEncoderTest : public AudioEncodersTest { public: - MFAudioEncoderTest() - : decoder_(base::SequencedTaskRunnerHandle::Get(), &media_log) {} - + MFAudioEncoderTest() = default; MFAudioEncoderTest(const MFAudioEncoderTest&) = delete; MFAudioEncoderTest& operator=(const MFAudioEncoderTest&) = delete; ~MFAudioEncoderTest() override = default; - -#if BUILDFLAG(ENABLE_FFMPEG) - void InitializeDecoder() { - ChannelLayout channel_layout = CHANNEL_LAYOUT_NONE; - switch (options_.channels) { - case 1: - channel_layout = CHANNEL_LAYOUT_MONO; - break; - case 2: - channel_layout = CHANNEL_LAYOUT_STEREO; - break; - case 6: - channel_layout = CHANNEL_LAYOUT_5_1_BACK; - break; - default: - NOTREACHED(); - } - AudioDecoderConfig config(AudioCodec::kAAC, SampleFormat::kSampleFormatS16, - channel_layout, options_.sample_rate, - /*extra_data=*/std::vector<uint8_t>(), - EncryptionScheme::kUnencrypted); - auto init_cb = [](DecoderStatus decoder_status) { - EXPECT_EQ(decoder_status, DecoderStatus::Codes::kOk); - }; - auto output_cb = [&](scoped_refptr<AudioBuffer> decoded_buffer) { - ++decoder_output_callback_count; - EXPECT_EQ(decoded_buffer->frame_count(), frames_per_buffer_); - }; - decoder_.Initialize(config, /*cdm_context=*/nullptr, - base::BindLambdaForTesting(init_cb), - base::BindLambdaForTesting(output_cb), - /*waiting_cb=*/base::DoNothing()); - } - - protected: - MockMediaLog media_log; - FFmpegAudioDecoder decoder_; - int decoder_output_callback_count = 0; -#endif // BUILDFLAG(ENABLE_FFMPEG) }; // `MFAudioEncoder` requires `kMinSamplesForOutput` before `Flush` can be called @@ -797,41 +720,6 @@ ValidateDoneCallbacksRun(); } -#if BUILDFLAG(ENABLE_FFMPEG) -TEST_P(MFAudioEncoderTest, FullCycleEncodeDecode) { - InitializeDecoder(); - - int encode_output_callback_count = 0; - int decode_status_callback_count = 0; - auto encode_output_cb = [&](EncodedAudioBuffer output, MaybeDesc) { - ++encode_output_callback_count; - - auto decode_cb = [&](DecoderStatus status) { - ++decode_status_callback_count; - EXPECT_EQ(status, DecoderStatus::Codes::kOk); - }; - scoped_refptr<DecoderBuffer> decoder_buffer = DecoderBuffer::FromArray( - std::move(output.encoded_data), output.encoded_data_size); - decoder_.Decode(decoder_buffer, base::BindLambdaForTesting(decode_cb)); - }; - - InitializeEncoder(base::BindLambdaForTesting(encode_output_cb)); - - ProduceAudioAndEncode(); - ProduceAudioAndEncode(); - ProduceAudioAndEncode(); - - FlushAndVerifyStatus(); - - // The encoder should produce three pieces of output. - EXPECT_EQ(3, encode_output_callback_count); - // We should get three status messages from the decoder. - EXPECT_EQ(3, decode_status_callback_count); - // The decoder should produce three pieces of output. - EXPECT_EQ(3, decoder_output_callback_count); -} -#endif // BUILDFLAG(ENABLE_FFMPEG) - INSTANTIATE_TEST_SUITE_P(AAC, MFAudioEncoderTest, testing::ValuesIn(kTestAudioParamsAAC));
diff --git a/media/base/audio_timestamp_helper.h b/media/base/audio_timestamp_helper.h index 116826d8..8ec5be7 100644 --- a/media/base/audio_timestamp_helper.h +++ b/media/base/audio_timestamp_helper.h
@@ -59,9 +59,10 @@ // and the number of sample frames that have been added so far. base::TimeDelta GetTimestamp() const; - // Gets the duration of |frame_count| frames by calculating the difference - // between the current timestamp and what the timestamp would be if - // |frame_count| frames were added. + // Gets the duration if |frame_count| frames were added to the current + // timestamp reported by GetTimestamp(). This method ensures that + // (GetTimestamp() + GetFrameDuration(n)) will equal the timestamp that + // GetTimestamp() will return if AddFrames(n) is called. base::TimeDelta GetFrameDuration(int frame_count) const; // Returns the number of frames needed to reach the target timestamp.
diff --git a/media/gpu/test/bitstream_helpers.cc b/media/gpu/test/bitstream_helpers.cc index 6ff2b7e..0417963 100644 --- a/media/gpu/test/bitstream_helpers.cc +++ b/media/gpu/test/bitstream_helpers.cc
@@ -13,8 +13,9 @@ scoped_refptr<DecoderBuffer> buffer, const BitstreamBufferMetadata& metadata, int32_t id, + base::TimeTicks source_timestamp, base::OnceClosure release_cb) { - return new BitstreamRef(std::move(buffer), metadata, id, + return new BitstreamRef(std::move(buffer), metadata, id, source_timestamp, std::move(release_cb)); } @@ -22,10 +23,12 @@ scoped_refptr<DecoderBuffer> buffer, const BitstreamBufferMetadata& metadata, int32_t id, + base::TimeTicks source_timestamp, base::OnceClosure release_cb) : buffer(std::move(buffer)), metadata(metadata), id(id), + source_timestamp(source_timestamp), release_cb(std::move(release_cb)) {} BitstreamProcessor::BitstreamRef::~BitstreamRef() {
diff --git a/media/gpu/test/bitstream_helpers.h b/media/gpu/test/bitstream_helpers.h index ef0903bf..96b3f8c 100644 --- a/media/gpu/test/bitstream_helpers.h +++ b/media/gpu/test/bitstream_helpers.h
@@ -7,6 +7,7 @@ #include "base/callback_forward.h" #include "base/memory/ref_counted.h" +#include "base/time/time.h" #include "media/video/video_encode_accelerator.h" namespace media { @@ -21,6 +22,7 @@ scoped_refptr<DecoderBuffer> buffer, const BitstreamBufferMetadata& metadata, int32_t id, + base::TimeTicks source_timestamp, base::OnceClosure release_cb); BitstreamRef() = delete; BitstreamRef(const BitstreamRef&) = delete; @@ -29,12 +31,16 @@ const scoped_refptr<DecoderBuffer> buffer; const BitstreamBufferMetadata metadata; const int32_t id; + // |source_timestamp| is the timestamp when the VideoFrame for this + // bitstream is received to an encoder. + const base::TimeTicks source_timestamp; private: friend class base::RefCountedThreadSafe<BitstreamRef>; BitstreamRef(scoped_refptr<DecoderBuffer> buffer, const BitstreamBufferMetadata& metadata, int32_t id, + base::TimeTicks source_timestamp, base::OnceClosure release_cb); ~BitstreamRef();
diff --git a/media/gpu/test/video_encoder/video_encoder.h b/media/gpu/test/video_encoder/video_encoder.h index 3fb0c50..8b85d48 100644 --- a/media/gpu/test/video_encoder/video_encoder.h +++ b/media/gpu/test/video_encoder/video_encoder.h
@@ -31,7 +31,7 @@ class Video; class VideoEncoderClient; struct VideoEncoderClientConfig; -struct VideoEncoderStats; +class VideoEncoderStats; // This class provides a framework to build video encode accelerator tests upon. // It provides methods to control video encoding, and wait for specific events
diff --git a/media/gpu/test/video_encoder/video_encoder_client.cc b/media/gpu/test/video_encoder/video_encoder_client.cc index 74badcea..40e74083 100644 --- a/media/gpu/test/video_encoder/video_encoder_client.cc +++ b/media/gpu/test/video_encoder/video_encoder_client.cc
@@ -89,55 +89,59 @@ num_temporal_layers(num_temporal_layers) {} uint32_t VideoEncoderStats::Bitrate() const { - auto compute_bitrate = [](double framerate_dbl, size_t num_frames, - size_t total_size, - absl::optional<size_t> temporal_index, - absl::optional<size_t> spatial_index) { - const size_t average_frame_size_in_bits = total_size * 8 / num_frames; - const uint32_t average_bitrate = average_frame_size_in_bits * framerate_dbl; - std::string prefix = "[Total] "; - if (spatial_index) { - prefix = "[SL#" + base::NumberToString(*spatial_index) + " TL#" + - base::NumberToString(*temporal_index) + "] "; - } else if (temporal_index) { - prefix = "[TL#" + base::NumberToString(*temporal_index) + "] "; - } - VLOGF(2) << prefix << "encoded_frames=" << num_frames - << ", framerate=" << framerate_dbl - << ", total_encoded_frames_size=" << total_size - << ", average_frame_size_in_bits=" << average_frame_size_in_bits - << ", average bitrate=" << average_bitrate; - return average_bitrate; + const size_t average_frame_size_in_bits = + total_encoded_frames_size * 8 / total_num_encoded_frames; + const uint32_t average_bitrate = base::checked_cast<uint32_t>( + average_frame_size_in_bits * framerate * num_spatial_layers); + VLOGF(2) << " [Total] encoded_frames=" << total_num_encoded_frames + << ", framerate=" << framerate + << ", num_spatial_layers=" << num_spatial_layers + << ", total_encoded_frames_size=" << total_encoded_frames_size + << ", average_frame_size_in_bits=" << average_frame_size_in_bits + << ", average bitrate=" << average_bitrate; + + return average_bitrate; +} + +uint32_t VideoEncoderStats::LayerBitrate(size_t spatial_idx, + size_t temporal_idx) const { + const size_t num_frames = + num_encoded_frames_per_layer[spatial_idx][temporal_idx]; + const size_t frames_size = + encoded_frames_size_per_layer[spatial_idx][temporal_idx]; + // Used to compute the ratio of the framerate on each layer. For example, + // when the number of temporal layers is three, the ratio of framerate of + // layers are 1/4, 1/4 and 1/2 for the first, second and third layer, + // respectively. + constexpr size_t kFramerateDenom[][3] = { + {1, 0, 0}, + {2, 2, 0}, + {4, 4, 2}, }; - if (num_spatial_layers == 1 && num_temporal_layers == 1) { - return compute_bitrate(framerate, total_num_encoded_frames, - total_encoded_frames_size, absl::nullopt, - absl::nullopt); + const double layer_framerate = + static_cast<double>(framerate) / + kFramerateDenom[num_temporal_layers - 1][temporal_idx]; + const double average_frame_size_in_bits = frames_size * 8 / num_frames; + const uint32_t average_bitrate = base::checked_cast<uint32_t>( + average_frame_size_in_bits * layer_framerate); + + std::string prefix; + if (num_spatial_layers > 1) { + prefix = "[SL#" + base::NumberToString(spatial_idx) + " TL#" + + base::NumberToString(temporal_idx) + "] "; + } else { + DCHECK_NE(num_temporal_layers, 1u); + prefix = "[TL#" + base::NumberToString(temporal_idx) + "] "; } - for (size_t sid = 0; sid < num_spatial_layers; ++sid) { - for (size_t tid = 0; tid < num_temporal_layers; ++tid) { - // Used to compute the ratio of the framerate on each layer. For example, - // when the number of temporal layers is three, the ratio of framerate of - // layers are 1/4, 1/4 and 1/2 for the first, second and third layer, - // respectively. - constexpr size_t kFramerateDenom[][3] = { - {1, 0, 0}, - {2, 2, 0}, - {4, 4, 2}, - }; - const size_t num_frames = num_encoded_frames_per_layer[sid][tid]; - const size_t frames_size = encoded_frames_size_per_layer[sid][tid]; - const uint32_t layer_framerate = - static_cast<double>(framerate) / - kFramerateDenom[num_temporal_layers - 1][tid]; - compute_bitrate(layer_framerate, num_frames, frames_size, tid, sid); - } - } - return compute_bitrate(framerate * num_spatial_layers, - total_num_encoded_frames, total_encoded_frames_size, - absl::nullopt, absl::nullopt); + VLOGF(2) << prefix << "encoded_frames=" << num_frames + << ", framerate=" << layer_framerate + << ", total_encoded_frames_size=" << frames_size + << ", average_frame_size_in_bits=" << average_frame_size_in_bits + << ", average bitrate=" << average_bitrate; + + return average_bitrate; } void VideoEncoderStats::Reset() { @@ -354,9 +358,12 @@ if (!decoder_buffer) return nullptr; decoder_buffer->set_timestamp(base::Microseconds(frame_index_)); + auto source_timestamp_it = source_timestamps_.find(metadata.timestamp); + LOG_ASSERT(source_timestamp_it != source_timestamps_.end()); return BitstreamProcessor::BitstreamRef::Create( std::move(decoder_buffer), metadata, bitstream_buffer_id, + source_timestamp_it->second, BindToCurrentLoop( base::BindOnce(&VideoEncoderClient::BitstreamBufferProcessed, weak_this_, bitstream_buffer_id))); @@ -420,10 +427,13 @@ current_top_spatial_index_ = metadata.vp9->spatial_layer_resolutions.size() - 1; } - if (metadata.vp9->spatial_idx == current_top_spatial_index_) + if (metadata.vp9->spatial_idx == current_top_spatial_index_) { frame_index_++; + CHECK_EQ(source_timestamps_.erase(metadata.timestamp), 1u); + } } else { frame_index_++; + CHECK_EQ(source_timestamps_.erase(metadata.timestamp), 1u); } FlushDoneTaskIfNeeded(); } @@ -541,6 +551,7 @@ base::TimeDelta>, weak_this_, encoder_client_task_runner_, &VideoEncoderClient::EncodeDoneTask, video_frame->timestamp())); + source_timestamps_[video_frame->timestamp()] = base::TimeTicks::Now(); encoder_->Encode(video_frame, force_keyframe_);
diff --git a/media/gpu/test/video_encoder/video_encoder_client.h b/media/gpu/test/video_encoder/video_encoder_client.h index a2bacaec..51591b9 100644 --- a/media/gpu/test/video_encoder/video_encoder_client.h +++ b/media/gpu/test/video_encoder/video_encoder_client.h
@@ -78,7 +78,8 @@ const bool reverse = false; }; -struct VideoEncoderStats { +class VideoEncoderStats { + public: VideoEncoderStats(); VideoEncoderStats(const VideoEncoderStats&); ~VideoEncoderStats(); @@ -86,6 +87,7 @@ size_t num_temporal_layers, size_t num_spatial_layers); uint32_t Bitrate() const; + uint32_t LayerBitrate(size_t spatial_idx, size_t temporal_idx) const; void Reset(); uint32_t framerate = 0; @@ -267,6 +269,10 @@ // The current top spatial layer index. uint8_t current_top_spatial_index_ = 0; + // A map from an input VideoFrame timestamp to the time when it is enqueued + // into |encoder_|. + std::map<base::TimeDelta, base::TimeTicks> source_timestamps_; + // Force a key frame on next Encode(), only accessed on the // |encoder_client_thread_|. bool force_keyframe_ = false;
diff --git a/media/gpu/video_encode_accelerator_perf_tests.cc b/media/gpu/video_encode_accelerator_perf_tests.cc index fae0e6a..a315da47 100644 --- a/media/gpu/video_encode_accelerator_perf_tests.cc +++ b/media/gpu/video_encode_accelerator_perf_tests.cc
@@ -3,6 +3,8 @@ // found in the LICENSE file. #include <algorithm> +#include <iomanip> +#include <iostream> #include <map> #include <numeric> #include <vector> @@ -195,8 +197,11 @@ delivery_time.InMillisecondsF()); prev_bitstream_delivery_time_ = now; + // TODO(hiroh): |encode_time| on upper spatial layer in SVC encoding becomes + // larger because the bitstram is produced after lower spatial layers are + // produced. |encode_time| should be aggregated per spatial layer. base::TimeDelta encode_time = - now.since_origin() - bitstream->metadata.timestamp; + base::TimeTicks::Now() - bitstream->source_timestamp; perf_metrics_.bitstream_encode_times_.push_back( encode_time.InMillisecondsF()); } @@ -315,7 +320,11 @@ const SSIMVideoFrameValidator* const ssim_validator, const absl::optional<size_t>& spatial_idx, const absl::optional<size_t>& temporal_idx); - void Output(); + + void Output(uint32_t target_bitrate, uint32_t actual_bitrate); + + absl::optional<size_t> spatial_idx; + absl::optional<size_t> temporal_idx; private: struct QualityStats { @@ -333,15 +342,19 @@ static QualityStats ComputeQualityStats( const std::map<size_t, double>& values); - void WriteToConsole() const; - void WriteToFile() const; + void WriteToConsole(const std::string& svc_text, + const BitstreamQualityMetrics::QualityStats& psnr_stats, + const BitstreamQualityMetrics::QualityStats& ssim_stats, + uint32_t target_bitrate, + uint32_t actual_bitrate) const; + void WriteToFile(const std::string& svc_text, + const BitstreamQualityMetrics::QualityStats& psnr_stats, + const BitstreamQualityMetrics::QualityStats& ssim_stats, + uint32_t target_bitrate, + uint32_t actual_bitrate) const; - std::string svc_text; const PSNRVideoFrameValidator* const psnr_validator; const SSIMVideoFrameValidator* const ssim_validator; - - QualityStats psnr_stats; - QualityStats ssim_stats; }; BitstreamQualityMetrics::BitstreamQualityMetrics( @@ -349,12 +362,10 @@ const SSIMVideoFrameValidator* const ssim_validator, const absl::optional<size_t>& spatial_idx, const absl::optional<size_t>& temporal_idx) - : psnr_validator(psnr_validator), ssim_validator(ssim_validator) { - if (spatial_idx) - svc_text += "L" + base::NumberToString(*spatial_idx + 1); - if (temporal_idx) - svc_text += "T" + base::NumberToString(*temporal_idx + 1); -} + : spatial_idx(spatial_idx), + temporal_idx(temporal_idx), + psnr_validator(psnr_validator), + ssim_validator(ssim_validator) {} // static BitstreamQualityMetrics::QualityStats @@ -384,15 +395,36 @@ return stats; } -void BitstreamQualityMetrics::Output() { - psnr_stats = ComputeQualityStats(psnr_validator->GetPSNRValues()); - ssim_stats = ComputeQualityStats(ssim_validator->GetSSIMValues()); - WriteToConsole(); - WriteToFile(); +void BitstreamQualityMetrics::Output(uint32_t target_bitrate, + uint32_t actual_bitrate) { + std::string svc_text; + if (spatial_idx) + svc_text += "L" + base::NumberToString(*spatial_idx + 1); + if (temporal_idx) + svc_text += "T" + base::NumberToString(*temporal_idx + 1); + + auto psnr_stats = ComputeQualityStats(psnr_validator->GetPSNRValues()); + auto ssim_stats = ComputeQualityStats(ssim_validator->GetSSIMValues()); + + WriteToConsole(svc_text, psnr_stats, ssim_stats, target_bitrate, + actual_bitrate); + WriteToFile(svc_text, psnr_stats, ssim_stats, target_bitrate, actual_bitrate); } -void BitstreamQualityMetrics::WriteToConsole() const { +void BitstreamQualityMetrics::WriteToConsole( + const std::string& svc_text, + const BitstreamQualityMetrics::QualityStats& psnr_stats, + const BitstreamQualityMetrics::QualityStats& ssim_stats, + uint32_t target_bitrate, + uint32_t actual_bitrate) const { + const auto default_ssize = std::cout.precision(); std::cout << "[ Result " << svc_text << "]" << std::endl; + std::cout << "Bitrate: " << actual_bitrate << std::endl; + std::cout << "Bitrate deviation: " << std::fixed << std::setprecision(2) + << (actual_bitrate * 100.0 / target_bitrate) - 100.0 << " %" + << std::endl; + + std::cout << std::fixed << std::setprecision(4); std::cout << "SSIM - average: " << ssim_stats.avg << std::endl; std::cout << "SSIM - percentile 25: " << ssim_stats.percentile_25 << std::endl; @@ -407,9 +439,15 @@ << std::endl; std::cout << "PSNR - percentile 75: " << psnr_stats.percentile_75 << std::endl; + std::cout.precision(default_ssize); } -void BitstreamQualityMetrics::WriteToFile() const { +void BitstreamQualityMetrics::WriteToFile( + const std::string& svc_text, + const BitstreamQualityMetrics::QualityStats& psnr_stats, + const BitstreamQualityMetrics::QualityStats& ssim_stats, + uint32_t target_bitrate, + uint32_t actual_bitrate) const { base::FilePath output_folder_path = base::FilePath(g_env->OutputFolder()); if (!DirectoryExists(output_folder_path)) base::CreateDirectory(output_folder_path); @@ -418,14 +456,13 @@ base::Value metrics(base::Value::Type::DICTIONARY); if (!svc_text.empty()) metrics.SetKey("SVC", base::Value(svc_text)); + metrics.SetKey("Bitrate", + base::Value(base::checked_cast<int>(actual_bitrate))); + metrics.SetKey( + "Bitrate deviation", + base::Value((actual_bitrate * 100.0 / target_bitrate) - 100.0)); metrics.SetKey("SSIMAverage", base::Value(ssim_stats.avg)); - metrics.SetKey("SSIMPercentile25", base::Value(ssim_stats.percentile_25)); - metrics.SetKey("SSIMPercentile50", base::Value(ssim_stats.percentile_50)); - metrics.SetKey("SSIMPercentile75", base::Value(psnr_stats.percentile_75)); metrics.SetKey("PSNRAverage", base::Value(psnr_stats.avg)); - metrics.SetKey("PSNRPercentile25", base::Value(psnr_stats.percentile_25)); - metrics.SetKey("PSNRPercentile50", base::Value(psnr_stats.percentile_50)); - metrics.SetKey("PSNRPercentile75", base::Value(psnr_stats.percentile_75)); // Write ssim values bitstream delivery times to json. base::Value ssim_values(base::Value::Type::LIST); for (double value : ssim_stats.values_in_order) @@ -661,8 +698,24 @@ EXPECT_EQ(encoder->GetFrameReleasedCount(), kNumFramesToEncodeForPerformance); EXPECT_TRUE(encoder->WaitForBitstreamProcessors()); - for (auto& metrics : quality_metrics_) - metrics.Output(); + const VideoEncoderStats stats = encoder->GetStats(); + for (auto& metrics : quality_metrics_) { + absl::optional<size_t> spatial_idx = metrics.spatial_idx; + absl::optional<size_t> temporal_idx = metrics.temporal_idx; + uint32_t target_bitrate = 0; + uint32_t actual_bitrate = 0; + if (!spatial_idx && !temporal_idx) { + target_bitrate = g_env->Bitrate().GetSumBps(); + actual_bitrate = stats.Bitrate(); + } else { + CHECK(spatial_idx && temporal_idx); + target_bitrate = + g_env->Bitrate().GetBitrateBps(*spatial_idx, *temporal_idx); + actual_bitrate = stats.LayerBitrate(*spatial_idx, *temporal_idx); + } + + metrics.Output(target_bitrate, actual_bitrate); + } } // TODO(b/211783279) The |performance_evaluator_| only keeps track of the last
diff --git a/media/gpu/windows/mf_audio_encoder.cc b/media/gpu/windows/mf_audio_encoder.cc index 2fc1dba..4db8293 100644 --- a/media/gpu/windows/mf_audio_encoder.cc +++ b/media/gpu/windows/mf_audio_encoder.cc
@@ -64,11 +64,9 @@ // https://docs.microsoft.com/en-us/windows/win32/api/mftransform/nf-mftransform-imftransform-getstreamids#remarks constexpr DWORD kStreamId = 0; -// The encoder keeps two full frames of data buffered at all times, which means -// it must have three full frames of data buffered before it will produce an -// output frame. It only needs two frames to successfully flush. -constexpr int kMinSamplesForOutput = kSamplesPerFrame * 3; -constexpr int kMinSamplesForFlush = kSamplesPerFrame * 2; +// When not flushing, the encoder must have two full frames of data buffered +// before it will produce an output frame. +constexpr int kMinSamplesForOutput = kSamplesPerFrame * 2; constexpr const wchar_t kMfPlatDllName[] = L"mfplat.dll"; @@ -523,7 +521,7 @@ } if (state_ == EncoderState::kError || state_ == EncoderState::kFlushing || - state_ == EncoderState::kDraining || !can_flush_) { + state_ == EncoderState::kDraining || !can_produce_output_) { std::move(done_cb).Run(EncoderStatus::Codes::kEncoderFailedFlush); return; } @@ -531,8 +529,6 @@ DCHECK(state_ == EncoderState::kIdle || state_ == EncoderState::kProcessing) << "state_ == " << static_cast<int>(state_); - have_queued_input_task_ = false; - have_queued_output_task_ = false; state_ = EncoderState::kFlushing; TryProcessOutput(base::BindOnce(&MFAudioEncoder::OnFlushComplete, weak_ptr_factory_.GetWeakPtr(), @@ -601,14 +597,10 @@ input_queue_.emplace_back(std::move(input_sample), audio_bus->frames(), std::move(done_cb)); - if (state_ == EncoderState::kIdle) + if (state_ == EncoderState::kIdle) { + state_ = EncoderState::kProcessing; TryProcessInput(/*flush_cb=*/base::NullCallback()); -} - -void MFAudioEncoder::RunTryProcessInput(FlushCB flush_cb) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - have_queued_input_task_ = false; - TryProcessInput(std::move(flush_cb)); + } } void MFAudioEncoder::TryProcessInput(FlushCB flush_cb) { @@ -631,7 +623,7 @@ DCHECK(flush_cb); DCHECK(input_queue_.empty()); - if (samples_in_encoder_ <= 0) + if (samples_in_encoder_ == 0) std::move(flush_cb).Run(); else TryProcessOutput(std::move(flush_cb)); @@ -639,23 +631,17 @@ return; } - if (state_ == EncoderState::kIdle) - state_ = EncoderState::kProcessing; - DCHECK(state_ == EncoderState::kProcessing || state_ == EncoderState::kFlushing) << "state_ == " << static_cast<int>(state_); - bool not_accepting = false; HRESULT hr = S_OK; while (SUCCEEDED(hr) && !input_queue_.empty()) { InputData& input_data = input_queue_.front(); hr = mf_encoder_->ProcessInput(kStreamId, input_data.sample.Get(), /*flags=*/0); - if (hr == MF_E_NOTACCEPTING) { - not_accepting = true; + if (hr == MF_E_NOTACCEPTING) break; - } if (FAILED(hr)) { OnError(); return; @@ -669,13 +655,7 @@ if (samples_in_encoder_ >= kMinSamplesForOutput) can_produce_output_ = true; - if (samples_in_encoder_ >= kMinSamplesForFlush) - can_flush_ = true; - - // We must call `TryProcessOutput` if `not_accepting` is true in order for - // the `mf_encoder_` to move data from its input buffer to a staging buffer, - // which will allow us to provide more input. - if (not_accepting || can_produce_output_ || + if (samples_in_encoder_ >= kMinSamplesForOutput || state_ == EncoderState::kFlushing) { TryProcessOutput(std::move(flush_cb)); return; @@ -684,21 +664,18 @@ state_ = EncoderState::kIdle; } -void MFAudioEncoder::RunTryProcessOutput(FlushCB flush_cb) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - have_queued_output_task_ = false; - TryProcessOutput(std::move(flush_cb)); -} - void MFAudioEncoder::TryProcessOutput(FlushCB flush_cb) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(initialized_); - if (state_ == EncoderState::kError) + if (state_ == EncoderState::kError || !can_produce_output_) return; - if (state_ == EncoderState::kIdle) - state_ = EncoderState::kProcessing; + if (state_ == EncoderState::kIdle) { + DCHECK_LT(samples_in_encoder_, kMinSamplesForOutput); + DCHECK(input_queue_.empty()); + return; + } DCHECK(state_ == EncoderState::kProcessing || state_ == EncoderState::kFlushing || state_ == EncoderState::kDraining) @@ -732,20 +709,10 @@ } if (!input_queue_.empty()) { - // Setting our state to idle before posting tasks allows the next call to - // `EnqueueInput` to call `TryProcessInput`. This lets callers run this - // encoder synchronously. - if (state_ == EncoderState::kProcessing) - state_ = EncoderState::kIdle; - - if (!have_queued_input_task_ || flush_cb) { - have_queued_input_task_ = true; - task_runner_->PostTask( - FROM_HERE, - base::BindOnce(&MFAudioEncoder::RunTryProcessInput, - weak_ptr_factory_.GetWeakPtr(), std::move(flush_cb))); - } - + task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&MFAudioEncoder::TryProcessInput, + weak_ptr_factory_.GetWeakPtr(), std::move(flush_cb))); return; } @@ -769,32 +736,29 @@ } } - if (state_ == EncoderState::kDraining) { - // When draining, the encoder will produce output even if it has less than - // `kMinSamplesForOutput` buffered. It will 0 pad what data it has so that - // it can produce the final frame. - if (samples_in_encoder_ > 0) - TryProcessOutput(std::move(flush_cb)); - else - std::move(flush_cb).Run(); - - return; - } - // If `mf_encoder_` has enough samples buffered to produce another output // frame, we should continue to check for output. Since it is not ready to be // processed right now, we post a task to yield the thread to other work that // is ready. - if (samples_in_encoder_ >= kMinSamplesForOutput) { - if (state_ == EncoderState::kProcessing) - state_ = EncoderState::kIdle; + if (samples_in_encoder_ > kMinSamplesForOutput) { + task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&MFAudioEncoder::TryProcessOutput, + weak_ptr_factory_.GetWeakPtr(), std::move(flush_cb))); + return; + } - if (!have_queued_output_task_ || flush_cb) { - have_queued_output_task_ = true; + if (state_ == EncoderState::kDraining) { + // When draining the encoder, it will produce output even if it has less + // than `kMinSamplesForOutput` buffered. It will 0 pad what data it has so + // that it can produce the final frame. + if (samples_in_encoder_ > 0) { task_runner_->PostTask( FROM_HERE, - base::BindOnce(&MFAudioEncoder::RunTryProcessOutput, + base::BindOnce(&MFAudioEncoder::TryProcessOutput, weak_ptr_factory_.GetWeakPtr(), std::move(flush_cb))); + } else { + std::move(flush_cb).Run(); } return; @@ -826,13 +790,8 @@ // Retrieve the output. // https://docs.microsoft.com/en-us/windows/win32/medfound/basic-mft-processing-model#process-data DWORD status; - HRESULT hr = mf_encoder_->ProcessOutput(/*flags=*/0, /*buffer_count=*/1, - &output_data_container, &status); - // Avoid logging "need more input" as an error, since this is expected - // relatively frequently. - if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) - return hr; - RETURN_IF_FAILED(hr); + RETURN_IF_FAILED(mf_encoder_->ProcessOutput(/*flags=*/0, /*buffer_count=*/1, + &output_data_container, &status)); // `status` is only set if `ProcessOutput` returns // `MF_E_TRANSFORM_STREAM_CHANGE`. @@ -884,6 +843,9 @@ DCHECK_EQ(state_, EncoderState::kDraining); DCHECK(input_queue_.empty()); + + // Because the `mf_encoder_` pads its input to produce the final output frame + // when flushing, samples_in_encoder_ may be negative. DCHECK_LE(samples_in_encoder_, 0); // Tell the encoder that the drain is complete. Without this, it will not @@ -896,8 +858,6 @@ } samples_in_encoder_ = 0; - can_produce_output_ = false; - can_flush_ = false; input_timestamp_tracker_->SetBaseTimestamp(kNoTimestamp); output_timestamp_tracker_->SetBaseTimestamp(kNoTimestamp); state_ = EncoderState::kIdle;
diff --git a/media/gpu/windows/mf_audio_encoder.h b/media/gpu/windows/mf_audio_encoder.h index f7f3e9c1..45daf96 100644 --- a/media/gpu/windows/mf_audio_encoder.h +++ b/media/gpu/windows/mf_audio_encoder.h
@@ -145,11 +145,6 @@ // `flush_cb`. void TryProcessInput(FlushCB flush_cb = base::NullCallback()); - // Resets `have_queued_input_task_` and is only used when posting tasks. This - // helps us avoid posting duplicate tasks when the consumer of this class - // calls `Encode()` synchronously. - void RunTryProcessInput(FlushCB flush_cb = base::NullCallback()); - // Attempts to retrieve output data from `mf_encoder_`. It will process all // available output data, invoking `output_cb_` each time, until the encoder // reports `MF_E_TRANSFORM_NEED_MORE_INPUT`. If `input_queue_` is not empty, @@ -157,12 +152,6 @@ // flushing (no input or output remain), this will run `flush_cb` and return. // Otherwise, sets `state_` to `kIdle` while we wait for more input. void TryProcessOutput(FlushCB flush_cb = base::NullCallback()); - - // Resets `have_queued_output_task_` and is only used when posting tasks. This - // helps us avoid posting duplicate tasks when the consumer of this class - // calls `Encode()` synchronously. - void RunTryProcessOutput(FlushCB flush_cb = base::NullCallback()); - HRESULT ProcessOutput(EncodedAudioBuffer& encoded_audio); // Run when flushing is complete. This runs the original `done_cb` provided by @@ -188,18 +177,10 @@ bool initialized_ = false; // We can't produce output until at least `kMinSamplesForOutput` have been - // provided. Until then, `output_cb_` will not be run. + // provided. Until then, `output_cb_` will not be run and calls to `Flush()` + // will fail. bool can_produce_output_ = false; - // Calls to `Flush()` will fail until at least `kMinSamplesForFlush` have been - // provided. - bool can_flush_ = false; - - // Prevents us from queuing unnecessary input/output tasks, which can happen - // if the caller treats us as a synchronous encoder. - bool have_queued_input_task_ = false; - bool have_queued_output_task_ = false; - // This is a handle to the same sequence that callers invoke the public // functions of this class on. scoped_refptr<base::SequencedTaskRunner> task_runner_; @@ -215,9 +196,7 @@ std::unique_ptr<AudioTimestampHelper> output_timestamp_tracker_ GUARDED_BY_CONTEXT(sequence_checker_); - // The count of samples currently in the `mf_encoder_`. Because the - // `mf_encoder_` pads its input to produce the final output frame when - // flushing, samples_in_encoder_ may be negative. + // The count of samples currently in the `mf_encoder_`. int samples_in_encoder_ GUARDED_BY_CONTEXT(sequence_checker_) = 0; // A second queue for input received while we are flushing. The encoder will
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json index 55036f36..1e3e15e 100644 --- a/testing/buildbot/chrome.json +++ b/testing/buildbot/chrome.json
@@ -1789,7 +1789,7 @@ { "args": [], "cros_board": "atlas", - "cros_img": "atlas-release/R102-14654.0.0", + "cros_img": "atlas-release/R102-14658.0.0", "name": "lacros_all_tast_tests_ATLAS_RELEASE_LKGM", "resultdb": { "enable": true, @@ -1849,7 +1849,7 @@ { "args": [], "cros_board": "eve", - "cros_img": "eve-release/R102-14654.0.0", + "cros_img": "eve-release/R102-14658.0.0", "name": "lacros_all_tast_tests_EVE_RELEASE_LKGM", "resultdb": { "enable": true, @@ -1954,7 +1954,7 @@ { "args": [], "cros_board": "hana", - "cros_img": "hana-release/R102-14654.0.0", + "cros_img": "hana-release/R102-14658.0.0", "name": "lacros_all_tast_tests_HANA_RELEASE_LKGM", "resultdb": { "enable": true, @@ -2014,7 +2014,7 @@ { "args": [], "cros_board": "jacuzzi", - "cros_img": "jacuzzi-release/R102-14654.0.0", + "cros_img": "jacuzzi-release/R102-14658.0.0", "name": "lacros_all_tast_tests_JACUZZI_RELEASE_LKGM", "resultdb": { "enable": true, @@ -2076,7 +2076,7 @@ "--test-launcher-filter-file=../../testing/buildbot/filters/lacros-arm.ozone_unittests.filter" ], "cros_board": "hana", - "cros_img": "hana-release/R102-14654.0.0", + "cros_img": "hana-release/R102-14658.0.0", "name": "ozone_unittests_HANA_RELEASE_LKGM", "resultdb": { "enable": true, @@ -2140,7 +2140,7 @@ "--test-launcher-filter-file=../../testing/buildbot/filters/lacros-arm.ozone_unittests.filter" ], "cros_board": "jacuzzi", - "cros_img": "jacuzzi-release/R102-14654.0.0", + "cros_img": "jacuzzi-release/R102-14658.0.0", "name": "ozone_unittests_JACUZZI_RELEASE_LKGM", "resultdb": { "enable": true, @@ -2204,7 +2204,7 @@ "--test-launcher-filter-file=../../testing/buildbot/filters/lacros-arm.viz_unittests.filter" ], "cros_board": "hana", - "cros_img": "hana-release/R102-14654.0.0", + "cros_img": "hana-release/R102-14658.0.0", "name": "viz_unittests_HANA_RELEASE_LKGM", "resultdb": { "enable": true, @@ -2268,7 +2268,7 @@ "--test-launcher-filter-file=../../testing/buildbot/filters/lacros-arm.viz_unittests.filter" ], "cros_board": "jacuzzi", - "cros_img": "jacuzzi-release/R102-14654.0.0", + "cros_img": "jacuzzi-release/R102-14658.0.0", "name": "viz_unittests_JACUZZI_RELEASE_LKGM", "resultdb": { "enable": true,
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index 97c8236..c5874ad 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -8178,7 +8178,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.79" + "revision": "version:100.0.4896.81" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -8262,7 +8262,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.20" + "revision": "version:101.0.4951.22" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -8682,7 +8682,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.79" + "revision": "version:100.0.4896.81" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -8766,7 +8766,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.20" + "revision": "version:101.0.4951.22" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index 2f06a2dc..c5ee9ac 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -45929,7 +45929,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.79" + "revision": "version:100.0.4896.81" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -46013,7 +46013,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.20" + "revision": "version:101.0.4951.22" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -46433,7 +46433,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.79" + "revision": "version:100.0.4896.81" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -46517,7 +46517,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.20" + "revision": "version:101.0.4951.22" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -46941,7 +46941,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.79" + "revision": "version:100.0.4896.81" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -47025,7 +47025,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.20" + "revision": "version:101.0.4951.22" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -47445,7 +47445,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.79" + "revision": "version:100.0.4896.81" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -47529,7 +47529,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.20" + "revision": "version:101.0.4951.22" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -48020,7 +48020,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.79" + "revision": "version:100.0.4896.81" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -48104,7 +48104,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.20" + "revision": "version:101.0.4951.22" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -48524,7 +48524,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.79" + "revision": "version:100.0.4896.81" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -48608,7 +48608,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.20" + "revision": "version:101.0.4951.22" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -49099,7 +49099,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.79" + "revision": "version:100.0.4896.81" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -49183,7 +49183,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.20" + "revision": "version:101.0.4951.22" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -49603,7 +49603,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.79" + "revision": "version:100.0.4896.81" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -49687,7 +49687,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.20" + "revision": "version:101.0.4951.22" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index 3611869f..318a1fa 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -5765,6 +5765,36 @@ }, { "args": [ + "--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome", + "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" + ], + "isolate_profile_data": true, + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "lacros_chrome_browsertests_Lacros version skew testing ash 100.0.4896.64", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", + "location": "lacros_version_skew_tests_v100.0.4896.64", + "revision": "version:100.0.4896.64" + } + ], + "dimension_sets": [ + { + "os": "Ubuntu-18.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "lacros_chrome_browsertests", + "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/" + }, + { + "args": [ "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.13/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], @@ -5795,7 +5825,7 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "isolate_profile_data": true, @@ -5803,14 +5833,14 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_Lacros version skew testing ash 102.0.4980.0", + "name": "lacros_chrome_browsertests_Lacros version skew testing ash 102.0.4981.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v102.0.4980.0", - "revision": "version:102.0.4980.0" + "location": "lacros_version_skew_tests_v102.0.4981.0", + "revision": "version:102.0.4981.0" } ], "dimension_sets": [ @@ -5855,36 +5885,6 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome", - "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" - ], - "isolate_profile_data": true, - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "lacros_chrome_browsertests_Lacros version skew testing ash 99.0.4844.86", - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v99.0.4844.86", - "revision": "version:99.0.4844.86" - } - ], - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "lacros_chrome_browsertests", - "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/" - }, - { - "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.filter" ], "isolate_profile_data": true, @@ -5907,6 +5907,36 @@ }, { "args": [ + "--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome", + "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" + ], + "isolate_profile_data": true, + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 100.0.4896.64", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", + "location": "lacros_version_skew_tests_v100.0.4896.64", + "revision": "version:100.0.4896.64" + } + ], + "dimension_sets": [ + { + "os": "Ubuntu-18.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "lacros_chrome_browsertests_run_in_series", + "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" + }, + { + "args": [ "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.13/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], @@ -5937,7 +5967,7 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "isolate_profile_data": true, @@ -5945,14 +5975,14 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 102.0.4980.0", + "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 102.0.4981.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v102.0.4980.0", - "revision": "version:102.0.4980.0" + "location": "lacros_version_skew_tests_v102.0.4981.0", + "revision": "version:102.0.4981.0" } ], "dimension_sets": [ @@ -5996,36 +6026,6 @@ "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" }, { - "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome", - "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" - ], - "isolate_profile_data": true, - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 99.0.4844.86", - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v99.0.4844.86", - "revision": "version:99.0.4844.86" - } - ], - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "lacros_chrome_browsertests_run_in_series", - "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" - }, - { "isolate_profile_data": true, "merge": { "args": [],
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index fb30fc6..b513681e 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -86090,6 +86090,31 @@ }, { "args": [ + "--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome", + "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" + ], + "isolate_profile_data": true, + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "lacros_chrome_browsertests_Lacros version skew testing ash 100.0.4896.64", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", + "location": "lacros_version_skew_tests_v100.0.4896.64", + "revision": "version:100.0.4896.64" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "lacros_chrome_browsertests", + "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/" + }, + { + "args": [ "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.13/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], @@ -86115,7 +86140,7 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "isolate_profile_data": true, @@ -86123,14 +86148,14 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_Lacros version skew testing ash 102.0.4980.0", + "name": "lacros_chrome_browsertests_Lacros version skew testing ash 102.0.4981.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v102.0.4980.0", - "revision": "version:102.0.4980.0" + "location": "lacros_version_skew_tests_v102.0.4981.0", + "revision": "version:102.0.4981.0" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -86165,31 +86190,6 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome", - "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" - ], - "isolate_profile_data": true, - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "lacros_chrome_browsertests_Lacros version skew testing ash 99.0.4844.86", - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v99.0.4844.86", - "revision": "version:99.0.4844.86" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "lacros_chrome_browsertests", - "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/" - }, - { - "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.filter" ], "isolate_profile_data": true, @@ -86207,6 +86207,31 @@ }, { "args": [ + "--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome", + "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" + ], + "isolate_profile_data": true, + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 100.0.4896.64", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", + "location": "lacros_version_skew_tests_v100.0.4896.64", + "revision": "version:100.0.4896.64" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "lacros_chrome_browsertests_run_in_series", + "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" + }, + { + "args": [ "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.13/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], @@ -86232,7 +86257,7 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "isolate_profile_data": true, @@ -86240,14 +86265,14 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 102.0.4980.0", + "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 102.0.4981.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v102.0.4980.0", - "revision": "version:102.0.4980.0" + "location": "lacros_version_skew_tests_v102.0.4981.0", + "revision": "version:102.0.4981.0" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -86281,31 +86306,6 @@ "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" }, { - "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome", - "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" - ], - "isolate_profile_data": true, - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 99.0.4844.86", - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v99.0.4844.86", - "revision": "version:99.0.4844.86" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "lacros_chrome_browsertests_run_in_series", - "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" - }, - { "isolate_profile_data": true, "merge": { "args": [], @@ -87584,6 +87584,36 @@ }, { "args": [ + "--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome", + "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "lacros_chrome_browsertests_Lacros version skew testing ash 100.0.4896.64", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", + "location": "lacros_version_skew_tests_v100.0.4896.64", + "revision": "version:100.0.4896.64" + } + ], + "dimension_sets": [ + { + "os": "Ubuntu-18.04", + "ssd": "0" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "lacros_chrome_browsertests", + "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/" + }, + { + "args": [ "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.13/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], @@ -87614,21 +87644,21 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_Lacros version skew testing ash 102.0.4980.0", + "name": "lacros_chrome_browsertests_Lacros version skew testing ash 102.0.4981.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v102.0.4980.0", - "revision": "version:102.0.4980.0" + "location": "lacros_version_skew_tests_v102.0.4981.0", + "revision": "version:102.0.4981.0" } ], "dimension_sets": [ @@ -87674,36 +87704,6 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome", - "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "lacros_chrome_browsertests_Lacros version skew testing ash 99.0.4844.86", - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v99.0.4844.86", - "revision": "version:99.0.4844.86" - } - ], - "dimension_sets": [ - { - "os": "Ubuntu-18.04", - "ssd": "0" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "lacros_chrome_browsertests", - "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/" - }, - { - "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.filter" ], "merge": { @@ -87726,6 +87726,36 @@ }, { "args": [ + "--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome", + "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 100.0.4896.64", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", + "location": "lacros_version_skew_tests_v100.0.4896.64", + "revision": "version:100.0.4896.64" + } + ], + "dimension_sets": [ + { + "os": "Ubuntu-18.04", + "ssd": "0" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "lacros_chrome_browsertests_run_in_series", + "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" + }, + { + "args": [ "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.13/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], @@ -87756,21 +87786,21 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 102.0.4980.0", + "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 102.0.4981.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v102.0.4980.0", - "revision": "version:102.0.4980.0" + "location": "lacros_version_skew_tests_v102.0.4981.0", + "revision": "version:102.0.4981.0" } ], "dimension_sets": [ @@ -87815,36 +87845,6 @@ "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" }, { - "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome", - "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 99.0.4844.86", - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v99.0.4844.86", - "revision": "version:99.0.4844.86" - } - ], - "dimension_sets": [ - { - "os": "Ubuntu-18.04", - "ssd": "0" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "lacros_chrome_browsertests_run_in_series", - "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" - }, - { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -89281,6 +89281,36 @@ }, { "args": [ + "--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome", + "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "lacros_chrome_browsertests_Lacros version skew testing ash 100.0.4896.64", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", + "location": "lacros_version_skew_tests_v100.0.4896.64", + "revision": "version:100.0.4896.64" + } + ], + "dimension_sets": [ + { + "os": "Ubuntu-18.04", + "ssd": "0" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "lacros_chrome_browsertests", + "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/" + }, + { + "args": [ "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.13/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], @@ -89311,21 +89341,21 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_Lacros version skew testing ash 102.0.4980.0", + "name": "lacros_chrome_browsertests_Lacros version skew testing ash 102.0.4981.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v102.0.4980.0", - "revision": "version:102.0.4980.0" + "location": "lacros_version_skew_tests_v102.0.4981.0", + "revision": "version:102.0.4981.0" } ], "dimension_sets": [ @@ -89371,36 +89401,6 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome", - "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "lacros_chrome_browsertests_Lacros version skew testing ash 99.0.4844.86", - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v99.0.4844.86", - "revision": "version:99.0.4844.86" - } - ], - "dimension_sets": [ - { - "os": "Ubuntu-18.04", - "ssd": "0" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "lacros_chrome_browsertests", - "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/" - }, - { - "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.filter" ], "merge": { @@ -89423,6 +89423,36 @@ }, { "args": [ + "--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome", + "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 100.0.4896.64", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", + "location": "lacros_version_skew_tests_v100.0.4896.64", + "revision": "version:100.0.4896.64" + } + ], + "dimension_sets": [ + { + "os": "Ubuntu-18.04", + "ssd": "0" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "lacros_chrome_browsertests_run_in_series", + "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" + }, + { + "args": [ "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.13/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], @@ -89453,21 +89483,21 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 102.0.4980.0", + "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 102.0.4981.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v102.0.4980.0", - "revision": "version:102.0.4980.0" + "location": "lacros_version_skew_tests_v102.0.4981.0", + "revision": "version:102.0.4981.0" } ], "dimension_sets": [ @@ -89512,36 +89542,6 @@ "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" }, { - "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome", - "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 99.0.4844.86", - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v99.0.4844.86", - "revision": "version:99.0.4844.86" - } - ], - "dimension_sets": [ - { - "os": "Ubuntu-18.04", - "ssd": "0" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "lacros_chrome_browsertests_run_in_series", - "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" - }, - { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -90180,6 +90180,30 @@ "gtest_tests": [ { "args": [ + "--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome", + "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "lacros_chrome_browsertests_Lacros version skew testing ash 100.0.4896.64", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", + "location": "lacros_version_skew_tests_v100.0.4896.64", + "revision": "version:100.0.4896.64" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "lacros_chrome_browsertests", + "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/" + }, + { + "args": [ "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.13/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], @@ -90204,21 +90228,21 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_Lacros version skew testing ash 102.0.4980.0", + "name": "lacros_chrome_browsertests_Lacros version skew testing ash 102.0.4981.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v102.0.4980.0", - "revision": "version:102.0.4980.0" + "location": "lacros_version_skew_tests_v102.0.4981.0", + "revision": "version:102.0.4981.0" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -90252,27 +90276,27 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_Lacros version skew testing ash 99.0.4844.86", + "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 100.0.4896.64", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v99.0.4844.86", - "revision": "version:99.0.4844.86" + "location": "lacros_version_skew_tests_v100.0.4896.64", + "revision": "version:100.0.4896.64" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "lacros_chrome_browsertests", - "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/" + "test": "lacros_chrome_browsertests_run_in_series", + "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" }, { "args": [ @@ -90300,21 +90324,21 @@ }, { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome", "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 102.0.4980.0", + "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 102.0.4981.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v102.0.4980.0", - "revision": "version:102.0.4980.0" + "location": "lacros_version_skew_tests_v102.0.4981.0", + "revision": "version:102.0.4981.0" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -90345,30 +90369,6 @@ }, "test": "lacros_chrome_browsertests_run_in_series", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" - }, - { - "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome", - "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 99.0.4844.86", - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v99.0.4844.86", - "revision": "version:99.0.4844.86" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "lacros_chrome_browsertests_run_in_series", - "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/" } ] },
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index 64d3d6d..9c4b6cd5 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -1804,7 +1804,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -1825,7 +1825,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -1845,7 +1845,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -1866,7 +1866,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -5273,7 +5273,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5294,7 +5294,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5316,7 +5316,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5338,7 +5338,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5359,7 +5359,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5380,7 +5380,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -5402,7 +5402,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5423,7 +5423,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5446,7 +5446,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5467,7 +5467,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5488,7 +5488,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5509,7 +5509,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5530,7 +5530,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5551,7 +5551,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5573,7 +5573,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5594,7 +5594,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5615,7 +5615,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5637,7 +5637,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -5662,7 +5662,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -5685,7 +5685,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5706,7 +5706,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5727,7 +5727,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5748,7 +5748,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5769,7 +5769,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5790,7 +5790,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5811,7 +5811,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5832,7 +5832,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5853,7 +5853,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5874,7 +5874,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5895,7 +5895,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5916,7 +5916,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -5938,7 +5938,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -5960,7 +5960,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5981,7 +5981,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6002,7 +6002,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6023,7 +6023,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6044,7 +6044,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6065,7 +6065,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6086,7 +6086,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6107,7 +6107,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6128,7 +6128,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6149,7 +6149,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6170,7 +6170,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6191,7 +6191,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6212,7 +6212,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6233,7 +6233,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6254,7 +6254,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6275,7 +6275,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6296,7 +6296,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -6318,7 +6318,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6339,7 +6339,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6360,7 +6360,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6381,7 +6381,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6402,7 +6402,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6423,7 +6423,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6444,7 +6444,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6465,7 +6465,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6486,7 +6486,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6507,7 +6507,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6528,7 +6528,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6549,7 +6549,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6570,7 +6570,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -6593,7 +6593,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6614,7 +6614,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6635,7 +6635,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6656,7 +6656,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6677,7 +6677,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6698,7 +6698,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6719,7 +6719,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6740,7 +6740,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6761,7 +6761,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6782,7 +6782,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6803,7 +6803,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6824,7 +6824,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6845,7 +6845,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6866,7 +6866,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6887,7 +6887,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6908,7 +6908,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6929,7 +6929,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6950,7 +6950,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6971,7 +6971,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6992,7 +6992,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7013,7 +7013,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -7035,7 +7035,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7057,7 +7057,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7078,7 +7078,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7099,7 +7099,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7120,7 +7120,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7141,7 +7141,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7162,7 +7162,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7183,7 +7183,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7204,7 +7204,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7229,7 +7229,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7250,7 +7250,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7272,7 +7272,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7294,7 +7294,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7315,7 +7315,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7336,7 +7336,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7357,7 +7357,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7378,7 +7378,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7399,7 +7399,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7420,7 +7420,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7442,7 +7442,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7463,7 +7463,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7484,7 +7484,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7505,7 +7505,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -7528,7 +7528,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7549,7 +7549,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7570,7 +7570,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7591,7 +7591,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7612,7 +7612,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7633,7 +7633,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7654,7 +7654,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7675,7 +7675,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7696,7 +7696,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7717,7 +7717,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -7739,7 +7739,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7760,7 +7760,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7781,7 +7781,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7802,7 +7802,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7823,7 +7823,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7844,7 +7844,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7865,7 +7865,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7886,7 +7886,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7907,7 +7907,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7928,7 +7928,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7949,7 +7949,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7970,7 +7970,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7991,7 +7991,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8012,7 +8012,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8033,7 +8033,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8054,7 +8054,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8075,7 +8075,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8096,7 +8096,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8117,7 +8117,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8138,7 +8138,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8159,7 +8159,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -8181,7 +8181,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8202,7 +8202,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8223,7 +8223,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8244,7 +8244,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8265,7 +8265,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8286,7 +8286,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8307,7 +8307,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8328,7 +8328,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8349,7 +8349,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8370,7 +8370,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8391,7 +8391,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8412,7 +8412,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8433,7 +8433,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8454,7 +8454,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8475,7 +8475,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8496,7 +8496,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8517,7 +8517,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8538,7 +8538,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8559,7 +8559,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8580,7 +8580,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8601,7 +8601,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8622,7 +8622,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8643,7 +8643,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8664,7 +8664,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8685,7 +8685,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8706,7 +8706,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8727,7 +8727,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8748,7 +8748,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8769,7 +8769,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8790,7 +8790,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8811,7 +8811,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8832,7 +8832,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8853,7 +8853,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8874,7 +8874,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8895,7 +8895,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8916,7 +8916,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8937,7 +8937,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8958,7 +8958,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8979,7 +8979,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -9001,7 +9001,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -9022,7 +9022,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -12519,7 +12519,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "os": "Ubuntu-18.04" + "os": "Ubuntu-16.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
diff --git a/testing/buildbot/internal.chromeos.fyi.json b/testing/buildbot/internal.chromeos.fyi.json index 1476ec2b..6807feb8 100644 --- a/testing/buildbot/internal.chromeos.fyi.json +++ b/testing/buildbot/internal.chromeos.fyi.json
@@ -1126,7 +1126,7 @@ { "args": [], "cros_board": "octopus", - "cros_img": "octopus-release/R102-14654.0.0", + "cros_img": "octopus-release/R102-14658.0.0", "name": "lacros_fyi_tast_tests_OCTOPUS_RELEASE_LKGM", "swarming": {}, "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)", @@ -1170,7 +1170,7 @@ { "args": [], "cros_board": "octopus", - "cros_img": "octopus-release/R102-14654.0.0", + "cros_img": "octopus-release/R102-14658.0.0", "name": "ozone_unittests_OCTOPUS_RELEASE_LKGM", "swarming": {}, "test": "ozone_unittests", @@ -1218,7 +1218,7 @@ { "args": [], "cros_board": "strongbad", - "cros_img": "strongbad-release/R102-14654.0.0", + "cros_img": "strongbad-release/R102-14658.0.0", "name": "lacros_all_tast_tests_STRONGBAD_RELEASE_LKGM", "swarming": {}, "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)", @@ -1262,7 +1262,7 @@ { "args": [], "cros_board": "strongbad", - "cros_img": "strongbad-release/R102-14654.0.0", + "cros_img": "strongbad-release/R102-14658.0.0", "name": "ozone_unittests_STRONGBAD_RELEASE_LKGM", "swarming": {}, "test": "ozone_unittests", @@ -1302,7 +1302,7 @@ { "args": [], "cros_board": "strongbad", - "cros_img": "strongbad-release/R102-14654.0.0", + "cros_img": "strongbad-release/R102-14658.0.0", "name": "viz_unittests_STRONGBAD_RELEASE_LKGM", "swarming": {}, "test": "viz_unittests",
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl index d7a1ab7..197216d 100644 --- a/testing/buildbot/variants.pyl +++ b/testing/buildbot/variants.pyl
@@ -28,16 +28,16 @@ }, 'LACROS_VERSION_SKEW_CANARY': { 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4980.0/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.4981.0/test_ash_chrome', '--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter', ], - 'identifier': 'Lacros version skew testing ash 102.0.4980.0', + 'identifier': 'Lacros version skew testing ash 102.0.4981.0', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v102.0.4980.0', - 'revision': 'version:102.0.4980.0', + 'location': 'lacros_version_skew_tests_v102.0.4981.0', + 'revision': 'version:102.0.4981.0', }, ], }, @@ -76,16 +76,16 @@ }, 'LACROS_VERSION_SKEW_STABLE': { 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v99.0.4844.86/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v100.0.4896.64/test_ash_chrome', '--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter', ], - 'identifier': 'Lacros version skew testing ash 99.0.4844.86', + 'identifier': 'Lacros version skew testing ash 100.0.4896.64', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v99.0.4844.86', - 'revision': 'version:99.0.4844.86', + 'location': 'lacros_version_skew_tests_v100.0.4896.64', + 'revision': 'version:100.0.4896.64', }, ], }, @@ -459,7 +459,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M101', - 'revision': 'version:101.0.4951.20', + 'revision': 'version:101.0.4951.22', } ], }, @@ -483,7 +483,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M100', - 'revision': 'version:100.0.4896.79', + 'revision': 'version:100.0.4896.81', } ], }, @@ -603,7 +603,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M101', - 'revision': 'version:101.0.4951.20', + 'revision': 'version:101.0.4951.22', } ], }, @@ -627,7 +627,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M100', - 'revision': 'version:100.0.4896.79', + 'revision': 'version:100.0.4896.81', } ], }, @@ -747,7 +747,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M101', - 'revision': 'version:101.0.4951.20', + 'revision': 'version:101.0.4951.22', } ], }, @@ -771,7 +771,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M100', - 'revision': 'version:100.0.4896.79', + 'revision': 'version:100.0.4896.81', } ], }, @@ -875,8 +875,8 @@ 'CROS_ATLAS_RELEASE_LKGM': { 'skylab': { 'cros_board': 'atlas', - 'cros_chrome_version': '102.0.4973.0', - 'cros_img': 'atlas-release/R102-14654.0.0', + 'cros_chrome_version': '102.0.4975.0', + 'cros_img': 'atlas-release/R102-14658.0.0', }, 'enabled': True, 'identifier': 'ATLAS_RELEASE_LKGM', @@ -911,8 +911,8 @@ 'CROS_EVE_RELEASE_LKGM': { 'skylab': { 'cros_board': 'eve', - 'cros_chrome_version': '102.0.4973.0', - 'cros_img': 'eve-release/R102-14654.0.0', + 'cros_chrome_version': '102.0.4975.0', + 'cros_img': 'eve-release/R102-14658.0.0', }, 'enabled': True, 'identifier': 'EVE_RELEASE_LKGM', @@ -956,8 +956,8 @@ 'CROS_HANA_RELEASE_LKGM': { 'skylab': { 'cros_board': 'hana', - 'cros_chrome_version': '102.0.4973.0', - 'cros_img': 'hana-release/R102-14654.0.0', + 'cros_chrome_version': '102.0.4975.0', + 'cros_img': 'hana-release/R102-14658.0.0', }, 'enabled': True, 'identifier': 'HANA_RELEASE_LKGM', @@ -992,8 +992,8 @@ 'CROS_JACUZZI_RELEASE_LKGM': { 'skylab': { 'cros_board': 'jacuzzi', - 'cros_chrome_version': '102.0.4973.0', - 'cros_img': 'jacuzzi-release/R102-14654.0.0', + 'cros_chrome_version': '102.0.4975.0', + 'cros_img': 'jacuzzi-release/R102-14658.0.0', }, 'enabled': True, 'identifier': 'JACUZZI_RELEASE_LKGM', @@ -1037,8 +1037,8 @@ 'CROS_OCTOPUS_RELEASE_LKGM': { 'skylab': { 'cros_board': 'octopus', - 'cros_chrome_version': '102.0.4973.0', - 'cros_img': 'octopus-release/R102-14654.0.0', + 'cros_chrome_version': '102.0.4975.0', + 'cros_img': 'octopus-release/R102-14658.0.0', }, 'enabled': True, 'identifier': 'OCTOPUS_RELEASE_LKGM', @@ -1073,8 +1073,8 @@ 'CROS_STRONGBAD_RELEASE_LKGM': { 'skylab': { 'cros_board': 'strongbad', - 'cros_chrome_version': '102.0.4973.0', - 'cros_img': 'strongbad-release/R102-14654.0.0', + 'cros_chrome_version': '102.0.4975.0', + 'cros_img': 'strongbad-release/R102-14658.0.0', }, 'enabled': True, 'identifier': 'STRONGBAD_RELEASE_LKGM',
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 0e54f09..d2ec62a 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -5444,7 +5444,7 @@ }, 'Linux ASan Tests (sandboxed)': { 'mixins': [ - 'linux-bionic', + 'linux-xenial', ], 'test_suites': { 'gtest_tests': 'sandboxed_chromium_memory_linux_gtests', @@ -5474,7 +5474,7 @@ }, 'Linux ChromiumOS MSan Tests': { 'mixins': [ - 'linux-bionic', + 'linux-xenial', 'x86-64', ], 'test_suites': { @@ -5488,7 +5488,7 @@ }, 'Linux MSan Tests': { 'mixins': [ - 'linux-bionic', + 'linux-xenial', 'x86-64', ], 'test_suites': { @@ -5522,7 +5522,7 @@ }, 'WebKit Linux ASAN': { 'mixins': [ - 'linux-bionic', + 'linux-xenial', ], 'test_suites': { 'isolated_scripts': 'chromium_webkit_isolated_scripts',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index dac75a3..edd2d0f 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -6886,6 +6886,25 @@ ] } ], + "ThemeProviderColorProviderRedirection": [ + { + "platforms": [ + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ColorProviderRedirectionForThemeProvider" + ] + } + ] + } + ], "ThreadingOptimizationsOnIO": [ { "platforms": [
diff --git a/third_party/blink/public/common/privacy_budget/OWNERS b/third_party/blink/public/common/privacy_budget/OWNERS index b5711be9..c24231f 100644 --- a/third_party/blink/public/common/privacy_budget/OWNERS +++ b/third_party/blink/public/common/privacy_budget/OWNERS
@@ -1,2 +1,4 @@ -pauljensen@chromium.org +antoniosartori@chromium.org caraitto@chromium.org +mkwst@chromium.org +pauljensen@chromium.org \ No newline at end of file
diff --git a/third_party/blink/renderer/bindings/bindings.gni b/third_party/blink/renderer/bindings/bindings.gni index ab83a70..e44467f 100644 --- a/third_party/blink/renderer/bindings/bindings.gni +++ b/third_party/blink/renderer/bindings/bindings.gni
@@ -36,8 +36,6 @@ "core/v8/dictionary_helper_for_core.cc", "core/v8/generated_code_helper.cc", "core/v8/generated_code_helper.h", - "core/v8/idl_dictionary_base.cc", - "core/v8/idl_dictionary_base.h", "core/v8/idl_types.h", "core/v8/idl_types_base.h", "core/v8/isolated_world_csp.cc",
diff --git a/third_party/blink/renderer/bindings/core/v8/callback_invoke_helper.cc b/third_party/blink/renderer/bindings/core/v8/callback_invoke_helper.cc index a2509e5..4c85825a 100644 --- a/third_party/blink/renderer/bindings/core/v8/callback_invoke_helper.cc +++ b/third_party/blink/renderer/bindings/core/v8/callback_invoke_helper.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/bindings/core/v8/callback_invoke_helper.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/platform/bindings/callback_function_base.h" #include "third_party/blink/renderer/platform/bindings/callback_interface_base.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/dictionary_helper_for_core.cc b/third_party/blink/renderer/bindings/core/v8/dictionary_helper_for_core.cc index 480efeeb..a7698554 100644 --- a/third_party/blink/renderer/bindings/core/v8/dictionary_helper_for_core.cc +++ b/third_party/blink/renderer/bindings/core/v8/dictionary_helper_for_core.cc
@@ -32,6 +32,7 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_message_port.h" #include "third_party/blink/renderer/bindings/core/v8/v8_text_track.h" #include "third_party/blink/renderer/bindings/core/v8/v8_window.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/html/track/text_track.h" #include "third_party/blink/renderer/core/html/track/track_base.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.cc b/third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.cc deleted file mode 100644 index 4365d67..0000000 --- a/third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.cc +++ /dev/null
@@ -1,19 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.h" - -#include "base/notreached.h" - -namespace blink { - -v8::Local<v8::Value> IDLDictionaryBase::ToV8Impl(v8::Local<v8::Object>, - v8::Isolate*) const { - NOTREACHED(); - return v8::Local<v8::Value>(); -} - -void IDLDictionaryBase::Trace(Visitor* visitor) const {} - -} // namespace blink
diff --git a/third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.h b/third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.h deleted file mode 100644 index ece9ac1..0000000 --- a/third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.h +++ /dev/null
@@ -1,34 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_IDL_DICTIONARY_BASE_H_ -#define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_IDL_DICTIONARY_BASE_H_ - -#include "third_party/blink/renderer/core/core_export.h" -#include "third_party/blink/renderer/platform/heap/garbage_collected.h" -#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" -#include "v8/include/v8.h" - -namespace blink { - -// This class provides toV8Impl() virtual function which will be overridden -// by auto-generated IDL dictionary impl classes. toV8Impl() is used -// in ToV8.h to provide a consistent API of ToV8(). -class CORE_EXPORT IDLDictionaryBase - : public GarbageCollected<IDLDictionaryBase> { - public: - virtual ~IDLDictionaryBase() = default; - - virtual v8::Local<v8::Value> ToV8Impl(v8::Local<v8::Object> creation_context, - v8::Isolate*) const; - - virtual void Trace(Visitor*) const; - - protected: - IDLDictionaryBase() = default; -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_IDL_DICTIONARY_BASE_H_
diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc index 71c068ddc3..22fda19 100644 --- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc +++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/typed_arrays/typed_flexible_array_buffer_view.h" namespace blink {
diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.cc b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.cc index efa6ce12..eb68dae 100644 --- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.cc +++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.cc
@@ -7,6 +7,7 @@ #include "third_party/blink/renderer/bindings/core/v8/custom/v8_custom_xpath_ns_resolver.h" #include "third_party/blink/renderer/bindings/core/v8/js_event_handler.h" #include "third_party/blink/renderer/bindings/core/v8/v8_xpath_ns_resolver.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/bindings/exception_messages.h" #include "v8/include/v8-fast-api-calls.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h index 26581399..9b49ff6 100644 --- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h +++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
@@ -32,7 +32,6 @@ class CallbackInterfaceBase; class EventListener; class FlexibleArrayBufferView; -class IDLDictionaryBase; class ScriptWrappable; class XPathNSResolver; struct WrapperTypeInfo; @@ -1298,13 +1297,6 @@ typename std::enable_if_t< std::is_base_of<bindings::DictionaryBase, T>::value>>; -// Migration Adapters: Nullable dictionary types generated by the old bindings -// generator. -template <typename T> -struct NativeValueTraits< - IDLNullable<T>, - typename std::enable_if_t<std::is_base_of<IDLDictionaryBase, T>::value>>; - // Enumeration types template <typename T> struct NativeValueTraits<
diff --git a/third_party/blink/renderer/bindings/core/v8/to_v8_traits.h b/third_party/blink/renderer/bindings/core/v8/to_v8_traits.h index 033f9aa..aed4de9 100644 --- a/third_party/blink/renderer/bindings/core/v8/to_v8_traits.h +++ b/third_party/blink/renderer/bindings/core/v8/to_v8_traits.h
@@ -16,7 +16,6 @@ class CallbackFunctionBase; class CallbackInterfaceBase; -class IDLDictionaryBase; class ScriptWrappable; namespace bindings { @@ -281,21 +280,6 @@ } }; -// Old implementation of Dictionary -template <typename T> -struct ToV8Traits< - T, - std::enable_if_t<std::is_base_of<IDLDictionaryBase, T>::value>> { - [[nodiscard]] static v8::MaybeLocal<v8::Value> ToV8(ScriptState* script_state, - const T* dictionary) { - // TODO(crbug.com/1185018): Change this if-branch to DCHECK(dictionary). - if (!dictionary) - return v8::Null(script_state->GetIsolate()); - return dictionary->ToV8Impl(script_state->GetContext()->Global(), - script_state->GetIsolate()); - } -}; - // Callback function template <typename T> struct ToV8Traits< @@ -531,48 +515,6 @@ template <typename T> struct ToV8Traits< IDLSequence<T>, - std::enable_if_t<std::is_base_of<IDLDictionaryBase, T>::value>> { - [[nodiscard]] static v8::MaybeLocal<v8::Value> ToV8( - ScriptState* script_state, - const HeapVector<Member<T>>& value) { - return bindings::ToV8HelperSequenceWithMemberUpcast<IDLDictionaryBase>( - script_state, &value); - } - - [[nodiscard]] static v8::MaybeLocal<v8::Value> ToV8( - ScriptState* script_state, - const HeapVector<Member<const T>>& value) { - return bindings::ToV8HelperSequenceWithMemberUpcast<IDLDictionaryBase>( - script_state, &value); - } - - [[nodiscard]] static v8::MaybeLocal<v8::Value> ToV8( - ScriptState* script_state, - const HeapVector<Member<T>>* value) { - DCHECK(value); - return bindings::ToV8HelperSequenceWithMemberUpcast<IDLDictionaryBase>( - script_state, value); - } - - [[nodiscard]] static v8::MaybeLocal<v8::Value> ToV8( - ScriptState* script_state, - const HeapVector<Member<const T>>* value) { - DCHECK(value); - return bindings::ToV8HelperSequenceWithMemberUpcast<IDLDictionaryBase>( - script_state, value); - } - - // TODO(crbug.com/1185046): Remove this overload. - [[nodiscard]] static v8::MaybeLocal<v8::Value> ToV8( - ScriptState* script_state, - const Vector<v8::Local<v8::Value>>& value) { - return bindings::ToV8HelperSequence<IDLAny>(script_state, value); - } -}; - -template <typename T> -struct ToV8Traits< - IDLSequence<T>, std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>> { [[nodiscard]] static v8::MaybeLocal<v8::Value> ToV8( ScriptState* script_state, @@ -644,7 +586,6 @@ struct ToV8Traits< IDLSequence<T>, std::enable_if_t<!std::is_base_of<bindings::DictionaryBase, T>::value && - !std::is_base_of<IDLDictionaryBase, T>::value && !std::is_base_of<ScriptWrappable, T>::value && !std::is_base_of<bindings::UnionBase, T>::value>> { template <typename VectorType> @@ -852,19 +793,6 @@ } }; -// Nullable Dictionary (Old implementation) -template <typename T> -struct ToV8Traits< - IDLNullable<T>, - std::enable_if_t<std::is_base_of<IDLDictionaryBase, T>::value>> { - [[nodiscard]] static v8::MaybeLocal<v8::Value> ToV8(ScriptState* script_state, - const T* dictionary) { - if (!dictionary) - return v8::Null(script_state->GetIsolate()); - return ToV8Traits<T>::ToV8(script_state, dictionary); - } -}; - // Nullable Callback function template <typename T> struct ToV8Traits<
diff --git a/third_party/blink/renderer/bindings/core/v8/to_v8_traits_test.cc b/third_party/blink/renderer/bindings/core/v8/to_v8_traits_test.cc index 422ae29..478c03f 100644 --- a/third_party/blink/renderer/bindings/core/v8/to_v8_traits_test.cc +++ b/third_party/blink/renderer/bindings/core/v8/to_v8_traits_test.cc
@@ -522,7 +522,6 @@ // bindings::DictionaryBase TEST_TOV8_TRAITS(scope, IDLNullable<bindings::DictionaryBase>, "null", nullptr); - // IDLDictionaryBase DOMPointInit* dom_point_init = DOMPointInit::Create(); TEST_TOV8_TRAITS(scope, IDLNullable<DOMPointInit>, "null", nullptr); TEST_TOV8_TRAITS(scope, IDLNullable<DOMPointInit>, "[object Object]",
diff --git a/third_party/blink/renderer/core/animation/animation_time_delta.cc b/third_party/blink/renderer/core/animation/animation_time_delta.cc index f80029f..86e0874d 100644 --- a/third_party/blink/renderer/core/animation/animation_time_delta.cc +++ b/third_party/blink/renderer/core/animation/animation_time_delta.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "third_party/blink/renderer/core/animation/animation_time_delta.h" +#include "third_party/blink/renderer/core/core_export.h" namespace blink {
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect_model.cc b/third_party/blink/renderer/core/animation/keyframe_effect_model.cc index 98ea028..1ec4e36 100644 --- a/third_party/blink/renderer/core/animation/keyframe_effect_model.cc +++ b/third_party/blink/renderer/core/animation/keyframe_effect_model.cc
@@ -35,6 +35,7 @@ #include "third_party/blink/renderer/core/animation/animation_effect.h" #include "third_party/blink/renderer/core/animation/compositor_animations.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/css/css_property_equality.h" #include "third_party/blink/renderer/core/css/property_registry.h" #include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
diff --git a/third_party/blink/renderer/core/animation/timing_input.cc b/third_party/blink/renderer/core/animation/timing_input.cc index 61846819..0c283c7 100644 --- a/third_party/blink/renderer/core/animation/timing_input.cc +++ b/third_party/blink/renderer/core/animation/timing_input.cc
@@ -13,6 +13,7 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_union_keyframeeffectoptions_unrestricteddouble.h" #include "third_party/blink/renderer/core/animation/animation_effect.h" #include "third_party/blink/renderer/core/animation/animation_input_helpers.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" namespace blink {
diff --git a/third_party/blink/renderer/core/css/css_property_value_set.cc b/third_party/blink/renderer/core/css/css_property_value_set.cc index 10643bb..e697f27 100644 --- a/third_party/blink/renderer/core/css/css_property_value_set.cc +++ b/third_party/blink/renderer/core/css/css_property_value_set.cc
@@ -23,6 +23,7 @@ #include "third_party/blink/renderer/core/css/css_property_value_set.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/css/css_custom_property_declaration.h" #include "third_party/blink/renderer/core/css/css_identifier_value.h" #include "third_party/blink/renderer/core/css/parser/css_parser.h"
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index a0e8917..f61e8959 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -90,6 +90,7 @@ #include "third_party/blink/renderer/core/animation/pending_animations.h" #include "third_party/blink/renderer/core/animation/worklet_animation_controller.h" #include "third_party/blink/renderer/core/aom/computed_accessible_node.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/css/css_font_selector.h" #include "third_party/blink/renderer/core/css/css_property_value_set.h" #include "third_party/blink/renderer/core/css/css_style_declaration.h"
diff --git a/third_party/blink/renderer/core/editing/editing_strategy.cc b/third_party/blink/renderer/core/editing/editing_strategy.cc index 06788262..18dc4c0 100644 --- a/third_party/blink/renderer/core/editing/editing_strategy.cc +++ b/third_party/blink/renderer/core/editing/editing_strategy.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/editing/editing_strategy.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/text.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h" #include "third_party/blink/renderer/core/html/html_element.h"
diff --git a/third_party/blink/renderer/core/editing/ephemeral_range.cc b/third_party/blink/renderer/core/editing/ephemeral_range.cc index 9b4086f6..c325481f 100644 --- a/third_party/blink/renderer/core/editing/ephemeral_range.cc +++ b/third_party/blink/renderer/core/editing/ephemeral_range.cc
@@ -5,6 +5,8 @@ #include "third_party/blink/renderer/core/editing/ephemeral_range.h" #include <ostream> // NOLINT + +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/abstract_range.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/element.h"
diff --git a/third_party/blink/renderer/core/editing/iterators/backwards_character_iterator.cc b/third_party/blink/renderer/core/editing/iterators/backwards_character_iterator.cc index 097d51ce..54f9f4b 100644 --- a/third_party/blink/renderer/core/editing/iterators/backwards_character_iterator.cc +++ b/third_party/blink/renderer/core/editing/iterators/backwards_character_iterator.cc
@@ -27,6 +27,7 @@ #include "third_party/blink/renderer/core/editing/iterators/backwards_character_iterator.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/editing/ephemeral_range.h" namespace blink {
diff --git a/third_party/blink/renderer/core/editing/iterators/character_iterator.cc b/third_party/blink/renderer/core/editing/iterators/character_iterator.cc index 2144ff65..c0fd558 100644 --- a/third_party/blink/renderer/core/editing/iterators/character_iterator.cc +++ b/third_party/blink/renderer/core/editing/iterators/character_iterator.cc
@@ -27,6 +27,7 @@ #include "third_party/blink/renderer/core/editing/iterators/character_iterator.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/editing/ephemeral_range.h" namespace blink {
diff --git a/third_party/blink/renderer/core/editing/iterators/fully_clipped_state_stack.cc b/third_party/blink/renderer/core/editing/iterators/fully_clipped_state_stack.cc index 6405987..a41e6e6 100644 --- a/third_party/blink/renderer/core/editing/iterators/fully_clipped_state_stack.cc +++ b/third_party/blink/renderer/core/editing/iterators/fully_clipped_state_stack.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/editing/iterators/fully_clipped_state_stack.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/container_node.h" #include "third_party/blink/renderer/core/dom/node.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h"
diff --git a/third_party/blink/renderer/core/editing/iterators/simplified_backwards_text_iterator.cc b/third_party/blink/renderer/core/editing/iterators/simplified_backwards_text_iterator.cc index de176806..3eac053 100644 --- a/third_party/blink/renderer/core/editing/iterators/simplified_backwards_text_iterator.cc +++ b/third_party/blink/renderer/core/editing/iterators/simplified_backwards_text_iterator.cc
@@ -27,6 +27,7 @@ #include "third_party/blink/renderer/core/editing/iterators/simplified_backwards_text_iterator.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/first_letter_pseudo_element.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h" #include "third_party/blink/renderer/core/editing/ephemeral_range.h"
diff --git a/third_party/blink/renderer/core/editing/iterators/text_iterator.cc b/third_party/blink/renderer/core/editing/iterators/text_iterator.cc index 47a781ea..00e747c 100644 --- a/third_party/blink/renderer/core/editing/iterators/text_iterator.cc +++ b/third_party/blink/renderer/core/editing/iterators/text_iterator.cc
@@ -28,6 +28,7 @@ #include "third_party/blink/renderer/core/editing/iterators/text_iterator.h" #include <unicode/utf16.h> +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/shadow_root.h"
diff --git a/third_party/blink/renderer/core/editing/plain_text_range.cc b/third_party/blink/renderer/core/editing/plain_text_range.cc index 067ed61..32edc2a 100644 --- a/third_party/blink/renderer/core/editing/plain_text_range.cc +++ b/third_party/blink/renderer/core/editing/plain_text_range.cc
@@ -27,6 +27,7 @@ #include "third_party/blink/renderer/core/editing/plain_text_range.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/container_node.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/range.h"
diff --git a/third_party/blink/renderer/core/editing/position.cc b/third_party/blink/renderer/core/editing/position.cc index a6905fa..f0d1485 100644 --- a/third_party/blink/renderer/core/editing/position.cc +++ b/third_party/blink/renderer/core/editing/position.cc
@@ -27,6 +27,8 @@ #include <stdio.h> #include <ostream> // NOLINT + +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h" #include "third_party/blink/renderer/core/editing/text_affinity.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
diff --git a/third_party/blink/renderer/core/editing/position_iterator.cc b/third_party/blink/renderer/core/editing/position_iterator.cc index 38b18d1..40ca2d7 100644 --- a/third_party/blink/renderer/core/editing/position_iterator.cc +++ b/third_party/blink/renderer/core/editing/position_iterator.cc
@@ -25,6 +25,7 @@ #include "third_party/blink/renderer/core/editing/position_iterator.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h" #include "third_party/blink/renderer/core/editing/position.h"
diff --git a/third_party/blink/renderer/core/editing/position_with_affinity.cc b/third_party/blink/renderer/core/editing/position_with_affinity.cc index cced27e..e3146cb 100644 --- a/third_party/blink/renderer/core/editing/position_with_affinity.cc +++ b/third_party/blink/renderer/core/editing/position_with_affinity.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/editing/position_with_affinity.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/editing/text_affinity.h" namespace blink {
diff --git a/third_party/blink/renderer/core/editing/selection_template.cc b/third_party/blink/renderer/core/editing/selection_template.cc index e505d7bb..d7c255d 100644 --- a/third_party/blink/renderer/core/editing/selection_template.cc +++ b/third_party/blink/renderer/core/editing/selection_template.cc
@@ -5,6 +5,8 @@ #include "third_party/blink/renderer/core/editing/selection_template.h" #include <ostream> // NOLINT + +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/editing/ephemeral_range.h" #include "third_party/blink/renderer/core/editing/position_with_affinity.h"
diff --git a/third_party/blink/renderer/core/editing/serializers/serialization.cc b/third_party/blink/renderer/core/editing/serializers/serialization.cc index 4ee332f..6460917 100644 --- a/third_party/blink/renderer/core/editing/serializers/serialization.cc +++ b/third_party/blink/renderer/core/editing/serializers/serialization.cc
@@ -30,6 +30,7 @@ #include "third_party/blink/renderer/core/editing/serializers/serialization.h" #include "third_party/blink/public/common/tokens/tokens.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/css/css_identifier_value.h" #include "third_party/blink/renderer/core/css/css_property_value_set.h" #include "third_party/blink/renderer/core/css/css_value.h"
diff --git a/third_party/blink/renderer/core/editing/visible_position.cc b/third_party/blink/renderer/core/editing/visible_position.cc index b3d48a4..0a8417b 100644 --- a/third_party/blink/renderer/core/editing/visible_position.cc +++ b/third_party/blink/renderer/core/editing/visible_position.cc
@@ -28,6 +28,7 @@ #include "third_party/blink/renderer/core/editing/visible_position.h" #include <ostream> // NOLINT +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/text.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h"
diff --git a/third_party/blink/renderer/core/editing/visible_selection.cc b/third_party/blink/renderer/core/editing/visible_selection.cc index b7e3fb3..5b3094f77 100644 --- a/third_party/blink/renderer/core/editing/visible_selection.cc +++ b/third_party/blink/renderer/core/editing/visible_selection.cc
@@ -25,6 +25,7 @@ #include "third_party/blink/renderer/core/editing/visible_selection.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/dom/range.h"
diff --git a/third_party/blink/renderer/core/fragment_directive/same_block_word_iterator.cc b/third_party/blink/renderer/core/fragment_directive/same_block_word_iterator.cc index 1d1ec1f..021fc1c 100644 --- a/third_party/blink/renderer/core/fragment_directive/same_block_word_iterator.cc +++ b/third_party/blink/renderer/core/fragment_directive/same_block_word_iterator.cc
@@ -4,6 +4,8 @@ #include "third_party/blink/renderer/core/fragment_directive/same_block_word_iterator.h" +#include "third_party/blink/renderer/core/core_export.h" + namespace blink { template <typename Direction>
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc index 8b55fe6..21df448 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -78,6 +78,7 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/core/clipboard/system_clipboard.h" #include "third_party/blink/renderer/core/content_capture/content_capture_manager.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/core_initializer.h" #include "third_party/blink/renderer/core/core_probe_sink.h" #include "third_party/blink/renderer/core/css/background_color_paint_image_generator.h"
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc index 612d8657..3e4973f 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc
@@ -7,6 +7,7 @@ #include <type_traits> #include "base/containers/adapters.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/html/html_area_element.h" #include "third_party/blink/renderer/core/layout/layout_inline.h" #include "third_party/blink/renderer/core/layout/layout_text.h"
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc index d7c8970..27d0ebcf 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc
@@ -7,6 +7,7 @@ #include <memory> #include <utility> +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h" #include "third_party/blink/renderer/core/editing/position_with_affinity.h" #include "third_party/blink/renderer/core/editing/visible_units.h"
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc index e7360d8..3f213b8 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc
@@ -7,6 +7,7 @@ #include <memory> #include <utility> +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/core/layout/ng/layout_box_utils.h" #include "third_party/blink/renderer/core/layout/ng/layout_ng_block.h"
diff --git a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_padded_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_padded_layout_algorithm.h index afe6312b..ab31d79 100644 --- a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_padded_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_padded_layout_algorithm.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_PADDED_LAYOUT_ALGORITHM_H_ #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.h" namespace blink {
diff --git a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.h index 4593125c..7f4e1dfe 100644 --- a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_ROW_LAYOUT_ALGORITHM_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_ROW_LAYOUT_ALGORITHM_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_block_break_token.h" #include "third_party/blink/renderer/core/layout/ng/ng_block_node.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h"
diff --git a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.h index 88ecedf4..456c17ba 100644 --- a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_SCRIPTS_LAYOUT_ALGORITHM_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_SCRIPTS_LAYOUT_ALGORITHM_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h" #include "third_party/blink/renderer/core/mathml/mathml_scripts_element.h"
diff --git a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.h index 50d7591f..bcbe2357 100644 --- a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_SPACE_LAYOUT_ALGORITHM_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_SPACE_LAYOUT_ALGORITHM_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h"
diff --git a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_token_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_token_layout_algorithm.h index 1769417..98105a2 100644 --- a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_token_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_token_layout_algorithm.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_TOKEN_LAYOUT_ALGORITHM_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_TOKEN_LAYOUT_ALGORITHM_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_block_break_token.h" #include "third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h" #include "third_party/blink/renderer/core/layout/ng/ng_block_node.h"
diff --git a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.h index e8953c7..f616882 100644 --- a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_UNDER_OVER_LAYOUT_ALGORITHM_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_UNDER_OVER_LAYOUT_ALGORITHM_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h index 7b4c050..5196077 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h +++ b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h
@@ -7,6 +7,7 @@ #include "base/dcheck_is_on.h" #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/geometry/box_sides.h" #include "third_party/blink/renderer/core/layout/geometry/physical_rect.h" #include "third_party/blink/renderer/core/layout/ng/flex/ng_flex_data.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.h index aea0844b5..768c216 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_COLUMN_LAYOUT_ALGORITHM_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_COLUMN_LAYOUT_ALGORITHM_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h index 95dab74..eb83e520 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h
@@ -7,6 +7,7 @@ #include "base/dcheck_is_on.h" #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/geometry/logical_size.h" #include "third_party/blink/renderer/core/layout/ng/geometry/ng_bfc_offset.h" #include "third_party/blink/renderer/core/layout/ng/ng_constraint_space.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.h index fb6d97b..e7d38aa 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_FIELDSET_LAYOUT_ALGORITHM_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_FIELDSET_LAYOUT_ALGORITHM_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h" #include "third_party/blink/renderer/core/layout/geometry/logical_size.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.cc b/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.cc index b1c42c3d..880a0a2 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/layout/ng/ng_layout_input_node.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/html/forms/html_input_element.h" #include "third_party/blink/renderer/core/html/shadow/shadow_element_utils.h" #include "third_party/blink/renderer/core/input_type_names.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.h index 31e2a2d1..6e50b39 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_PAGE_LAYOUT_ALGORITHM_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_PAGE_LAYOUT_ALGORITHM_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_replaced_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_replaced_layout_algorithm.h index 8dc74fe..17671fe 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_replaced_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/ng_replaced_layout_algorithm.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_REPLACED_LAYOUT_ALGORITHM_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_REPLACED_LAYOUT_ALGORITHM_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.h index 66cb47b..070e73a 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_SIMPLIFIED_LAYOUT_ALGORITHM_H_ #include "base/notreached.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h" #include "third_party/blink/renderer/core/layout/ng/ng_block_break_token.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_simplified_oof_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_simplified_oof_layout_algorithm.h index 43147fc..32bda33 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_simplified_oof_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/ng_simplified_oof_layout_algorithm.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_SIMPLIFIED_OOF_LAYOUT_ALGORITHM_H_ #include "base/notreached.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h" #include "third_party/blink/renderer/core/layout/ng/ng_block_break_token.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_unpositioned_float.h b/third_party/blink/renderer/core/layout/ng/ng_unpositioned_float.h index 265813c..0dfc7f7 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_unpositioned_float.h +++ b/third_party/blink/renderer/core/layout/ng/ng_unpositioned_float.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_UNPOSITIONED_FLOAT_H_ #include "base/memory/scoped_refptr.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/geometry/logical_size.h" #include "third_party/blink/renderer/core/layout/ng/geometry/ng_bfc_offset.h" #include "third_party/blink/renderer/core/layout/ng/geometry/ng_box_strut.h"
diff --git a/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.h b/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.h index 47919d2..2454d18 100644 --- a/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.h +++ b/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_SVG_LAYOUT_NG_SVG_TEXT_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_SVG_LAYOUT_NG_SVG_TEXT_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.h" #include "third_party/blink/renderer/core/layout/svg/layout_svg_block.h"
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.h index 56ae37b..c9fe4f745 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_TABLE_NG_TABLE_LAYOUT_ALGORITHM_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_TABLE_NG_TABLE_LAYOUT_ALGORITHM_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h"
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_helpers.h b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_helpers.h index 7ee7bba4..6d9f63e 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_helpers.h +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_helpers.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_TABLE_NG_TABLE_LAYOUT_ALGORITHM_HELPERS_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_TABLE_NG_TABLE_LAYOUT_ALGORITHM_HELPERS_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_types.h" #include "third_party/blink/renderer/core/style/computed_style_constants.h"
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_types.h b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_types.h index 98edf1d..2dc136a 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_types.h +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_types.h
@@ -7,6 +7,7 @@ #include "base/memory/scoped_refptr.h" #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/min_max_sizes.h" #include "third_party/blink/renderer/core/layout/ng/geometry/ng_box_strut.h" #include "third_party/blink/renderer/core/layout/ng/ng_block_node.h"
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_node.h b/third_party/blink/renderer/core/layout/ng/table/ng_table_node.h index bcf5a2bb..36e4145 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_node.h +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_node.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_TABLE_NG_TABLE_NODE_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_TABLE_NG_TABLE_NODE_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_block_node.h" #include "third_party/blink/renderer/core/layout/ng/table/ng_table_borders.h"
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.h index 2dfa9541..af834c6 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_TABLE_NG_TABLE_ROW_LAYOUT_ALGORITHM_H_ #include "base/notreached.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h"
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_section_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/table/ng_table_section_layout_algorithm.h index 73b206d..60c8e21 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_section_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_section_layout_algorithm.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_TABLE_NG_TABLE_SECTION_LAYOUT_ALGORITHM_H_ #include "base/notreached.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h"
diff --git a/third_party/blink/renderer/core/layout/shapes/ellipse_shape.h b/third_party/blink/renderer/core/layout/shapes/ellipse_shape.h index e944a0b..1eff747 100644 --- a/third_party/blink/renderer/core/layout/shapes/ellipse_shape.h +++ b/third_party/blink/renderer/core/layout/shapes/ellipse_shape.h
@@ -30,6 +30,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_SHAPES_ELLIPSE_SHAPE_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_SHAPES_ELLIPSE_SHAPE_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/shapes/shape.h" #include "ui/gfx/geometry/point_f.h"
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_root.h b/third_party/blink/renderer/core/layout/svg/layout_svg_root.h index af9b552..c695662 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_root.h +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_root.h
@@ -23,6 +23,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_SVG_LAYOUT_SVG_ROOT_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_SVG_LAYOUT_SVG_ROOT_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/layout_replaced.h" #include "third_party/blink/renderer/core/layout/svg/svg_content_container.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h"
diff --git a/third_party/blink/renderer/core/layout/svg/svg_layout_support.h b/third_party/blink/renderer/core/layout/svg/svg_layout_support.h index a9c8df5..aeab66d 100644 --- a/third_party/blink/renderer/core/layout/svg/svg_layout_support.h +++ b/third_party/blink/renderer/core/layout/svg/svg_layout_support.h
@@ -24,6 +24,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_SVG_SVG_LAYOUT_SUPPORT_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_SVG_SVG_LAYOUT_SUPPORT_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/platform/graphics/dash_array.h" #include "third_party/blink/renderer/platform/transforms/affine_transform.h"
diff --git a/third_party/blink/renderer/core/loader/frame_load_request.h b/third_party/blink/renderer/core/loader/frame_load_request.h index b2ef68d..fa82b31 100644 --- a/third_party/blink/renderer/core/loader/frame_load_request.h +++ b/third_party/blink/renderer/core/loader/frame_load_request.h
@@ -39,6 +39,7 @@ #include "third_party/blink/public/web/web_picture_in_picture_window_options.h" #include "third_party/blink/public/web/web_window_features.h" #include "third_party/blink/renderer/bindings/core/v8/source_location.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/frame/frame_types.h" #include "third_party/blink/renderer/core/loader/frame_loader_types.h" #include "third_party/blink/renderer/core/loader/navigation_policy.h"
diff --git a/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.h b/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.h index 8dd12f8..6b33f924 100644 --- a/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.h +++ b/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_MODULESCRIPT_DOCUMENT_MODULE_SCRIPT_FETCHER_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_MODULESCRIPT_DOCUMENT_MODULE_SCRIPT_FETCHER_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
diff --git a/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.h b/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.h index aa482f97..169675d4 100644 --- a/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.h +++ b/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_MODULESCRIPT_INSTALLED_SERVICE_WORKER_MODULE_SCRIPT_FETCHER_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_MODULESCRIPT_INSTALLED_SERVICE_WORKER_MODULE_SCRIPT_FETCHER_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.h" namespace blink {
diff --git a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h index f351d88..89eeed2 100644 --- a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h +++ b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_MODULESCRIPT_WORKER_MODULE_SCRIPT_FETCHER_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_MODULESCRIPT_WORKER_MODULE_SCRIPT_FETCHER_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.h" #include "third_party/blink/renderer/platform/loader/fetch/url_loader/worker_main_script_loader.h" #include "third_party/blink/renderer/platform/loader/fetch/url_loader/worker_main_script_loader_client.h"
diff --git a/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.h b/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.h index b9d80a97..d88e7a3 100644 --- a/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.h +++ b/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_MODULESCRIPT_WORKLET_MODULE_SCRIPT_FETCHER_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_MODULESCRIPT_WORKLET_MODULE_SCRIPT_FETCHER_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.h" #include "third_party/blink/renderer/core/workers/worklet_module_responses_map.h"
diff --git a/third_party/blink/renderer/core/mathml/mathml_operator_element.h b/third_party/blink/renderer/core/mathml/mathml_operator_element.h index 77b65e4..f3e1d03c 100644 --- a/third_party/blink/renderer/core/mathml/mathml_operator_element.h +++ b/third_party/blink/renderer/core/mathml/mathml_operator_element.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_OPERATOR_ELEMENT_H_ #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/mathml/mathml_token_element.h" namespace blink {
diff --git a/third_party/blink/renderer/core/mathml/mathml_padded_element.h b/third_party/blink/renderer/core/mathml/mathml_padded_element.h index 7d07d3f..78de1e2 100644 --- a/third_party/blink/renderer/core/mathml/mathml_padded_element.h +++ b/third_party/blink/renderer/core/mathml/mathml_padded_element.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_PADDED_ELEMENT_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_PADDED_ELEMENT_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/mathml/mathml_row_element.h" namespace blink {
diff --git a/third_party/blink/renderer/core/mathml/mathml_radical_element.h b/third_party/blink/renderer/core/mathml/mathml_radical_element.h index 30342aba..79be0a8b 100644 --- a/third_party/blink/renderer/core/mathml/mathml_radical_element.h +++ b/third_party/blink/renderer/core/mathml/mathml_radical_element.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_RADICAL_ELEMENT_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_RADICAL_ELEMENT_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/mathml/mathml_row_element.h" namespace blink {
diff --git a/third_party/blink/renderer/core/mathml/mathml_row_element.h b/third_party/blink/renderer/core/mathml/mathml_row_element.h index ff452e8..8e03e5e 100644 --- a/third_party/blink/renderer/core/mathml/mathml_row_element.h +++ b/third_party/blink/renderer/core/mathml/mathml_row_element.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_ROW_ELEMENT_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_ROW_ELEMENT_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/mathml/mathml_element.h" namespace blink {
diff --git a/third_party/blink/renderer/core/mathml/mathml_scripts_element.h b/third_party/blink/renderer/core/mathml/mathml_scripts_element.h index ddea0b9..1898086 100644 --- a/third_party/blink/renderer/core/mathml/mathml_scripts_element.h +++ b/third_party/blink/renderer/core/mathml/mathml_scripts_element.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_SCRIPTS_ELEMENT_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_SCRIPTS_ELEMENT_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/mathml/mathml_element.h" namespace blink {
diff --git a/third_party/blink/renderer/core/mathml/mathml_token_element.h b/third_party/blink/renderer/core/mathml/mathml_token_element.h index 717034c..21db3be 100644 --- a/third_party/blink/renderer/core/mathml/mathml_token_element.h +++ b/third_party/blink/renderer/core/mathml/mathml_token_element.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_TOKEN_ELEMENT_H_ #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/mathml/mathml_element.h" #include "third_party/blink/renderer/platform/wtf/text/character_names.h"
diff --git a/third_party/blink/renderer/core/mathml/mathml_under_over_element.h b/third_party/blink/renderer/core/mathml/mathml_under_over_element.h index 0d379162d..3ff7a74 100644 --- a/third_party/blink/renderer/core/mathml/mathml_under_over_element.h +++ b/third_party/blink/renderer/core/mathml/mathml_under_over_element.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_MATHML_MATHML_UNDER_OVER_ELEMENT_H_ #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/mathml/mathml_scripts_element.h" namespace blink {
diff --git a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h index d333f867..a7147156 100644 --- a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h +++ b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h
@@ -10,6 +10,7 @@ #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_promise.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/dom_node_ids.h" #include "third_party/blink/renderer/core/dom/events/event_target.h" #include "third_party/blink/renderer/core/event_target_names.h"
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc index b8acd25..eec76a780 100644 --- a/third_party/blink/renderer/core/page/page.cc +++ b/third_party/blink/renderer/core/page/page.cc
@@ -29,6 +29,7 @@ #include "third_party/blink/public/web/blink.h" #include "third_party/blink/renderer/bindings/core/v8/script_controller.h" #include "third_party/blink/renderer/bindings/core/v8/source_location.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/css/media_feature_overrides.h" #include "third_party/blink/renderer/core/css/style_change_reason.h" #include "third_party/blink/renderer/core/css/style_engine.h"
diff --git a/third_party/blink/renderer/core/page/scrolling/sticky_position_scrolling_constraints.h b/third_party/blink/renderer/core/page/scrolling/sticky_position_scrolling_constraints.h index 7a37cc4..cbdfe6f 100644 --- a/third_party/blink/renderer/core/page/scrolling/sticky_position_scrolling_constraints.h +++ b/third_party/blink/renderer/core/page/scrolling/sticky_position_scrolling_constraints.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_PAGE_SCROLLING_STICKY_POSITION_SCROLLING_CONSTRAINTS_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAGE_SCROLLING_STICKY_POSITION_SCROLLING_CONSTRAINTS_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/geometry/physical_rect.h" #include "third_party/blink/renderer/platform/geometry/layout_unit.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
diff --git a/third_party/blink/renderer/core/paint/fragment_data.h b/third_party/blink/renderer/core/paint/fragment_data.h index 72113f4..fb41503b 100644 --- a/third_party/blink/renderer/core/paint/fragment_data.h +++ b/third_party/blink/renderer/core/paint/fragment_data.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_FRAGMENT_DATA_H_ #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/geometry/physical_rect.h" #include "third_party/blink/renderer/core/paint/object_paint_properties.h" #include "third_party/blink/renderer/platform/graphics/paint/cull_rect.h"
diff --git a/third_party/blink/renderer/core/paint/image_element_timing.cc b/third_party/blink/renderer/core/paint/image_element_timing.cc index 048fb7d5c2..8f82b90 100644 --- a/third_party/blink/renderer/core/paint/image_element_timing.cc +++ b/third_party/blink/renderer/core/paint/image_element_timing.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/renderer/core/paint/image_element_timing.h" #include "base/time/time.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/core/loader/resource/image_resource_content.h"
diff --git a/third_party/blink/renderer/core/paint/image_element_timing.h b/third_party/blink/renderer/core/paint/image_element_timing.h index a817420..f6777eb 100644 --- a/third_party/blink/renderer/core/paint/image_element_timing.h +++ b/third_party/blink/renderer/core/paint/image_element_timing.h
@@ -8,6 +8,7 @@ #include <utility> #include "base/time/time.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
diff --git a/third_party/blink/renderer/core/paint/image_paint_timing_detector.h b/third_party/blink/renderer/core/paint/image_paint_timing_detector.h index f5adf80f1..b210590 100644 --- a/third_party/blink/renderer/core/paint/image_paint_timing_detector.h +++ b/third_party/blink/renderer/core/paint/image_paint_timing_detector.h
@@ -11,6 +11,7 @@ #include "base/time/time.h" #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/dom_node_ids.h" #include "third_party/blink/renderer/core/loader/resource/image_resource_content.h" #include "third_party/blink/renderer/core/paint/paint_timing_detector.h"
diff --git a/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.h b/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.h index 012c0508..a72916b6 100644 --- a/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.h +++ b/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_LARGEST_CONTENTFUL_PAINT_CALCULATOR_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_LARGEST_CONTENTFUL_PAINT_CALCULATOR_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/paint/image_paint_timing_detector.h" #include "third_party/blink/renderer/core/paint/text_paint_timing_detector.h" #include "third_party/blink/renderer/core/timing/window_performance.h"
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h index 5ee1c306..6f9bdf2 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_NG_NG_BOX_FRAGMENT_PAINTER_H_ #include "base/dcheck_is_on.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/api/hit_test_action.h" #include "third_party/blink/renderer/core/layout/background_bleed_avoidance.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h"
diff --git a/third_party/blink/renderer/core/paint/ng/ng_highlight_overlay.h b/third_party/blink/renderer/core/paint/ng/ng_highlight_overlay.h index 44fd2149..ebfbe69 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_highlight_overlay.h +++ b/third_party/blink/renderer/core/paint/ng/ng_highlight_overlay.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_NG_NG_HIGHLIGHT_OVERLAY_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_NG_NG_HIGHLIGHT_OVERLAY_H_ +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/editing/markers/document_marker.h" #include "third_party/blink/renderer/core/highlight/highlight_registry.h" #include "third_party/blink/renderer/core/style/computed_style_constants.h"
diff --git a/third_party/blink/renderer/core/paint/paint_invalidator.h b/third_party/blink/renderer/core/paint/paint_invalidator.h index b4f1c0d..6816b5a4 100644 --- a/third_party/blink/renderer/core/paint/paint_invalidator.h +++ b/third_party/blink/renderer/core/paint/paint_invalidator.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_PAINT_INVALIDATOR_H_ #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/core/layout/layout_shift_tracker.h" #include "third_party/blink/renderer/core/paint/paint_property_tree_builder.h"
diff --git a/third_party/blink/renderer/core/paint/paint_layer_paint_order_iterator.h b/third_party/blink/renderer/core/paint/paint_layer_paint_order_iterator.h index 8325904..a03b60a 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_paint_order_iterator.h +++ b/third_party/blink/renderer/core/paint/paint_layer_paint_order_iterator.h
@@ -32,6 +32,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_PAINT_LAYER_PAINT_ORDER_ITERATOR_H_ #include "base/dcheck_is_on.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
diff --git a/third_party/blink/renderer/core/paint/paint_timing.h b/third_party/blink/renderer/core/paint/paint_timing.h index 1d0514f..72bd754 100644 --- a/third_party/blink/renderer/core/paint/paint_timing.h +++ b/third_party/blink/renderer/core/paint/paint_timing.h
@@ -10,6 +10,7 @@ #include "base/gtest_prod_util.h" #include "base/time/time.h" #include "third_party/blink/public/web/web_performance.h" +#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/paint/first_meaningful_paint_detector.h" #include "third_party/blink/renderer/core/paint/paint_event.h"
diff --git a/third_party/blink/renderer/core/testing/origin_trials_test.h b/third_party/blink/renderer/core/testing/origin_trials_test.h index 5d154fe..d5e2a43a 100644 --- a/third_party/blink/renderer/core/testing/origin_trials_test.h +++ b/third_party/blink/renderer/core/testing/origin_trials_test.h
@@ -5,7 +5,6 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_ORIGIN_TRIALS_TEST_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_ORIGIN_TRIALS_TEST_H_ -#include "third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.h" #include "third_party/blink/renderer/bindings/core/v8/v8_origin_trials_test_dictionary.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
diff --git a/third_party/blink/renderer/platform/fonts/font_global_context.cc b/third_party/blink/renderer/platform/fonts/font_global_context.cc index 56f84be..b9a1611 100644 --- a/third_party/blink/renderer/platform/fonts/font_global_context.cc +++ b/third_party/blink/renderer/platform/fonts/font_global_context.cc
@@ -6,6 +6,7 @@ #include "third_party/blink/renderer/platform/fonts/font_cache.h" #include "third_party/blink/renderer/platform/fonts/font_unique_name_lookup.h" +#include "third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.h" #include "third_party/blink/renderer/platform/fonts/shaping/harfbuzz_font_cache.h" #include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h" #include "third_party/blink/renderer/platform/wtf/thread_specific.h" @@ -40,10 +41,7 @@ : typeface_digest_cache_(kCachesMaxSize), postscript_name_digest_cache_(kCachesMaxSize) {} -FontGlobalContext::~FontGlobalContext() { - hb_font_funcs_destroy(harfbuzz_font_funcs_skia_advances_); - hb_font_funcs_destroy(harfbuzz_font_funcs_harfbuzz_advances_); -} +FontGlobalContext::~FontGlobalContext() = default; FontUniqueNameLookup* FontGlobalContext::GetFontUniqueNameLookup() { if (!Get().font_unique_name_lookup_) { @@ -114,6 +112,7 @@ DCHECK(IsMainThread()); if (auto* name_lookup = FontGlobalContext::Get().GetFontUniqueNameLookup()) name_lookup->Init(); + HarfBuzzFace::Init(); } } // namespace blink
diff --git a/third_party/blink/renderer/platform/fonts/font_global_context.h b/third_party/blink/renderer/platform/fonts/font_global_context.h index 5445fa2d..ed4252c 100644 --- a/third_party/blink/renderer/platform/fonts/font_global_context.h +++ b/third_party/blink/renderer/platform/fonts/font_global_context.h
@@ -14,8 +14,6 @@ #include "third_party/blink/renderer/platform/wtf/thread_specific.h" #include "third_party/skia/include/core/SkTypeface.h" -struct hb_font_funcs_t; - namespace blink { class FontCache; @@ -40,27 +38,6 @@ static HarfBuzzFontCache& GetHarfBuzzFontCache(); - enum HorizontalAdvanceSource { - kSkiaHorizontalAdvances, - kHarfBuzzHorizontalAdvances - }; - - static hb_font_funcs_t* GetHarfBuzzFontFuncs( - HorizontalAdvanceSource advance_source) { - if (advance_source == kHarfBuzzHorizontalAdvances) { - return Get().harfbuzz_font_funcs_harfbuzz_advances_; - } - return Get().harfbuzz_font_funcs_skia_advances_; - } - - static void SetHarfBuzzFontFuncs(HorizontalAdvanceSource advance_source, - hb_font_funcs_t* funcs) { - if (advance_source == kHarfBuzzHorizontalAdvances) { - Get().harfbuzz_font_funcs_harfbuzz_advances_ = funcs; - } - Get().harfbuzz_font_funcs_skia_advances_ = funcs; - } - static FontUniqueNameLookup* GetFontUniqueNameLookup(); IdentifiableToken GetOrComputeTypefaceDigest(const FontPlatformData& source); @@ -78,8 +55,6 @@ FontCache font_cache_; std::unique_ptr<HarfBuzzFontCache> harfbuzz_font_cache_; - hb_font_funcs_t* harfbuzz_font_funcs_skia_advances_ = nullptr; - hb_font_funcs_t* harfbuzz_font_funcs_harfbuzz_advances_ = nullptr; std::unique_ptr<FontUniqueNameLookup> font_unique_name_lookup_; WTF::LruCache<SkFontID, IdentifiableToken> typeface_digest_cache_; WTF::LruCache<SkFontID, IdentifiableToken> postscript_name_digest_cache_;
diff --git a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.cc b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.cc index da13f6fe..f03a22f 100644 --- a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.cc +++ b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.cc
@@ -60,28 +60,6 @@ namespace blink { -namespace { - -#if BUILDFLAG(IS_MAC) -void DetermineTrakSbix(SkTypeface* typeface, bool* has_trak, bool* has_sbix) { - int num_tags = typeface->countTables(); - - SkFontTableTag tags[num_tags]; - - int returned_tags = typeface->getTableTags(tags); - DCHECK_EQ(num_tags, returned_tags); - - for (auto& tag : tags) { - if (tag == SkSetFourByteTag('t', 'r', 'a', 'k')) - *has_trak = true; - if (tag == SkSetFourByteTag('s', 'b', 'i', 'x')) - *has_sbix = true; - } -} -#endif - -} // namespace - scoped_refptr<HarfBuzzFace> HarfBuzzFace::Create( FontPlatformData* platform_data) { auto harfbuzz_font_data = @@ -283,47 +261,113 @@ return harfbuzz_font_data_->font_.isSubpixel(); } -static hb_font_funcs_t* create_populated_hb_font_funcs( - FontGlobalContext::HorizontalAdvanceSource horizontal_advance_source) { - hb_font_funcs_t* funcs = hb_font_funcs_create(); - - if (horizontal_advance_source == FontGlobalContext::kSkiaHorizontalAdvances) { - hb_font_funcs_set_glyph_h_advance_func( - funcs, HarfBuzzGetGlyphHorizontalAdvance, nullptr, nullptr); - hb_font_funcs_set_glyph_h_advances_func( - funcs, HarfBuzzGetGlyphHorizontalAdvances, nullptr, nullptr); +// `HarfBuzzSkiaGetFontFuncs` is shared hb_font_funcs_t`s among threads for +// calculating horizontal advances functions. +class HarfBuzzSkiaGetFontFuncs final { + public: + static HarfBuzzSkiaGetFontFuncs& Get() { + DEFINE_THREAD_SAFE_STATIC_LOCAL(std::unique_ptr<HarfBuzzSkiaGetFontFuncs>, + shared_hb_funcs, ()); + if (!shared_hb_funcs) { + DCHECK(IsMainThread()); + shared_hb_funcs = base::WrapUnique(new HarfBuzzSkiaGetFontFuncs()); + } + return *shared_hb_funcs; } - hb_font_funcs_set_variation_glyph_func(funcs, HarfBuzzGetGlyph, nullptr, - nullptr); - hb_font_funcs_set_nominal_glyph_func(funcs, HarfBuzzGetNominalGlyph, nullptr, - nullptr); - // TODO(https://crbug.com/899718): Replace vertical metrics callbacks with - // HarfBuzz VORG/VMTX internal implementation by deregistering those. - hb_font_funcs_set_glyph_v_advance_func(funcs, HarfBuzzGetGlyphVerticalAdvance, + +#if BUILDFLAG(IS_MAC) + HarfBuzzSkiaGetFontFuncs() + : hb_font_funcs_skia_advances_( + CreateFontFunctions(kSkiaHorizontalAdvances)), + hb_font_funcs_harfbuzz_advances_( + CreateFontFunctions(kHarfBuzzHorizontalAdvances)) {} + + ~HarfBuzzSkiaGetFontFuncs() { + hb_font_funcs_destroy(hb_font_funcs_skia_advances_); + hb_font_funcs_destroy(hb_font_funcs_harfbuzz_advances_); + } + + hb_font_funcs_t* GetFunctions(SkTypeface* typeface) { + bool has_trak = false; + bool has_sbix = false; + + const int num_tags = typeface->countTables(); + + SkFontTableTag tags[num_tags]; + + const int returned_tags = typeface->getTableTags(tags); + DCHECK_EQ(num_tags, returned_tags); + + for (auto& tag : tags) { + if (tag == SkSetFourByteTag('t', 'r', 'a', 'k')) + has_trak = true; + if (tag == SkSetFourByteTag('s', 'b', 'i', 'x')) + has_sbix = true; + } + + return has_trak && !has_sbix ? hb_font_funcs_harfbuzz_advances_ + : hb_font_funcs_skia_advances_; + } +#else + HarfBuzzSkiaGetFontFuncs() + : hb_font_funcs_skia_advances_( + CreateFontFunctions(kSkiaHorizontalAdvances)) {} + + ~HarfBuzzSkiaGetFontFuncs() { + hb_font_funcs_destroy(hb_font_funcs_skia_advances_); + } + + hb_font_funcs_t* GetFunctions(SkTypeface*) { + return hb_font_funcs_skia_advances_; + } +#endif + + HarfBuzzSkiaGetFontFuncs(const HarfBuzzSkiaGetFontFuncs&) = delete; + HarfBuzzSkiaGetFontFuncs(HarfBuzzSkiaGetFontFuncs&&) = delete; + + HarfBuzzSkiaGetFontFuncs& operator=(const HarfBuzzSkiaGetFontFuncs&) = delete; + HarfBuzzSkiaGetFontFuncs& operator=(HarfBuzzSkiaGetFontFuncs&&) = delete; + + private: + enum HorizontalAdvanceSource { + kSkiaHorizontalAdvances, +#if BUILDFLAG(IS_MAC) + kHarfBuzzHorizontalAdvances, +#endif + }; + + static hb_font_funcs_t* CreateFontFunctions( + HorizontalAdvanceSource advance_source) { + hb_font_funcs_t* funcs = hb_font_funcs_create(); + + if (advance_source == kSkiaHorizontalAdvances) { + hb_font_funcs_set_glyph_h_advance_func( + funcs, HarfBuzzGetGlyphHorizontalAdvance, nullptr, nullptr); + hb_font_funcs_set_glyph_h_advances_func( + funcs, HarfBuzzGetGlyphHorizontalAdvances, nullptr, nullptr); + } + hb_font_funcs_set_variation_glyph_func(funcs, HarfBuzzGetGlyph, nullptr, + nullptr); + hb_font_funcs_set_nominal_glyph_func(funcs, HarfBuzzGetNominalGlyph, nullptr, nullptr); - hb_font_funcs_set_glyph_v_origin_func(funcs, HarfBuzzGetGlyphVerticalOrigin, - nullptr, nullptr); - hb_font_funcs_set_glyph_extents_func(funcs, HarfBuzzGetGlyphExtents, nullptr, - nullptr); + // TODO(crbug.com/899718): Replace vertical metrics callbacks with + // HarfBuzz VORG/VMTX internal implementation by deregistering those. + hb_font_funcs_set_glyph_v_advance_func( + funcs, HarfBuzzGetGlyphVerticalAdvance, nullptr, nullptr); + hb_font_funcs_set_glyph_v_origin_func(funcs, HarfBuzzGetGlyphVerticalOrigin, + nullptr, nullptr); + hb_font_funcs_set_glyph_extents_func(funcs, HarfBuzzGetGlyphExtents, + nullptr, nullptr); - hb_font_funcs_make_immutable(funcs); - return funcs; -} - -static hb_font_funcs_t* HarfBuzzSkiaGetFontFuncs( - FontGlobalContext::HorizontalAdvanceSource advance_source) { - hb_font_funcs_t* funcs = - FontGlobalContext::GetHarfBuzzFontFuncs(advance_source); - - // We don't set callback functions which we can't support. - // HarfBuzz will use the fallback implementation if they aren't set. - if (!funcs) { - funcs = create_populated_hb_font_funcs(advance_source); - FontGlobalContext::SetHarfBuzzFontFuncs(advance_source, funcs); + hb_font_funcs_make_immutable(funcs); + return funcs; } - DCHECK(funcs); - return funcs; -} + + hb_font_funcs_t* const hb_font_funcs_skia_advances_; +#if BUILDFLAG(IS_MAC) + hb_font_funcs_t* const hb_font_funcs_harfbuzz_advances_; +#endif +}; static hb_blob_t* HarfBuzzSkiaGetTable(hb_face_t* face, hb_tag_t tag, @@ -392,20 +436,11 @@ // Creating a sub font means that non-available functions // are found from the parent. - hb_font_t* unscaled_font = hb_font_create_sub_font(ot_font.get()); + hb_font_t* const unscaled_font = hb_font_create_sub_font(ot_font.get()); scoped_refptr<HarfBuzzFontData> harfbuzz_font_data = HarfBuzzFontData::Create(unscaled_font); - - FontGlobalContext::HorizontalAdvanceSource advance_source = - FontGlobalContext::kSkiaHorizontalAdvances; -#if BUILDFLAG(IS_MAC) - bool has_trak = false; - bool has_sbix = false; - DetermineTrakSbix(typeface, &has_trak, &has_sbix); - if (has_trak && !has_sbix) - advance_source = FontGlobalContext::kHarfBuzzHorizontalAdvances; -#endif - hb_font_set_funcs(unscaled_font, HarfBuzzSkiaGetFontFuncs(advance_source), + hb_font_set_funcs(unscaled_font, + HarfBuzzSkiaGetFontFuncs::Get().GetFunctions(typeface), harfbuzz_font_data.get(), nullptr); return harfbuzz_font_data; } @@ -453,4 +488,9 @@ return unscaled_font_; } +void HarfBuzzFace::Init() { + DCHECK(IsMainThread()); + HarfBuzzSkiaGetFontFuncs::Get(); +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.h b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.h index e3483db9..c1338bb 100644 --- a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.h +++ b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.h
@@ -76,6 +76,8 @@ bool ShouldSubpixelPosition(); + static void Init(); + private: HarfBuzzFace(FontPlatformData* platform_data, scoped_refptr<HarfBuzzFontData> harf_buzz_font_data);
diff --git a/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines.py b/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines.py index a6339124..f42c65a 100644 --- a/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines.py +++ b/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines.py
@@ -65,7 +65,8 @@ test_name).results: _log.debug('%s is skipped on %s.', test_name, port.name()) continue - if port.skipped_due_to_smoke_tests(test_name): + if (port.skipped_due_to_smoke_tests(test_name) or + port.virtual_test_skipped_due_to_platform_config(test_name)): _log.debug('%s is skipped on %s.', test_name, port.name()) continue
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base.py b/third_party/blink/tools/blinkpy/web_tests/port/base.py index 8aa565c8..1f22aa17 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/base.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/base.py
@@ -1257,11 +1257,13 @@ """Checks whether the given test is skipped for this port. Returns True if the test is skipped because the port runs smoke tests - only or because the test is marked as Skip in NeverFixTest (otherwise + only or because the test is marked as Skip in NeverFixTest or because + it is a virtual test not intended to run on this platform (otherwise the test is only marked as Skip indicating a temporary skip). """ return self.skipped_due_to_smoke_tests( - test) or self.skipped_in_never_fix_tests(test) + test) or self.skipped_in_never_fix_tests( + test) or self.virtual_test_skipped_due_to_platform_config(test) @memoized def _tests_from_file(self, filename): @@ -1313,6 +1315,17 @@ def path_to_never_fix_tests_file(self): return self._filesystem.join(self.web_tests_dir(), 'NeverFixTests') + def virtual_test_skipped_due_to_platform_config(self, test): + """Checks if the virtual test is skipped based on the platform config. + + Returns True if the virtual test is not intend to run on this port, due + to the platform config in VirtualTestSuites; returns False otherwise. + """ + suite = self._lookup_virtual_suite(test) + if suite is not None: + return self.operating_system() not in suite.platforms + return False + def name(self): """Returns a name that uniquely identifies this particular type of port. @@ -2048,8 +2061,7 @@ raise ValueError( '{} contains entries with the same prefix: {!r}. Please combine them' .format(path_to_virtual_test_suites, json_config)) - if self.operating_system() in [x.lower() for x in vts.platforms]: - self._virtual_test_suites.append(vts) + self._virtual_test_suites.append(vts) except ValueError as error: raise ValueError('{} is not a valid JSON file: {}'.format( path_to_virtual_test_suites, error)) @@ -2380,10 +2392,11 @@ assert args assert isinstance(args, list) self.full_prefix = 'virtual/' + prefix + '/' - self.platforms = platforms + self.platforms = [x.lower() for x in platforms] self.bases = bases self.args = args def __repr__(self): - return "VirtualTestSuite('%s', %s, %s)" % (self.full_prefix, - self.bases, self.args) + return "VirtualTestSuite('%s', %s, %s, %s)" % (self.full_prefix, + self.platforms, + self.bases, self.args)
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py index 86e2aee7..c5de901 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py
@@ -1769,7 +1769,7 @@ bases=['base/foo', 'base/bar'], args=['--args']) self.assertEqual(suite.full_prefix, 'virtual/suite/') - self.assertEqual(suite.platforms, ['Linux', 'Mac', 'Win']) + self.assertEqual(suite.platforms, ['linux', 'mac', 'win']) self.assertEqual(suite.bases, ['base/foo', 'base/bar']) self.assertEqual(suite.args, ['--args']) @@ -1779,7 +1779,7 @@ bases=[], args=['--args']) self.assertEqual(suite.full_prefix, 'virtual/suite/') - self.assertEqual(suite.platforms, ['Linux', 'Mac', 'Win']) + self.assertEqual(suite.platforms, ['linux', 'mac', 'win']) self.assertEqual(suite.bases, []) self.assertEqual(suite.args, ['--args'])
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-3d-fixed-under-fixed-opacity-crash.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-3d-fixed-under-fixed-opacity-crash.html new file mode 100644 index 0000000..a2ddc814 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-3d-fixed-under-fixed-opacity-crash.html
@@ -0,0 +1,7 @@ +<!DOCTYPE html> +<link rel="help" href="https://crbug.com/1308269"> +<div style="position: fixed; opacity: 0.5"> + <div style="position: fixed; transform: rotate3d(0, 1, 1, 20deg)">ROTATE1</div> + <div style="position: fixed; transform: rotate3d(0, 1, 1, 20deg)">ROTATE2</div> +</div> +<div style="height: 2000px"></div>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index cfd915b9..89837198 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -29095,6 +29095,7 @@ <int value="970" label="DownloadBubbleEnabled"/> <int value="971" label="DevicePowerAdaptiveChargingEnabled"/> <int value="972" label="GetDisplayMediaSetSelectAllScreens"/> + <int value="973" label="WarnBeforeQuittingEnabled"/> </enum> <enum name="EnterprisePolicyDeviceIdValidity">
diff --git a/tools/perf/PRESUBMIT.py b/tools/perf/PRESUBMIT.py index 04d5266..e7bed08b 100644 --- a/tools/perf/PRESUBMIT.py +++ b/tools/perf/PRESUBMIT.py
@@ -83,16 +83,31 @@ perf_dir = input_api.PresubmitLocalPath() script_abs_path = input_api.os_path.join(perf_dir, script_path) extra_args = extra_args if extra_args else [] - args = [vpython, script_abs_path] + extra_args - out, return_code = _RunArgs(args, input_api) - if return_code: - error_msg = 'Script ' + script_path + ' failed.' - if block_on_failure is None or block_on_failure: - results.append(output_api.PresubmitError( - error_msg, long_text=out)) - else: - results.append(output_api.PresubmitPromptWarning( - error_msg, long_text=out)) + # When running git cl presubmit --all this presubmit may be asked to check + # ~500 files, leading to a command line that is over 43,000 characters. + # This goes past the Windows 8191 character cmd.exe limit and causes cryptic + # failures. To avoid these we break the command up into smaller pieces. The + # non-Windows limit is chosen so that the code that splits up commands will + # get some exercise on other platforms. + # Depending on how long the command is on Windows the error may be: + # The command line is too long. + # Or it may be: + # OSError: Execution failed with error: [WinError 206] The filename or + # extension is too long. + # I suspect that the latter error comes from CreateProcess hitting its 32768 + # character limit. + files_per_command = 50 if input_api.is_windows else 1000 + # Handle the case where extra_args is empty. + for i in range(0, len(extra_args) if extra_args else 1, files_per_command): + args = [vpython, script_abs_path] + extra_args[i:i + files_per_command] + out, return_code = _RunArgs(args, input_api) + if return_code: + error_msg = 'Script ' + script_path + ' failed.' + if block_on_failure is None or block_on_failure: + results.append(output_api.PresubmitError(error_msg, long_text=out)) + else: + results.append( + output_api.PresubmitPromptWarning(error_msg, long_text=out)) return results def _CheckExpectations(input_api, output_api):
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 1bbbb07..a4aa2754 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -13,8 +13,8 @@ "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell" }, "mac": { - "hash": "cf9886fcd2d28d8d01b416c46a00d606b2559acf", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/06f638cf6004feb20392c233d5984a2a52bc7993/trace_processor_shell" + "hash": "11dfbe81619f06e020f64fd90d2a610cfb5a04ac", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/f4da613d6229df0d6a017448de05d54e7218d58d/trace_processor_shell" }, "mac_arm64": { "hash": "c0397e87456ad6c6a7aa0133e5b81c97adbab4ab", @@ -22,7 +22,7 @@ }, "linux": { "hash": "35df8db1c380d4fc82da571c2cbff5429a501a7e", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/06f638cf6004feb20392c233d5984a2a52bc7993/trace_processor_shell" + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/f4da613d6229df0d6a017448de05d54e7218d58d/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/web_dev_style/eslint.py b/tools/web_dev_style/eslint.py index 4ece743d..31696cf8 100755 --- a/tools/web_dev_style/eslint.py +++ b/tools/web_dev_style/eslint.py
@@ -10,7 +10,6 @@ _SRC_PATH = os_path.normpath(os_path.join(_HERE_PATH, '..', '..')) _NODE_PATH = os_path.join(_SRC_PATH, 'third_party', 'node') - import os import sys old_sys_path = sys.path[:] sys.path.append(_NODE_PATH) @@ -19,29 +18,11 @@ finally: sys.path = old_sys_path - # When running git cl presubmit --all this presubmit may be asked to check - # ~1,100 files, leading to a command line that is about 92,000 characters. - # This goes past the Windows 8191 character cmd.exe limit and causes cryptic - # failures. To avoid these we break the command up into smaller pieces. The - # non-Windows limit is chosen so that the code that splits up commands will - # get some exercise on other platforms. - # Depending on how long the command is on Windows the error may be: - # The command line is too long. - # Or it may be: - # OSError: Execution failed with error: [WinError 206] The filename or - # extension is too long. - # I suspect that the latter error comes from CreateProcess hitting its 32768 - # character limit. - files_per_command = 50 if os.name == 'nt' else 1000 - results = [] - for i in range(0, len(args), files_per_command): - results.append( - node.RunNode([ - node_modules.PathToEsLint(), - '--resolve-plugins-relative-to', - os_path.join(_NODE_PATH, 'node_modules'), - ] + args[i:i + files_per_command])) - return results + return node.RunNode([ + node_modules.PathToEsLint(), + '--resolve-plugins-relative-to', + os_path.join(_NODE_PATH, 'node_modules'), + ] + args) if __name__ == '__main__':
diff --git a/ui/base/ime/ash/input_method_ash.cc b/ui/base/ime/ash/input_method_ash.cc index 17cc6694..05c334e 100644 --- a/ui/base/ime/ash/input_method_ash.cc +++ b/ui/base/ime/ash/input_method_ash.cc
@@ -493,6 +493,15 @@ // Only a pending commit, so confirming the composition is a no-op. return; } + // TODO(b/225723475): Similar to the comment above, this is a quick fix to + // solve the autocorrect issue outlined in the linked bug. This is due to the + // pending composition being reset before it could be applied to the current + // text. Again we need to fix this properly by removing the pending mechanism. + if (pending_composition_ && !pending_commit_ && !pending_composition_range_) { + GetTextInputClient()->SetCompositionText(*pending_composition_); + pending_composition_ = absl::nullopt; + composition_changed_ = false; + } if (client && client->HasCompositionText()) { const uint32_t characters_committed = client->ConfirmCompositionText(keep_selection);
diff --git a/ui/webui/BUILD.gn b/ui/webui/BUILD.gn index 50cf536..cc37aa3 100644 --- a/ui/webui/BUILD.gn +++ b/ui/webui/BUILD.gn
@@ -18,6 +18,8 @@ "webui_allowlist_provider.h", "webui_config.cc", "webui_config.h", + "webui_config_map.cc", + "webui_config_map.h", ] deps = [
diff --git a/ui/webui/webui_config_map.cc b/ui/webui/webui_config_map.cc new file mode 100644 index 0000000..caca69e --- /dev/null +++ b/ui/webui/webui_config_map.cc
@@ -0,0 +1,110 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/webui/webui_config_map.h" + +#include "base/no_destructor.h" +#include "base/strings/strcat.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_ui.h" +#include "content/public/browser/web_ui_controller.h" +#include "content/public/browser/web_ui_controller_factory.h" +#include "content/public/common/url_constants.h" +#include "ui/webui/webui_config.h" +#include "url/gurl.h" + +namespace ui { + +namespace { + +// Owned by WebUIConfigMap. Used to hook up with the existing WebUI infra. +class WebUIConfigMapWebUIControllerFactory + : public content::WebUIControllerFactory { + public: + explicit WebUIConfigMapWebUIControllerFactory(WebUIConfigMap& config_map) + : config_map_(config_map) {} + ~WebUIConfigMapWebUIControllerFactory() override = default; + + content::WebUI::TypeID GetWebUIType(content::BrowserContext* browser_context, + const GURL& url) override { + auto* config = + config_map_.GetConfig(browser_context, url::Origin::Create(url)); + if (!config) + return content::WebUI::kNoWebUI; + + return reinterpret_cast<content::WebUI::TypeID>(config); + } + + bool UseWebUIForURL(content::BrowserContext* browser_context, + const GURL& url) override { + return config_map_.GetConfig(browser_context, url::Origin::Create(url)); + } + + std::unique_ptr<content::WebUIController> CreateWebUIControllerForURL( + content::WebUI* web_ui, + const GURL& url) override { + auto* browser_context = web_ui->GetWebContents()->GetBrowserContext(); + auto* config = + config_map_.GetConfig(browser_context, url::Origin::Create(url)); + if (!config) + return nullptr; + + return config->CreateWebUIController(web_ui); + } + + private: + // Keeping a reference should be safe since this class is owned by + // WebUIConfigMap. + WebUIConfigMap& config_map_; +}; + +} // namespace +// static +WebUIConfigMap& WebUIConfigMap::GetInstance() { + static base::NoDestructor<WebUIConfigMap> instance; + return *instance.get(); +} + +WebUIConfigMap::WebUIConfigMap() + : webui_controller_factory_( + std::make_unique<WebUIConfigMapWebUIControllerFactory>(*this)) { + content::WebUIControllerFactory::RegisterFactory( + webui_controller_factory_.get()); +} + +WebUIConfigMap::~WebUIConfigMap() = default; + +void WebUIConfigMap::AddWebUIConfig(std::unique_ptr<WebUIConfig> config) { + CHECK_EQ(config->scheme(), content::kChromeUIScheme); + AddWebUIConfigImpl(std::move(config)); +} + +void WebUIConfigMap::AddUntrustedWebUIConfig( + std::unique_ptr<WebUIConfig> config) { + CHECK_EQ(config->scheme(), content::kChromeUIUntrustedScheme); + AddWebUIConfigImpl(std::move(config)); +} + +void WebUIConfigMap::AddWebUIConfigImpl(std::unique_ptr<WebUIConfig> config) { + GURL url(base::StrCat( + {config->scheme(), url::kStandardSchemeSeparator, config->host()})); + auto it = configs_map_.emplace(url::Origin::Create(url), std::move(config)); + // CHECK if a WebUIConfig with the same host was already added. + CHECK(it.second) << url; +} + +WebUIConfig* WebUIConfigMap::GetConfig(content::BrowserContext* browser_context, + const url::Origin& origin) { + auto origin_and_config = configs_map_.find(origin); + if (origin_and_config == configs_map_.end()) + return nullptr; + auto& config = origin_and_config->second; + + if (!config->IsWebUIEnabled(browser_context)) + return nullptr; + + return config.get(); +} + +} // namespace ui
diff --git a/ui/webui/webui_config_map.h b/ui/webui/webui_config_map.h new file mode 100644 index 0000000..915e30fc --- /dev/null +++ b/ui/webui/webui_config_map.h
@@ -0,0 +1,68 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_WEBUI_WEBUI_CONFIG_MAP_H_ +#define UI_WEBUI_WEBUI_CONFIG_MAP_H_ + +#include <map> +#include <memory> + +namespace content { +class BrowserContext; +class WebUIControllerFactory; +} // namespace content + +namespace url { +class Origin; +} + +namespace ui { +class WebUIConfig; + +// Class that holds all WebUIConfigs for the browser. +// +// Embedders wishing to register WebUIConfigs should use +// AddWebUIConfig and AddUntrustedWebUIConfig. +// +// Underneath it uses a WebUIControllerFactory to hook into the rest of the +// WebUI infra. +class WebUIConfigMap { + public: + static WebUIConfigMap& GetInstance(); + + WebUIConfigMap(); + WebUIConfigMap(const WebUIConfigMap&) = delete; + WebUIConfigMap& operator=(const WebUIConfigMap&) = delete; + ~WebUIConfigMap(); + + // Adds a chrome:// WebUIConfig. CHECKs if the WebUIConfig is for a + // chrome-untrusted:// WebUIConfig. + void AddWebUIConfig(std::unique_ptr<WebUIConfig> config); + + // Adds a chrome-untrusted:// WebUIConfig. CHECKs if the WebUIConfig is + // for a chrome:// WebUIConfig. + // + // Although the scheme is included as part of the WebUIConfig, having + // two separate methods for chrome:// and chrome-untrusted:// helps + // readers tell what type of WebUIConfig is being added. + void AddUntrustedWebUIConfig(std::unique_ptr<WebUIConfig> config); + + // Returns the WebUIConfig for |origin| if it's registered and the WebUI is + // enabled. (WebUIs can be disabled based on the profile or feature flags.) + WebUIConfig* GetConfig(content::BrowserContext* browser_context, + const url::Origin& origin); + + private: + void AddWebUIConfigImpl(std::unique_ptr<WebUIConfig> config); + + using WebUIConfigMapImpl = + std::map<url::Origin, std::unique_ptr<ui::WebUIConfig>>; + WebUIConfigMapImpl configs_map_; + + std::unique_ptr<content::WebUIControllerFactory> webui_controller_factory_; +}; + +} // namespace ui + +#endif // UI_WEBUI_WEBUI_CONFIG_MAP_H_