diff --git a/DEPS b/DEPS index 5138d53..cfa92b70 100644 --- a/DEPS +++ b/DEPS
@@ -177,7 +177,7 @@ # luci-go CIPD package version. # Make sure the revision is uploaded by infra-packagers builder. # https://ci.chromium.org/p/infra-internal/g/infra-packagers/console - 'luci_go': 'git_revision:173195137e006c3bbbd2394409e3d752f8b3c62f', + 'luci_go': 'git_revision:7c21dae4ffe132b3bf611dce050d268f1ef4c155', # This can be overridden, e.g. with custom_vars, to build clang from HEAD # instead of downloading the prebuilt pinned revision. @@ -209,7 +209,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': '11a737fa4b8be45d9942345a717f058695b51f20', + 'skia_revision': '421c360abe763148935eb84a133ddb9eab179209', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -221,7 +221,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': '16a919b174b122d8463345262eade7795fb97aa8', + 'angle_revision': 'ed8755dfdee106faaafc97d00dda84c9a6f694e3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -229,7 +229,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': 'd6c0f7d6aeaac79ca1eb7fb065d80dbd3504c92e', + 'pdfium_revision': '88780c39d858d4a89e928a885299cfd942a095b5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -280,7 +280,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': 'ca2c40743faf25ae3fdac8ba1813c33473a254ee', + 'catapult_revision': 'c5554ea0ab72873126d06f36d1bc19b23a0086a5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -288,7 +288,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': '3b10a97f910e240f1012cc838fb4560c00a12494', + 'devtools_frontend_revision': '56e1e43c887dbb2869ce52d9b99f71774740c249', # 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. @@ -328,7 +328,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '12c6305674d1e1c91320c0660c6d0f6c328e03c8', + 'dawn_revision': '1bd0450254dee91d82122ae34857a5d8a8f4d8da', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -548,7 +548,7 @@ Var('chromium_git') + '/external/github.com/toji/webvr.info.git' + '@' + 'c58ae99b9ff9e2aa4c524633519570bf33536248', 'src/ios/third_party/earl_grey2/src': { - 'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + 'f4395d996a10f7c8a065f4c8435497d419698f0b', + 'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '1b993658f3d76dd7f5fa45c55e7d7080b09bae31', 'condition': 'checkout_ios', }, @@ -961,12 +961,12 @@ # For Linux and Chromium OS. 'src/third_party/cros_system_api': { - 'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '5dc19fb1aade1dc476ca86de88acf1104d346492', + 'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + 'cb29aa12b90c9dd04aad92a4ad85f740b31f32c5', 'condition': 'checkout_linux', }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'ae1b2b19ef3118866b3237ef9f0c85fba855118c', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'b3c9edb4af40cce0512adbcae7fc3fd2450e2b45', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1177,7 +1177,7 @@ Var('chromium_git') + '/external/libaddressinput.git' + '@' + '3b8ee157a8f3536bbf5ad2448e9e3370463c1e40', 'src/third_party/libaom/source/libaom': - Var('aomedia_git') + '/aom.git' + '@' + '6c93db7ff63430d2e5dcdfc42e84e3a0514da608', + Var('aomedia_git') + '/aom.git' + '@' + '1431f93c1ebb5fa5107a5f3218b68501b1bb1c6c', 'src/third_party/libavif/src': Var('chromium_git') + '/external/github.com/AOMediaCodec/libavif.git' + '@' + Var('libavif_revision'), @@ -1416,7 +1416,7 @@ 'packages': [ { 'package': 'fuchsia/third_party/aemu/linux-amd64', - 'version': 'CMJyNq6nZ3RoBUYmon01iRJ7MYYfVl4ds1kgbGFcNRMC' + 'version': 'KmvDYKZZ-xQz7ZzzSKBh3HrWPpQv89vfFY9mBp6RDq4C' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -1549,7 +1549,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'a0b8774ce8cec1dc8f4308810bf05eb8867c62de', 'src/third_party/webgpu-cts/src': - Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '267e0b71649664a27d79f23773f0bde9e0e1164f', + Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '9dd7f1e157c609c8056f7f8b9c04e627611ef937', 'src/third_party/webrtc': Var('webrtc_git') + '/src.git' + '@' + 'f8187e0a82130f93cf01953deafd63ea427af022', @@ -1579,7 +1579,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/linux-amd64', - 'version': 'bNvl5eveNZJzFEWnXEt_ohXLbBA8BSt78S5aHS7rNYMC', + 'version': 'E6CrCAKZ_DKxclAqgBcEt4adU3HaviUwN42S1t3rW5QC', }, ], 'dep_type': 'cipd', @@ -1589,7 +1589,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/windows-amd64', - 'version': 'dP2sgrA7eRtFoLWGRjvQQ4YXhGlwKqsCiqPqPQuY1OgC', + 'version': 'XXJR8g1yaihqXsw7WodVpgLtZsimS7Cc3yLJI9sJssgC', }, ], 'dep_type': 'cipd', @@ -1599,7 +1599,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/mac-amd64', - 'version': 'jWn1_ogilSNdcmHMkXsZTdw5bQ-IDoQ3IifWt1TDv6sC', + 'version': 'RTGs3s-N45d3AzDXnEKw3kbI0qf8xyS_JYMHo4iRCMIC', }, ], 'dep_type': 'cipd', @@ -1613,7 +1613,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@b8d239568fb2af12d03d4ca9cf2fcb3a45a5f58a', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@1778f10117c5df19c433bedad7991db8da8ae397', 'condition': 'checkout_src_internal', },
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index 88dfa4e..36ab1f5 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -274,6 +274,11 @@ const base::Feature kEmojiSuggestAddition{"EmojiSuggestAddition", base::FEATURE_ENABLED_BY_DEFAULT}; +// Enables the DNS proxy service providing support split and secure DNS +// for Chrome OS. +const base::Feature kEnableDnsProxy{"EnableDnsProxy", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Enables setting the device hostname. const base::Feature kEnableHostnameSetting{"EnableHostnameSetting", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -728,6 +733,10 @@ const base::Feature kWallpaperWebUI{"WallpaperWebUI", base::FEATURE_DISABLED_BY_DEFAULT}; +// Generates WebAPKs representing installed PWAs and installs them inside ARC. +const base::Feature kWebApkGenerator{"WebApkGenerator", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Controls whether to enable the syncing of deletes of Wi-Fi configurations. // This controls both sending delete events to the Chrome Sync server and // applying incoming deletes.
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h index 75cb656..6df875a 100644 --- a/ash/constants/ash_features.h +++ b/ash/constants/ash_features.h
@@ -130,6 +130,7 @@ COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kEcheSWAResizing; COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kEmojiSuggestAddition; +COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kEnableDnsProxy; COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kEnableHostnameSetting; COMPONENT_EXPORT(ASH_CONSTANTS) @@ -325,6 +326,8 @@ COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kWallpaperWebUI; COMPONENT_EXPORT(ASH_CONSTANTS) +extern const base::Feature kWebApkGenerator; +COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kWifiSyncAllowDeletes; COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kWifiSyncAndroid;
diff --git a/ash/content/shortcut_customization_ui/resources/BUILD.gn b/ash/content/shortcut_customization_ui/resources/BUILD.gn index 94286de..77989f6 100644 --- a/ash/content/shortcut_customization_ui/resources/BUILD.gn +++ b/ash/content/shortcut_customization_ui/resources/BUILD.gn
@@ -11,7 +11,10 @@ preprocessed_dir = "preprocessed" preprocessed_gen_manifest = "preprocessed_gen_manifest.json" -polymer_element_files = [ "shortcut_customization_app.js" ] +polymer_element_files = [ + "shortcut_customization_app.js", + "shortcut_input.js", +] generate_grd("build_grd") { input_files = [ @@ -33,6 +36,13 @@ js_library("shortcut_customization_app") { deps = [ + ":shortcut_input", + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + ] +} + +js_library("shortcut_input") { + deps = [ "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", ] }
diff --git a/ash/content/shortcut_customization_ui/resources/shortcut_customization_app.html b/ash/content/shortcut_customization_ui/resources/shortcut_customization_app.html index ce5bdd06..7127ca53 100644 --- a/ash/content/shortcut_customization_ui/resources/shortcut_customization_app.html +++ b/ash/content/shortcut_customization_ui/resources/shortcut_customization_app.html
@@ -1 +1,3 @@ -<div id="header"></div> \ No newline at end of file +<div id="header"></div> + +<shortcut-input></shortcut-input> \ No newline at end of file
diff --git a/ash/content/shortcut_customization_ui/resources/shortcut_customization_app.js b/ash/content/shortcut_customization_ui/resources/shortcut_customization_app.js index 9386928..97bcc70b 100644 --- a/ash/content/shortcut_customization_ui/resources/shortcut_customization_app.js +++ b/ash/content/shortcut_customization_ui/resources/shortcut_customization_app.js
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import './shortcut_input.js'; + import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; /**
diff --git a/ash/content/shortcut_customization_ui/resources/shortcut_input.html b/ash/content/shortcut_customization_ui/resources/shortcut_input.html new file mode 100644 index 0000000..a62b817 --- /dev/null +++ b/ash/content/shortcut_customization_ui/resources/shortcut_input.html
@@ -0,0 +1,5 @@ +<div> + <cr-input id="input" placeholder="Type text" + value="[[computeText_(shortcut_, pendingShortcut_)]]"> + </cr-input> +</div> \ No newline at end of file
diff --git a/ash/content/shortcut_customization_ui/resources/shortcut_input.js b/ash/content/shortcut_customization_ui/resources/shortcut_input.js new file mode 100644 index 0000000..cb600d8 --- /dev/null +++ b/ash/content/shortcut_customization_ui/resources/shortcut_input.js
@@ -0,0 +1,187 @@ +// Copyright 2021 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. + +import 'chrome://resources/cr_elements/cr_input/cr_input.m.js'; + +import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +const ModifierKeys = [ + /*Shift=*/16, + /*Alt=*/17, + /*Ctrl=*/18, + /*MetaLeft=*/91, + /*MetaRight=*/92, +] + +/** + * @fileoverview + * 'shortcut-input' is the shortcut input element that consumes user inputs and + * displays the shortcut. + */ +export class ShortcutInputElement extends PolymerElement { + static get is() { + return 'shortcut-input'; + } + + static get template() { + return html`{__html_template__}`; + } + + static get properties() { + return { + /** @private */ + shortcut_: { + type: String, + value: '', + }, + + /** @private */ + pendingShortcut_: { + type: String, + value: '', + }, + + /** @private */ + capturing_: { + type: Boolean, + value: false, + } + } + } + + ready() { + super.ready(); + this.addEventListener('keydown', this.onKeyDown_.bind(this)); + this.addEventListener('keyup', this.onKeyUp_.bind(this)); + this.addEventListener('focus', this.startCapture_.bind(this)); + this.addEventListener('mouseup', this.startCapture_.bind(this)); + this.addEventListener('blur', this.endCapture_.bind(this)); + } + + /** @private */ + startCapture_() { + if (this.capturing_) { + return; + } + this.pendingShortcut_ = ''; + this.shortcut_ = ''; + this.capturing_ = true; + } + + /** @private */ + endCapture_() { + if (!this.capturing_) { + return; + } + + this.capturing_ = false; + this.pendingShortcut_ = ''; + this.$.input.blur(); + } + + /** + * @param {!Event} e + * @private + */ + onKeyDown_(e) { + this.handleKey_(/** @type {!KeyboardEvent}*/ (e)); + } + + /** + * @param {!Event} e + * @private + */ + onKeyUp_(e) { + e.preventDefault(); + e.stopPropagation(); + + this.endCapture_(); + } + + /** + * @return {string} + * @private + */ + computeText_() { + const shortcutString = + this.capturing_ ? this.pendingShortcut_ : this.shortcut_; + return shortcutString.split('+').join(' + '); + } + + /** + * @param {!KeyboardEvent} e + * @private + */ + handleKey_(e) { + // While capturing, we prevent all events from bubbling, to prevent + // shortcuts from executing and interrupting the input capture. + e.preventDefault(); + e.stopPropagation(); + + if (!this.hasValidModifiers_(e)) { + this.pendingShortcut_ = ''; + return; + } + this.pendingShortcut_ = this.keystrokeToString_(e); + + this.shortcut_ = this.pendingShortcut_; + } + + /** + * Converts a keystroke event to string form. + * @param {!KeyboardEvent} e + * @return {string} The keystroke as a string. + * @private + */ + keystrokeToString_(e) { + const output = []; + if (e.metaKey) { + output.push('Search'); + } + if (e.ctrlKey) { + output.push('Ctrl'); + } + if (e.altKey) { + output.push('Alt'); + } + if (e.shiftKey) { + output.push('Shift'); + } + + // Only add non-modifier keys, otherwise we will double capture the modifier + // keys. + if (!this.isModifierKey_(e)) { + // TODO(jimmyxgong): update this to show only the DomKey. + // Displays in the format: (DomKey)(V-Key)(DomCode), e.g. + // ([)(219)(BracketLeft). + output.push('(' + e.key + ')' + '(' + e.keyCode + ')' + + '(' + e.code + ')'); + } + + return output.join('+'); + } + + /** + * Returns true if the event has valid modifiers. + * @param {!KeyboardEvent} e The keyboard event to consider. + * @return {boolean} True if the event is valid. + * @private + */ + hasValidModifiers_(e) { + // Although Shift is a modifier, it cannot be a standalone modifier for a + // shortcut. + return e.ctrlKey || e.altKey || e.metaKey; + } + + /** + * @param {!KeyboardEvent} e + * @return {boolean} + * @private + */ + isModifierKey_(e) { + return ModifierKeys.includes(e.keyCode); + } +} + +customElements.define(ShortcutInputElement.is, ShortcutInputElement); \ No newline at end of file
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 2b9c803..6e792779 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -4.20210427.1.1 +4.20210427.3.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 2b9c803..6e792779 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -4.20210427.1.1 +4.20210427.3.1
diff --git a/chrome/VERSION b/chrome/VERSION index e31e715..0b725993 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=92 MINOR=0 -BUILD=4491 +BUILD=4492 PATCH=0
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp index f7bc50e..13605c1 100644 --- a/chrome/app/os_settings_strings.grdp +++ b/chrome/app/os_settings_strings.grdp
@@ -378,22 +378,22 @@ <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_DESCRIPTION" desc="Description for the list of languages that support spell check, from which users can enable or disable spell check for."> Languages for spell check are based on your language preference </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_ADD_SPELL_CHECK_LANGUAGES_TITLE" translateable="false" desc="Title for the dialog that allows users to select new languages to add to their list of spell check languages."> + <message name="IDS_OS_SETTINGS_LANGUAGES_ADD_SPELL_CHECK_LANGUAGES_TITLE" desc="Title for the dialog that allows users to select new languages to add to their list of spell check languages."> Add spell check languages </message> <message name="IDS_OS_SETTINGS_LANGUAGES_SEARCH_SPELL_CHECK_LANGUAGES_LABEL" desc="Placeholder in the input field to search spell check languages."> Search languages </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_SUGGESTED_SPELL_CHECK_LANGUAGES_LABEL" translateable="false" desc="Title of the list of spell check languages suggested to users."> + <message name="IDS_OS_SETTINGS_LANGUAGES_SUGGESTED_SPELL_CHECK_LANGUAGES_LABEL" desc="Title of the list of spell check languages suggested to users."> Suggested </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_ALL_SPELL_CHECK_LANGUAGES_LABEL" translateable="false" desc="Title of the list of all spell check languages."> + <message name="IDS_OS_SETTINGS_LANGUAGES_ALL_SPELL_CHECK_LANGUAGES_LABEL" desc="Title of the list of all spell check languages."> All languages </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGE_NOT_ALLOWED" translateable="false" desc="Tooltip for policy icon when a spell check language is not allowed."> - Your administrator doesn't allow this spell check language + <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGE_NOT_ALLOWED" desc="Tooltip for policy icon when a spell check language is not allowed."> + Your administrator doesn't allow this language </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_REMOVE_SPELL_CHECK_LANGUAGE_TOOLTIP" translateable="false" desc="Tooltip of the button that lets the user remove a given spell check language."> + <message name="IDS_OS_SETTINGS_LANGUAGES_REMOVE_SPELL_CHECK_LANGUAGE_TOOLTIP" desc="Tooltip of the button that lets the user remove a given spell check language."> Remove <ph name="LANGUAGE_NAME">$1<ex>English (United States)</ex></ph> </message> <message name="IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED" desc="Error message when spell check dictionary download fails.">
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_SPELL_CHECK_LANGUAGES_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_SPELL_CHECK_LANGUAGES_TITLE.png.sha1 new file mode 100644 index 0000000..d9c4c8b --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_SPELL_CHECK_LANGUAGES_TITLE.png.sha1
@@ -0,0 +1 @@ +ad72e9a47bdbdb2a1f5a11fc269b444eca6eca8b \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ALL_SPELL_CHECK_LANGUAGES_LABEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ALL_SPELL_CHECK_LANGUAGES_LABEL.png.sha1 new file mode 100644 index 0000000..d9c4c8b --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ALL_SPELL_CHECK_LANGUAGES_LABEL.png.sha1
@@ -0,0 +1 @@ +ad72e9a47bdbdb2a1f5a11fc269b444eca6eca8b \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_REMOVE_SPELL_CHECK_LANGUAGE_TOOLTIP.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_REMOVE_SPELL_CHECK_LANGUAGE_TOOLTIP.png.sha1 new file mode 100644 index 0000000..eebd234 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_REMOVE_SPELL_CHECK_LANGUAGE_TOOLTIP.png.sha1
@@ -0,0 +1 @@ +94c09a639973706ba23a170d3ca5b5e98ae299eb \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGE_NOT_ALLOWED.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGE_NOT_ALLOWED.png.sha1 new file mode 100644 index 0000000..8cff188 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGE_NOT_ALLOWED.png.sha1
@@ -0,0 +1 @@ +67458cd0ba09bd39b00cb89136652f24dba08fb5 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SUGGESTED_SPELL_CHECK_LANGUAGES_LABEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SUGGESTED_SPELL_CHECK_LANGUAGES_LABEL.png.sha1 new file mode 100644 index 0000000..d9c4c8b --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SUGGESTED_SPELL_CHECK_LANGUAGES_LABEL.png.sha1
@@ -0,0 +1 @@ +ad72e9a47bdbdb2a1f5a11fc269b444eca6eca8b \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index c156512..708422e 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -3570,6 +3570,8 @@ "enterprise/connectors/file_system/box_api_call_endpoints.h", "enterprise/connectors/file_system/box_api_call_flow.cc", "enterprise/connectors/file_system/box_api_call_flow.h", + "enterprise/connectors/file_system/box_upload_file_chunks_handler.cc", + "enterprise/connectors/file_system/box_upload_file_chunks_handler.h", "enterprise/connectors/file_system/box_uploader.cc", "enterprise/connectors/file_system/box_uploader.h", "enterprise/connectors/file_system/rename_handler.cc", @@ -4254,6 +4256,8 @@ "apps/app_service/app_notifications.h", "apps/app_service/app_platform_metrics.cc", "apps/app_service/app_platform_metrics.h", + "apps/app_service/app_platform_metrics_service.cc", + "apps/app_service/app_platform_metrics_service.h", "apps/app_service/app_service_proxy_chromeos.cc", "apps/app_service/app_service_proxy_chromeos.h", "apps/app_service/app_shortcut_item.cc", @@ -4298,6 +4302,8 @@ "apps/app_service/publishers/web_apps_crosapi_factory.h", "apps/app_service/uninstall_dialog.cc", "apps/app_service/uninstall_dialog.h", + "apps/app_service/webapk/webapk_manager.cc", + "apps/app_service/webapk/webapk_manager.h", "apps/icon_standardizer.cc", "apps/icon_standardizer.h", "browser_process_platform_part_chromeos.cc", @@ -5942,6 +5948,8 @@ "offline_pages/offline_page_mhtml_archiver.cc", "offline_pages/offline_page_mhtml_archiver.h", "offline_pages/offline_page_model_factory.h", + "offline_pages/offline_page_navigation_throttle.cc", + "offline_pages/offline_page_navigation_throttle.h", "offline_pages/offline_page_origin_utils.h", "offline_pages/offline_page_request_handler.cc", "offline_pages/offline_page_request_handler.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 9b695ea..5ccb93a 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -2997,6 +2997,9 @@ flag_descriptions::kEnableHardwareMirrorModeName, flag_descriptions::kEnableHardwareMirrorModeDescription, kOsCrOS, FEATURE_VALUE_TYPE(display::features::kEnableHardwareMirrorMode)}, + {"enable-dns-proxy", flag_descriptions::kEnableDnsProxyName, + flag_descriptions::kEnableDnsProxyDescription, kOsCrOS, + FEATURE_VALUE_TYPE(ash::features::kEnableDnsProxy)}, {"instant-tethering", flag_descriptions::kTetherName, flag_descriptions::kTetherDescription, kOsCrOS, FEATURE_VALUE_TYPE(chromeos::features::kInstantTethering)}, @@ -4895,6 +4898,11 @@ kTabGridLayoutAndroidVariations, "TabGridLayoutAndroid")}, + {"enable-commerce-merchant-viewer", + flag_descriptions::kCommerceMerchantViewerAndroidName, + flag_descriptions::kCommerceMerchantViewerAndroidDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kCommerceMerchantViewer)}, + {"enable-tab-groups", flag_descriptions::kTabGroupsAndroidName, flag_descriptions::kTabGroupsAndroidDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kTabGroupsAndroid)},
diff --git a/chrome/browser/apps/app_service/app_platform_metrics_service.cc b/chrome/browser/apps/app_service/app_platform_metrics_service.cc new file mode 100644 index 0000000..e4a3f8f --- /dev/null +++ b/chrome/browser/apps/app_service/app_platform_metrics_service.cc
@@ -0,0 +1,80 @@ +// Copyright 2021 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/apps/app_service/app_platform_metrics_service.h" + +#include "base/time/time.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/pref_names.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/pref_service.h" + +namespace apps { + +namespace { + +constexpr base::TimeDelta kTimerInterval = base::TimeDelta::FromMinutes(10); + +// Returns the number of days since the origin. +int GetDayId(base::Time time) { + return time.LocalMidnight().since_origin().InDaysFloored(); +} + +} // namespace + +const char kAppPlatformMetricsDayId[] = "app_platform_metrics.day_id"; + +AppPlatformMetricsService::AppPlatformMetricsService(Profile* profile) + : profile_(profile) { + DCHECK(profile_); +} + +AppPlatformMetricsService::~AppPlatformMetricsService() { + observers_.Clear(); + timer_.Stop(); +} + +// static +void AppPlatformMetricsService::RegisterProfilePrefs( + PrefRegistrySimple* registry) { + registry->RegisterIntegerPref(kAppPlatformMetricsDayId, 0); +} + +// static +int AppPlatformMetricsService::GetDayIdForTesting(base::Time time) { + return GetDayId(time); +} + +void AppPlatformMetricsService::Start() { + day_id_ = profile_->GetPrefs()->GetInteger(kAppPlatformMetricsDayId); + CheckForNewDay(); + + // Check for a new day every |kTimerInterval| as well. + timer_.Start(FROM_HERE, kTimerInterval, this, + &AppPlatformMetricsService::CheckForNewDay); +} + +void AppPlatformMetricsService::AddObserver(Observer* observer) { + observers_.AddObserver(observer); +} + +void AppPlatformMetricsService::RemoveObserver(Observer* observer) { + observers_.RemoveObserver(observer); +} + +void AppPlatformMetricsService::CheckForNewDay() { + base::Time now = base::Time::Now(); + + // The OnNewDay() event can fire sooner or later than 24 hours due to clock or + // time zone changes. + if (day_id_ < GetDayId(now)) { + day_id_ = GetDayId(now); + for (Observer& observer : observers_) { + observer.OnNewDay(); + } + profile_->GetPrefs()->SetInteger(kAppPlatformMetricsDayId, day_id_); + } +} + +} // namespace apps
diff --git a/chrome/browser/apps/app_service/app_platform_metrics_service.h b/chrome/browser/apps/app_service/app_platform_metrics_service.h new file mode 100644 index 0000000..aa7396a --- /dev/null +++ b/chrome/browser/apps/app_service/app_platform_metrics_service.h
@@ -0,0 +1,62 @@ +// Copyright 2021 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_APPS_APP_SERVICE_APP_PLATFORM_METRICS_SERVICE_H_ +#define CHROME_BROWSER_APPS_APP_SERVICE_APP_PLATFORM_METRICS_SERVICE_H_ + +#include "base/observer_list.h" +#include "base/timer/timer.h" +#include "chrome/browser/profiles/profile.h" + +class PrefRegistrySimple; + +namespace apps { + +extern const char kAppPlatformMetricsDayId[]; + +// Service to initialize and control app platform metric recorders per day in +// Chrome OS. +class AppPlatformMetricsService { + public: + // Interface for observing events on the AppPlatformMetricsService. + class Observer : public base::CheckedObserver { + public: + // Called when we detect a new day. + virtual void OnNewDay() {} + }; + + explicit AppPlatformMetricsService(Profile* profile); + AppPlatformMetricsService(const AppPlatformMetricsService&) = delete; + AppPlatformMetricsService& operator=(const AppPlatformMetricsService&) = + delete; + ~AppPlatformMetricsService(); + + static void RegisterProfilePrefs(PrefRegistrySimple* registry); + + // Returns the day id for a given time for testing. + static int GetDayIdForTesting(base::Time time); + + // Start the timer and check if a new day has arrived. + void Start(); + + void AddObserver(Observer* observer); + void RemoveObserver(Observer* observer); + + private: + // Helper function to check if a new day has arrived. + void CheckForNewDay(); + + Profile* profile_; + + int day_id_; + + // A periodic timer that checks if a new day has arrived. + base::RepeatingTimer timer_; + + base::ObserverList<Observer> observers_; +}; + +} // namespace apps + +#endif // CHROME_BROWSER_APPS_APP_SERVICE_APP_PLATFORM_METRICS_SERVICE_H_
diff --git a/chrome/browser/apps/app_service/app_platform_metrics_service_unittest.cc b/chrome/browser/apps/app_service/app_platform_metrics_service_unittest.cc new file mode 100644 index 0000000..ff3b3f9e4 --- /dev/null +++ b/chrome/browser/apps/app_service/app_platform_metrics_service_unittest.cc
@@ -0,0 +1,123 @@ +// Copyright 2021 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/apps/app_service/app_platform_metrics_service.h" + +#include <memory> + +#include "base/time/time.h" +#include "chrome/test/base/testing_profile.h" +#include "chromeos/dbus/power/fake_power_manager_client.h" +#include "chromeos/dbus/power_manager/idle.pb.h" +#include "chromeos/dbus/power_manager/suspend.pb.h" +#include "components/sync_preferences/testing_pref_service_syncable.h" +#include "content/public/test/browser_task_environment.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace apps { + +namespace { + +constexpr char kStartTime[] = "1 Jan 2021 21:00"; + +void SetScreenOff(bool is_screen_off) { + power_manager::ScreenIdleState screen_idle_state; + screen_idle_state.set_off(is_screen_off); + chromeos::FakePowerManagerClient::Get()->SendScreenIdleStateChanged( + screen_idle_state); +} + +void SetSuspendImminent() { + chromeos::FakePowerManagerClient::Get()->SendSuspendImminent( + power_manager::SuspendImminent_Reason_OTHER); +} + +} // namespace + +class AppPlatformMetricsServiceTestObserver + : public AppPlatformMetricsService::Observer { + public: + MOCK_METHOD(void, OnNewDay, (), (override)); +}; + +// Tests for family user metrics service. +class AppPlatformMetricsServiceTest : public testing::Test { + public: + void SetUp() override { + base::Time start_time; + EXPECT_TRUE(base::Time::FromString(kStartTime, &start_time)); + base::TimeDelta forward_by = start_time - base::Time::Now(); + EXPECT_LT(base::TimeDelta(), forward_by); + task_environment_.AdvanceClock(forward_by); + + chromeos::PowerManagerClient::InitializeFake(); + app_platform_metrics_service_ = + std::make_unique<AppPlatformMetricsService>(&testing_profile_); + + app_platform_metrics_service_->AddObserver(&mock_observer_); + app_platform_metrics_service_->Start(); + } + + void TearDown() override { + app_platform_metrics_service_.reset(); + chromeos::PowerManagerClient::Shutdown(); + } + + protected: + sync_preferences::TestingPrefServiceSyncable* GetPrefService() { + return testing_profile_.GetTestingPrefService(); + } + + int GetDayIdPref() { + return GetPrefService()->GetInteger(kAppPlatformMetricsDayId); + } + + content::BrowserTaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; + + AppPlatformMetricsServiceTestObserver mock_observer_; + + private: + TestingProfile testing_profile_; + std::unique_ptr<AppPlatformMetricsService> app_platform_metrics_service_; +}; + +// Tests OnNewDay() is called after more than one day passes. +TEST_F(AppPlatformMetricsServiceTest, MoreThanOneDay) { + EXPECT_CALL(mock_observer_, OnNewDay()).Times(1); + task_environment_.FastForwardBy(base::TimeDelta::FromDays(1) + + base::TimeDelta::FromHours(1)); + EXPECT_EQ(AppPlatformMetricsService::GetDayIdForTesting(base::Time::Now()), + GetDayIdPref()); +} + +// Tests OnNewDay() is called at midnight. +TEST_F(AppPlatformMetricsServiceTest, UntilMidnight) { + EXPECT_CALL(mock_observer_, OnNewDay()).Times(1); + task_environment_.FastForwardBy(base::TimeDelta::FromHours(3)); + EXPECT_EQ(AppPlatformMetricsService::GetDayIdForTesting(base::Time::Now()), + GetDayIdPref()); +} + +// Tests OnNewDay() is not called before midnight. +TEST_F(AppPlatformMetricsServiceTest, LessThanOneDay) { + EXPECT_CALL(mock_observer_, OnNewDay()).Times(0); + task_environment_.FastForwardBy(base::TimeDelta::FromHours(1)); + EXPECT_EQ(AppPlatformMetricsService::GetDayIdForTesting(base::Time::Now()), + GetDayIdPref()); +} + +// Tests OnNewDay() is called after one day passes, even when the device is +// idle. +TEST_F(AppPlatformMetricsServiceTest, MoreThanOneDayDeviceIdle) { + EXPECT_CALL(mock_observer_, OnNewDay()).Times(1); + SetScreenOff(true); + SetSuspendImminent(); + task_environment_.FastForwardBy(base::TimeDelta::FromDays(1)); + EXPECT_EQ(AppPlatformMetricsService::GetDayIdForTesting(base::Time::Now()), + GetDayIdPref()); +} + +} // namespace apps
diff --git a/chrome/browser/apps/app_service/app_service_proxy_base.cc b/chrome/browser/apps/app_service/app_service_proxy_base.cc index 05d25b9..ec72be7 100644 --- a/chrome/browser/apps/app_service/app_service_proxy_base.cc +++ b/chrome/browser/apps/app_service/app_service_proxy_base.cc
@@ -450,6 +450,14 @@ void AppServiceProxyBase::OnApps(std::vector<apps::mojom::AppPtr> deltas, apps::mojom::AppType app_type, bool should_notify_initialized) { + if (app_service_.is_connected()) { + for (const auto& delta : deltas) { + if (delta->readiness == apps::mojom::Readiness::kUninstalledByUser) { + app_service_->RemovePreferredApp(delta->app_type, delta->app_id); + } + } + } + app_registry_cache_.OnApps(std::move(deltas), app_type, should_notify_initialized); }
diff --git a/chrome/browser/apps/app_service/app_service_proxy_chromeos.cc b/chrome/browser/apps/app_service/app_service_proxy_chromeos.cc index 09e51df8..d97bc0f8 100644 --- a/chrome/browser/apps/app_service/app_service_proxy_chromeos.cc +++ b/chrome/browser/apps/app_service/app_service_proxy_chromeos.cc
@@ -97,6 +97,15 @@ web_apps_ = std::make_unique<WebAppsChromeOs>(app_service_, profile_, &instance_registry_); + if (!profile_->AsTestingProfile()) { + app_platform_metrics_service_ = + std::make_unique<AppPlatformMetricsService>(profile_); + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(&AppServiceProxyChromeOs::InitAppPlatformMetrics, + weak_ptr_factory_.GetWeakPtr())); + } + // Asynchronously add app icon source, so we don't do too much work in the // constructor. base::ThreadTaskRunnerHandle::Get()->PostTask( @@ -230,6 +239,8 @@ } void AppServiceProxyChromeOs::Shutdown() { + app_platform_metrics_service_.reset(); + uninstall_dialogs_.clear(); if (app_service_.is_connected()) { @@ -441,6 +452,12 @@ RecordAppLaunchMetrics(profile, update, launch_source, container); } +void AppServiceProxyChromeOs::InitAppPlatformMetrics() { + if (app_platform_metrics_service_) { + app_platform_metrics_service_->Start(); + } +} + ScopedOmitBuiltInAppsForTesting::ScopedOmitBuiltInAppsForTesting() : previous_omit_built_in_apps_for_testing_( g_omit_built_in_apps_for_testing_) {
diff --git a/chrome/browser/apps/app_service/app_service_proxy_chromeos.h b/chrome/browser/apps/app_service/app_service_proxy_chromeos.h index 8d054c92..9b81e6dc 100644 --- a/chrome/browser/apps/app_service/app_service_proxy_chromeos.h +++ b/chrome/browser/apps/app_service/app_service_proxy_chromeos.h
@@ -8,6 +8,7 @@ #include <map> #include <set> +#include "chrome/browser/apps/app_service/app_platform_metrics_service.h" #include "chrome/browser/apps/app_service/app_service_proxy_base.h" #include "chrome/browser/apps/app_service/publishers/borealis_apps.h" #include "chrome/browser/apps/app_service/publishers/built_in_chromeos_apps.h" @@ -147,6 +148,8 @@ apps::mojom::LaunchSource launch_source, apps::mojom::LaunchContainer container) override; + void InitAppPlatformMetrics(); + std::unique_ptr<BuiltInChromeOsApps> built_in_chrome_os_apps_; std::unique_ptr<CrostiniApps> crostini_apps_; std::unique_ptr<ExtensionAppsChromeOs> extension_apps_; @@ -168,6 +171,8 @@ UninstallDialogs uninstall_dialogs_; + std::unique_ptr<AppPlatformMetricsService> app_platform_metrics_service_; + base::WeakPtrFactory<AppServiceProxyChromeOs> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/apps/app_service/publishers/arc_apps.cc b/chrome/browser/apps/app_service/publishers/arc_apps.cc index 4dee66b..d846f0d 100644 --- a/chrome/browser/apps/app_service/publishers/arc_apps.cc +++ b/chrome/browser/apps/app_service/publishers/arc_apps.cc
@@ -7,6 +7,7 @@ #include <algorithm> #include <utility> +#include "ash/constants/ash_features.h" #include "ash/public/cpp/app_menu_constants.h" #include "ash/public/cpp/ash_features.h" #include "base/bind.h" @@ -27,6 +28,7 @@ #include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/apps/app_service/menu_util.h" #include "chrome/browser/apps/app_service/publishers/arc_apps_factory.h" +#include "chrome/browser/apps/app_service/webapk/webapk_manager.h" #include "chrome/browser/ash/arc/arc_util.h" #include "chrome/browser/ash/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/file_manager/path_util.h" @@ -530,6 +532,10 @@ instance_registry_observer_.Add(instance_registry); } + if (base::FeatureList::IsEnabled(ash::features::kWebApkGenerator)) { + web_apk_manager_ = std::make_unique<apps::WebApkManager>(profile_); + } + PublisherBase::Initialize(app_service, apps::mojom::AppType::kArc); } @@ -1008,13 +1014,6 @@ app->app_id = app_id; app->readiness = apps::mojom::Readiness::kUninstalledByUser; Publish(std::move(app), subscribers_); - - mojo::Remote<apps::mojom::AppService>& app_service = - apps::AppServiceProxyFactory::GetForProfile(profile_)->AppService(); - if (!app_service.is_bound()) { - return; - } - app_service->RemovePreferredApp(apps::mojom::AppType::kArc, app_id); } void ArcApps::OnAppIconUpdated(const std::string& app_id,
diff --git a/chrome/browser/apps/app_service/publishers/arc_apps.h b/chrome/browser/apps/app_service/publishers/arc_apps.h index 64c0af37..fa974d8 100644 --- a/chrome/browser/apps/app_service/publishers/arc_apps.h +++ b/chrome/browser/apps/app_service/publishers/arc_apps.h
@@ -41,6 +41,7 @@ namespace apps { class AppServiceProxyChromeOs; +class WebApkManager; // An app publisher (in the App Service sense) of ARC++ apps, // @@ -215,6 +216,8 @@ // Handles requesting app shortcuts from Android. std::unique_ptr<arc::ArcAppShortcutsRequest> arc_app_shortcuts_request_; + std::unique_ptr<apps::WebApkManager> web_apk_manager_; + ScopedObserver<arc::ArcIntentHelperBridge, arc::ArcIntentHelperObserver> arc_intent_helper_observer_{this};
diff --git a/chrome/browser/apps/app_service/publishers/extension_apps_base.cc b/chrome/browser/apps/app_service/publishers/extension_apps_base.cc index 695db316..8d3bbefc 100644 --- a/chrome/browser/apps/app_service/publishers/extension_apps_base.cc +++ b/chrome/browser/apps/app_service/publishers/extension_apps_base.cc
@@ -218,12 +218,6 @@ SetShowInFields(app, extension); Publish(std::move(app), subscribers_); - - if (!app_service_) { - return; - } - app_service_->RemovePreferredApp(apps::mojom::AppType::kExtension, - extension->id()); } void ExtensionAppsBase::SetShowInFields(
diff --git a/chrome/browser/apps/app_service/publishers/web_apps_base.cc b/chrome/browser/apps/app_service/publishers/web_apps_base.cc index 4234da96..80b4740 100644 --- a/chrome/browser/apps/app_service/publishers/web_apps_base.cc +++ b/chrome/browser/apps/app_service/publishers/web_apps_base.cc
@@ -127,10 +127,6 @@ SetShowInFields(app, web_app); Publish(std::move(app), subscribers_); - - if (app_service_) { - app_service_->RemovePreferredApp(app_type_, web_app->app_id()); - } } apps::mojom::AppPtr WebAppsBase::ConvertImpl(const web_app::WebApp* web_app,
diff --git a/chrome/browser/apps/app_service/webapk/OWNERS b/chrome/browser/apps/app_service/webapk/OWNERS new file mode 100644 index 0000000..b0baa268 --- /dev/null +++ b/chrome/browser/apps/app_service/webapk/OWNERS
@@ -0,0 +1 @@ +tsergeant@chromium.org
diff --git a/chrome/browser/apps/app_service/webapk/webapk_manager.cc b/chrome/browser/apps/app_service/webapk/webapk_manager.cc new file mode 100644 index 0000000..8607b10 --- /dev/null +++ b/chrome/browser/apps/app_service/webapk/webapk_manager.cc
@@ -0,0 +1,81 @@ +// Copyright 2021 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/apps/app_service/webapk/webapk_manager.h" + +#include <memory> + +#include "base/check.h" +#include "base/logging.h" +#include "chrome/browser/apps/app_service/app_service_proxy.h" +#include "chrome/browser/apps/app_service/app_service_proxy_factory.h" +#include "chrome/browser/ash/apps/apk_web_app_service.h" +#include "chrome/browser/ash/apps/apk_web_app_service_factory.h" +#include "chrome/browser/web_applications/components/app_registrar.h" +#include "chrome/browser/web_applications/components/web_app_provider_base.h" +#include "components/arc/mojom/intent_helper.mojom.h" +#include "components/services/app_service/public/mojom/types.mojom-shared.h" + +namespace apps { + +WebApkManager::WebApkManager(Profile* profile) + : profile_(profile), + web_app_registrar_( + web_app::WebAppProviderBase::GetProviderBase(profile)->registrar()) { + proxy_ = apps::AppServiceProxyFactory::GetForProfile(profile); + apk_service_ = ash::ApkWebAppServiceFactory::GetForProfile(profile_); + DCHECK(apk_service_); + + Observe(&proxy_->AppRegistryCache()); +} + +WebApkManager::~WebApkManager() = default; + +void WebApkManager::OnAppUpdate(const AppUpdate& update) { + // TODO(crbug.com/1198433): Observe new installations and updates. +} + +void WebApkManager::OnAppTypeInitialized(apps::mojom::AppType type) { + if (type == apps::mojom::AppType::kWeb) { + proxy_->AppRegistryCache().ForEachApp( + [this](const apps::AppUpdate& update) { + if (IsAppEligibleForWebApk(update)) { + QueueInstall(update); + } + }); + } +} + +void WebApkManager::OnAppRegistryCacheWillBeDestroyed( + apps::AppRegistryCache* cache) { + Observe(nullptr); +} + +bool WebApkManager::IsAppEligibleForWebApk(const apps::AppUpdate& app) { + if (app.AppType() != apps::mojom::AppType::kWeb) { + return false; + } + + if (app.InstallSource() == apps::mojom::InstallSource::kSystem) { + return false; + } + + if (apk_service_->IsWebAppInstalledFromArc(app.AppId())) { + return false; + } + + if (!(web_app_registrar_.IsInstalled(app.AppId()) && + web_app_registrar_.GetAppShareTarget(app.AppId()))) { + return false; + } + + return true; +} + +void WebApkManager::QueueInstall(const apps::AppUpdate& update) { + // TODO(crbug.com/1198433): Actually queue the install. + VLOG(1) << "Queueing WebAPK install for app: " << update.AppId(); +} + +} // namespace apps
diff --git a/chrome/browser/apps/app_service/webapk/webapk_manager.h b/chrome/browser/apps/app_service/webapk/webapk_manager.h new file mode 100644 index 0000000..9802f0e --- /dev/null +++ b/chrome/browser/apps/app_service/webapk/webapk_manager.h
@@ -0,0 +1,48 @@ +// Copyright 2021 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_APPS_APP_SERVICE_WEBAPK_WEBAPK_MANAGER_H_ +#define CHROME_BROWSER_APPS_APP_SERVICE_WEBAPK_WEBAPK_MANAGER_H_ + +#include "chrome/browser/web_applications/components/app_registrar.h" +#include "components/arc/mojom/intent_helper.mojom-forward.h" +#include "components/services/app_service/public/cpp/app_registry_cache.h" + +class Profile; + +namespace ash { +class ApkWebAppService; +} + +namespace apps { + +class AppServiceProxyBase; + +class WebApkManager : public apps::AppRegistryCache::Observer { + public: + explicit WebApkManager(Profile* profile); + ~WebApkManager() override; + + WebApkManager(const WebApkManager&) = delete; + WebApkManager& operator=(const WebApkManager&) = delete; + + // AppRegistryCache::Observer overrides: + void OnAppUpdate(const AppUpdate& update) override; + void OnAppTypeInitialized(apps::mojom::AppType type) override; + void OnAppRegistryCacheWillBeDestroyed( + apps::AppRegistryCache* cache) override; + + private: + bool IsAppEligibleForWebApk(const apps::AppUpdate& app); + void QueueInstall(const AppUpdate& update); + + Profile* profile_; + apps::AppServiceProxyBase* proxy_; + ash::ApkWebAppService* apk_service_; + web_app::AppRegistrar& web_app_registrar_; +}; + +} // namespace apps + +#endif // CHROME_BROWSER_APPS_APP_SERVICE_WEBAPK_WEBAPK_MANAGER_H_
diff --git a/chrome/browser/chromeos/kerberos/DIR_METADATA b/chrome/browser/ash/kerberos/DIR_METADATA similarity index 100% rename from chrome/browser/chromeos/kerberos/DIR_METADATA rename to chrome/browser/ash/kerberos/DIR_METADATA
diff --git a/chrome/browser/chromeos/kerberos/OWNERS b/chrome/browser/ash/kerberos/OWNERS similarity index 100% rename from chrome/browser/chromeos/kerberos/OWNERS rename to chrome/browser/ash/kerberos/OWNERS
diff --git a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager.cc b/chrome/browser/ash/kerberos/kerberos_credentials_manager.cc similarity index 99% rename from chrome/browser/chromeos/kerberos/kerberos_credentials_manager.cc rename to chrome/browser/ash/kerberos/kerberos_credentials_manager.cc index 7c4fd570..aaceb7d6 100644 --- a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager.cc +++ b/chrome/browser/ash/kerberos/kerberos_credentials_manager.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" #include <vector> @@ -12,9 +12,9 @@ #include "base/strings/string_util.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/ash/authpolicy/data_pipe_utils.h" +#include "chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification.h" #include "chrome/browser/ash/login/session/user_session_manager.h" #include "chrome/browser/ash/profiles/profile_helper.h" -#include "chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification.h" #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/chrome_pages.h"
diff --git a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h b/chrome/browser/ash/kerberos/kerberos_credentials_manager.h similarity index 97% rename from chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h rename to chrome/browser/ash/kerberos/kerberos_credentials_manager.h index ddb9c278..a688fdc9 100644 --- a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h +++ b/chrome/browser/ash/kerberos/kerberos_credentials_manager.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_H_ -#define CHROME_BROWSER_CHROMEOS_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_H_ +#ifndef CHROME_BROWSER_ASH_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_H_ +#define CHROME_BROWSER_ASH_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_H_ #include <string> #include <vector> @@ -305,4 +305,4 @@ } // namespace chromeos -#endif // CHROME_BROWSER_CHROMEOS_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_H_ +#endif // CHROME_BROWSER_ASH_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_H_
diff --git a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.cc b/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.cc similarity index 95% rename from chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.cc rename to chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.cc index 4e16483..a3649599 100644 --- a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.cc +++ b/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.cc
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h" #include <memory> #include <utility> #include "base/memory/singleton.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/profiles/profile.h" #include "components/keyed_service/content/browser_context_dependency_manager.h"
diff --git a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h b/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h similarity index 91% rename from chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h rename to chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h index e5f6767..3c4c1d8 100644 --- a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h +++ b/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_FACTORY_H_ -#define CHROME_BROWSER_CHROMEOS_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_FACTORY_H_ +#ifndef CHROME_BROWSER_ASH_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_FACTORY_H_ +#define CHROME_BROWSER_ASH_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_FACTORY_H_ #include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "components/keyed_service/core/keyed_service.h" @@ -72,4 +72,4 @@ } // namespace chromeos -#endif // CHROME_BROWSER_CHROMEOS_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_FACTORY_H_ +#endif // CHROME_BROWSER_ASH_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_FACTORY_H_
diff --git a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory_browsertest.cc b/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory_browsertest.cc similarity index 94% rename from chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory_browsertest.cc rename to chrome/browser/ash/kerberos/kerberos_credentials_manager_factory_browsertest.cc index ca977038..f041e58 100644 --- a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory_browsertest.cc +++ b/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory_browsertest.cc
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h" #include <memory> #include "ash/constants/ash_switches.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/ash/profiles/profile_helper.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager_test.cc b/chrome/browser/ash/kerberos/kerberos_credentials_manager_test.cc similarity index 99% rename from chrome/browser/chromeos/kerberos/kerberos_credentials_manager_test.cc rename to chrome/browser/ash/kerberos/kerberos_credentials_manager_test.cc index 0fe2877..aae1502 100644 --- a/chrome/browser/chromeos/kerberos/kerberos_credentials_manager_test.cc +++ b/chrome/browser/ash/kerberos/kerberos_credentials_manager_test.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" #include <memory> #include <set> @@ -1344,7 +1344,7 @@ // KerberosCredentialsManager, UpdateAccountsFromPref is called. // // See also -// https://analysis.chromium.org/p/chromium/coverage/dir?host=chromium.googlesource.com&project=chromium/src&ref=refs/heads/master&revision=8e25360b5986bc807eb05927b59cb698b120140c&path=//chrome/browser/chromeos/kerberos/&platform=linux-chromeos +// https://analysis.chromium.org/p/chromium/coverage/dir?host=chromium.googlesource.com&project=chromium/src&ref=refs/heads/master&revision=8e25360b5986bc807eb05927b59cb698b120140c&path=//chrome/browser/ash/kerberos/&platform=linux-chromeos // for code coverage (try to get as high as possible!). } // namespace chromeos
diff --git a/chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification.cc b/chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification.cc similarity index 97% rename from chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification.cc rename to chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification.cc index f45329f2..f400e3b 100644 --- a/chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification.cc +++ b/chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification.h" +#include "chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification.h" #include <string>
diff --git a/chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification.h b/chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification.h similarity index 78% rename from chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification.h rename to chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification.h index b6e698d..42af2ecb 100644 --- a/chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification.h +++ b/chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_KERBEROS_KERBEROS_TICKET_EXPIRY_NOTIFICATION_H_ -#define CHROME_BROWSER_CHROMEOS_KERBEROS_KERBEROS_TICKET_EXPIRY_NOTIFICATION_H_ +#ifndef CHROME_BROWSER_ASH_KERBEROS_KERBEROS_TICKET_EXPIRY_NOTIFICATION_H_ +#define CHROME_BROWSER_ASH_KERBEROS_KERBEROS_TICKET_EXPIRY_NOTIFICATION_H_ #include <string> @@ -30,4 +30,4 @@ } // namespace kerberos_ticket_expiry_notification } // namespace chromeos -#endif // CHROME_BROWSER_CHROMEOS_KERBEROS_KERBEROS_TICKET_EXPIRY_NOTIFICATION_H_ +#endif // CHROME_BROWSER_ASH_KERBEROS_KERBEROS_TICKET_EXPIRY_NOTIFICATION_H_
diff --git a/chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification_test.cc b/chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification_test.cc similarity index 96% rename from chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification_test.cc rename to chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification_test.cc index 2dfb356..09db86c 100644 --- a/chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification_test.cc +++ b/chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification_test.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/kerberos/kerberos_ticket_expiry_notification.h" +#include "chrome/browser/ash/kerberos/kerberos_ticket_expiry_notification.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/notifications/notification_display_service_impl.h"
diff --git a/chrome/browser/ash/login/session/user_session_manager.cc b/chrome/browser/ash/login/session/user_session_manager.cc index 25bfe602..259e46a 100644 --- a/chrome/browser/ash/login/session/user_session_manager.cc +++ b/chrome/browser/ash/login/session/user_session_manager.cc
@@ -73,6 +73,7 @@ #include "chrome/browser/ash/settings/owner_flags_storage.h" #include "chrome/browser/ash/sync/os_sync_util.h" #include "chrome/browser/ash/sync/turn_sync_on_helper.h" +#include "chrome/browser/ash/web_applications/help_app/help_app_notification_controller.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process_platform_part_chromeos.h" #include "chrome/browser/chrome_notification_types.h" @@ -1795,8 +1796,8 @@ // Show legacy U2F notification if applicable. MaybeShowU2FNotification(); - // Show Release Notes notification if applicable. - MaybeShowReleaseNotesNotification(profile); + // Show a Help app notification if applicable. + MaybeShowHelpAppNotification(profile); g_browser_process->platform_part() ->browser_policy_connector_chromeos() @@ -2205,7 +2206,7 @@ token_observers_.clear(); always_on_vpn_manager_.reset(); u2f_notification_.reset(); - release_notes_notification_.reset(); + help_app_notification_controller_.reset(); password_service_voted_.reset(); password_was_saved_ = false; secure_dns_manager_.reset(); @@ -2246,13 +2247,13 @@ } } -void UserSessionManager::MaybeShowReleaseNotesNotification(Profile* profile) { +void UserSessionManager::MaybeShowHelpAppNotification(Profile* profile) { if (!ProfileHelper::IsPrimaryProfile(profile)) return; - if (!release_notes_notification_) { - release_notes_notification_ = - std::make_unique<ReleaseNotesNotification>(profile); - release_notes_notification_->MaybeShowReleaseNotes(); + if (!help_app_notification_controller_) { + help_app_notification_controller_ = + std::make_unique<HelpAppNotificationController>(profile); + help_app_notification_controller_->MaybeShowNotification(); } }
diff --git a/chrome/browser/ash/login/session/user_session_manager.h b/chrome/browser/ash/login/session/user_session_manager.h index 55f3804..e90834f 100644 --- a/chrome/browser/ash/login/session/user_session_manager.h +++ b/chrome/browser/ash/login/session/user_session_manager.h
@@ -60,6 +60,7 @@ } // namespace test class EasyUnlockKeyManager; +class HelpAppNotificationController; class InputEventsBlocker; class LoginDisplayHost; class StubAuthenticatorBuilder; @@ -331,8 +332,8 @@ // Shows U2F notification if necessary. void MaybeShowU2FNotification(); - // Shows Release Notes notification if necessary. - void MaybeShowReleaseNotesNotification(Profile* profile); + // Shows Help App notification if necessary. + void MaybeShowHelpAppNotification(Profile* profile); protected: // Protected for testability reasons. @@ -625,7 +626,8 @@ std::unique_ptr<U2FNotification> u2f_notification_; - std::unique_ptr<ReleaseNotesNotification> release_notes_notification_; + std::unique_ptr<HelpAppNotificationController> + help_app_notification_controller_; std::unique_ptr<TurnSyncOnHelper> turn_sync_on_helper_;
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_features.cc b/chrome/browser/ash/plugin_vm/plugin_vm_features.cc index 205c01c..0ab88e79 100644 --- a/chrome/browser/ash/plugin_vm/plugin_vm_features.cc +++ b/chrome/browser/ash/plugin_vm/plugin_vm_features.cc
@@ -31,22 +31,18 @@ } if (!chromeos::ProfileHelper::IsPrimaryProfile(profile)) { - VLOG(1) << "Plugin VM is not allowed on non-primary profiles."; return ProfileSupported::kErrorNonPrimary; } if (profile->IsChild()) { - VLOG(1) << "Child accounts are not supported"; return ProfileSupported::kErrorChildAccount; } if (profile->IsOffTheRecord()) { - VLOG(1) << "Off-the-record profiles are not supported"; return ProfileSupported::kErrorOffTheRecord; } if (chromeos::ProfileHelper::IsEphemeralUserProfile(profile)) { - VLOG(1) << "Ephemeral user profiles are not supported"; return ProfileSupported::kErrorEphemeral; } @@ -74,7 +70,6 @@ // Check that the device is enterprise enrolled. if (!chromeos::InstallAttributes::Get()->IsEnterpriseManaged()) { - VLOG(1) << "Plugin VM is only allowed on enterprise-managed devices."; return PolicyConfigured::kErrorNotEnterpriseEnrolled; } @@ -82,7 +77,6 @@ const user_manager::User* const user = chromeos::ProfileHelper::Get()->GetUserByProfile(profile); if (user == nullptr || !user->IsAffiliated()) { - VLOG(1) << "Plugin VM is only allowed for affiliated users."; return PolicyConfigured::kErrorUserNotAffiliated; } @@ -90,25 +84,21 @@ bool plugin_vm_allowed_for_device; if (!ash::CrosSettings::Get()->GetBoolean(chromeos::kPluginVmAllowed, &plugin_vm_allowed_for_device)) { - VLOG(1) << "Unable to determine Plugin VM device-level policy."; return PolicyConfigured::kErrorUnableToCheckDevicePolicy; } if (!plugin_vm_allowed_for_device) { - VLOG(1) << "Plugin VM is disabled by device-level policy."; return PolicyConfigured::kErrorNotAllowedByDevicePolicy; } bool plugin_vm_allowed_for_user = profile->GetPrefs()->GetBoolean(plugin_vm::prefs::kPluginVmAllowed); if (!plugin_vm_allowed_for_user) { - VLOG(1) << "Plugin VM is disabled by user-level policy."; return PolicyConfigured::kErrorNotAllowedByUserPolicy; } if (GetPluginVmLicenseKey().empty() && GetPluginVmUserIdForProfile(profile).empty()) { - VLOG(1) << "Plugin VM require a license be set up in policy."; return PolicyConfigured::kErrorLicenseNotSetUp; } @@ -191,11 +181,16 @@ // * PluginVmUserId policy is set. PluginVmFeatures::IsAllowedDiagnostics PluginVmFeatures::GetIsAllowedDiagnostics(const Profile* profile) { - return IsAllowedDiagnostics{ + auto diagnostics = IsAllowedDiagnostics{ /*device_supported=*/base::FeatureList::IsEnabled(features::kPluginVm), /*profile_supported=*/CheckProfileSupported(profile), /*policy_configured=*/CheckPolicyConfigured(profile), }; + if (!diagnostics.IsOk()) { + VLOG(1) << diagnostics.GetTopError(); + } + + return diagnostics; } bool PluginVmFeatures::IsAllowed(const Profile* profile, std::string* reason) {
diff --git a/chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification.cc b/chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification.cc index f97299f..e86efcd 100644 --- a/chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification.cc +++ b/chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification.cc
@@ -5,6 +5,8 @@ #include "chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification.h" #include "ash/public/cpp/notification_utils.h" +#include "base/metrics/user_metrics.h" +#include "base/metrics/user_metrics_action.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/notifications/system_notification_helper.h" #include "chrome/browser/profiles/profile.h" @@ -42,6 +44,9 @@ message_center::SystemNotificationWarningLevel::NORMAL); SystemNotificationHelper::GetInstance()->Display(*notification); + + base::RecordAction( + base::UserMetricsAction("Discover.DiscoverTabNotification.Shown")); } void HelpAppDiscoverTabNotification::OnClick(base::Optional<int> button_index) { @@ -54,6 +59,9 @@ apps::mojom::LaunchSource::kFromDiscoverTabNotification; LaunchSystemWebAppAsync(profile_, web_app::SystemAppType::HELP, params); + base::RecordAction( + base::UserMetricsAction("Discover.DiscoverTabNotification.Clicked")); + if (onclick_callback_) { onclick_callback_.Run(); }
diff --git a/chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification_unittest.cc b/chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification_unittest.cc index 575d280..db656dc5 100644 --- a/chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification_unittest.cc +++ b/chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification_unittest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification.h" +#include "base/test/metrics/user_action_tester.h" #include "base/test/mock_callback.h" #include "chrome/browser/notifications/notification_display_service_tester.h" #include "chrome/browser/notifications/notification_handler.h" @@ -74,6 +75,16 @@ base::UTF16ToASCII(GetDiscoverTabNotification().message())); } +TEST_F(HelpAppDiscoverTabNotificationTest, LogsMetricWhenNotificationShown) { + base::UserActionTester user_action_tester; + + EXPECT_EQ(0, user_action_tester.GetActionCount( + "Discover.DiscoverTabNotification.Shown")); + discover_tab_notification_->Show(); + EXPECT_EQ(1, user_action_tester.GetActionCount( + "Discover.DiscoverTabNotification.Shown")); +} + TEST_F(HelpAppDiscoverTabNotificationTest, ClickingNotificationDismissesIt) { discover_tab_notification_->Show(); @@ -100,4 +111,18 @@ EXPECT_EQ(false, HasDiscoverTabNotification()); } +TEST_F(HelpAppDiscoverTabNotificationTest, LogsMetricWhenNotificationClicked) { + base::UserActionTester user_action_tester; + discover_tab_notification_->Show(); + + EXPECT_EQ(0, user_action_tester.GetActionCount( + "Discover.DiscoverTabNotification.Clicked")); + notification_tester_->SimulateClick(NotificationHandler::Type::TRANSIENT, + kShowHelpAppDiscoverTabNotificationId, + /*action_index=*/0, + /*reply=*/base::nullopt); + EXPECT_EQ(1, user_action_tester.GetActionCount( + "Discover.DiscoverTabNotification.Clicked")); +} + } // namespace chromeos
diff --git a/chrome/browser/ash/web_applications/help_app/help_app_notification_controller.cc b/chrome/browser/ash/web_applications/help_app/help_app_notification_controller.cc new file mode 100644 index 0000000..511dac0 --- /dev/null +++ b/chrome/browser/ash/web_applications/help_app/help_app_notification_controller.cc
@@ -0,0 +1,84 @@ +// Copyright 2021 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/ash/web_applications/help_app/help_app_notification_controller.h" + +#include "ash/constants/ash_features.h" +#include "base/logging.h" +#include "base/version.h" +#include "chrome/browser/ash/release_notes/release_notes_notification.h" +#include "chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification.h" +#include "chrome/browser/profiles/chrome_version_service.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/pref_names.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/pref_service.h" +#include "components/version_info/version_info.h" + +namespace { + +int CurrentMilestone() { + return version_info::GetVersion().components()[0]; +} + +// Checks profile type and when the last notification was shown to determine +// whether we should show the Discover tab notification to the user. +bool ShouldShowDiscoverTabNotification(Profile* profile) { + if (!base::FeatureList::IsEnabled(chromeos::features::kHelpAppDiscoverTab)) { + return false; + } + + if (!profile->IsChild()) { + return false; + } + + int last_shown_milestone = profile->GetPrefs()->GetInteger( + prefs::kDiscoverTabNotificationLastShownMilestone); + if (profile->GetPrefs() + ->FindPreference(prefs::kDiscoverTabNotificationLastShownMilestone) + ->IsDefaultValue()) { + // We don't know if the user has seen any notification before as we have + // never set which milestone was last seen. So use the version of chrome + // where the profile was created instead. + base::Version profile_version( + ChromeVersionService::GetVersion(profile->GetPrefs())); + last_shown_milestone = profile_version.components()[0]; + } + return last_shown_milestone < CurrentMilestone(); +} + +} // namespace + +namespace chromeos { + +void HelpAppNotificationController::RegisterProfilePrefs( + PrefRegistrySimple* registry) { + registry->RegisterIntegerPref( + prefs::kDiscoverTabNotificationLastShownMilestone, -10); +} + +HelpAppNotificationController::HelpAppNotificationController(Profile* profile) + : profile_(profile) {} + +HelpAppNotificationController::~HelpAppNotificationController() = default; + +void HelpAppNotificationController::MaybeShowNotification() { + if (ShouldShowDiscoverTabNotification(profile_) && + !discover_tab_notification_) { + discover_tab_notification_ = + std::make_unique<HelpAppDiscoverTabNotification>(profile_); + discover_tab_notification_->Show(); + + // Update milestone when notification is shown. + profile_->GetPrefs()->SetInteger( + prefs::kDiscoverTabNotificationLastShownMilestone, CurrentMilestone()); + } else if (!release_notes_notification_) { + release_notes_notification_ = + std::make_unique<ash::ReleaseNotesNotification>(profile_); + // Let the ReleaseNotesNotification decide if it should show itself. + release_notes_notification_->MaybeShowReleaseNotes(); + } +} + +} // namespace chromeos
diff --git a/chrome/browser/ash/web_applications/help_app/help_app_notification_controller.h b/chrome/browser/ash/web_applications/help_app/help_app_notification_controller.h new file mode 100644 index 0000000..c837c68 --- /dev/null +++ b/chrome/browser/ash/web_applications/help_app/help_app_notification_controller.h
@@ -0,0 +1,49 @@ +// Copyright 2021 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_ASH_WEB_APPLICATIONS_HELP_APP_HELP_APP_NOTIFICATION_CONTROLLER_H_ +#define CHROME_BROWSER_ASH_WEB_APPLICATIONS_HELP_APP_HELP_APP_NOTIFICATION_CONTROLLER_H_ + +#include <memory> + +#include "base/memory/weak_ptr.h" + +class Profile; +class PrefRegistrySimple; + +namespace ash { +class ReleaseNotesNotification; +} // namespace ash + +namespace chromeos { + +class HelpAppDiscoverTabNotification; + +// Class to show notifications under the Help App. +class HelpAppNotificationController { + public: + // Registers profile prefs. + static void RegisterProfilePrefs(PrefRegistrySimple* registry); + + explicit HelpAppNotificationController(Profile* profile); + HelpAppNotificationController(const HelpAppNotificationController&) = delete; + HelpAppNotificationController& operator=( + const HelpAppNotificationController&) = delete; + ~HelpAppNotificationController(); + + // Determines which notification to show to the user, if any at all. This will + // never show more than 1 notification, to avoid spamming the user. + void MaybeShowNotification(); + + private: + Profile* const profile_; + std::unique_ptr<HelpAppDiscoverTabNotification> discover_tab_notification_; + std::unique_ptr<ash::ReleaseNotesNotification> release_notes_notification_; + + base::WeakPtrFactory<HelpAppNotificationController> weak_ptr_factory_{this}; +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_ASH_WEB_APPLICATIONS_HELP_APP_HELP_APP_NOTIFICATION_CONTROLLER_H_
diff --git a/chrome/browser/ash/web_applications/help_app/help_app_notification_controller_unittest.cc b/chrome/browser/ash/web_applications/help_app/help_app_notification_controller_unittest.cc new file mode 100644 index 0000000..a1516b0 --- /dev/null +++ b/chrome/browser/ash/web_applications/help_app/help_app_notification_controller_unittest.cc
@@ -0,0 +1,245 @@ +// Copyright 2021 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/ash/web_applications/help_app/help_app_notification_controller.h" + +#include <memory> + +#include "ash/constants/ash_features.h" +#include "base/feature_list.h" +#include "base/test/scoped_feature_list.h" +#include "base/version.h" +#include "chrome/browser/ash/login/users/fake_chrome_user_manager.h" +#include "chrome/browser/ash/web_applications/help_app/help_app_discover_tab_notification.h" +#include "chrome/browser/notifications/notification_display_service_tester.h" +#include "chrome/browser/notifications/system_notification_helper.h" +#include "chrome/browser/policy/profile_policy_connector.h" +#include "chrome/browser/profiles/chrome_version_service.h" +#include "chrome/browser/supervised_user/supervised_user_constants.h" +#include "chrome/common/pref_names.h" +#include "chrome/test/base/browser_with_test_window_test.h" +#include "chrome/test/base/testing_browser_process.h" +#include "chrome/test/base/testing_profile.h" +#include "chrome/test/base/testing_profile_manager.h" +#include "components/account_id/account_id.h" +#include "components/prefs/testing_pref_service.h" +#include "components/user_manager/scoped_user_manager.h" +#include "components/version_info/version_info.h" + +namespace { +int CurrentMilestone() { + return version_info::GetVersion().components()[0]; +} +} // namespace + +namespace chromeos { + +class HelpAppNotificationControllerTest : public BrowserWithTestWindowTest { + public: + HelpAppNotificationControllerTest() + : user_manager_(new FakeChromeUserManager()), + scoped_user_manager_( + std::unique_ptr<FakeChromeUserManager>(user_manager_)) {} + ~HelpAppNotificationControllerTest() override = default; + + std::unique_ptr<TestingProfile> CreateRegularProfile() { + AccountId account_id_ = + AccountId::FromUserEmailGaiaId("user@gmail.com", "12345"); + user_manager_->AddUser(account_id_); + TestingProfile::Builder builder; + builder.SetProfileName("user@gmail.com"); + std::unique_ptr<TestingProfile> profile = builder.Build(); + // Set profile creation version, otherwise it defaults to 1.0.0.0. + ChromeVersionService::SetVersion(profile->GetPrefs(), + version_info::GetVersionNumber()); + return profile; + } + + std::unique_ptr<TestingProfile> CreateChildProfile() { + std::unique_ptr<TestingProfile> profile = CreateRegularProfile(); + ChromeVersionService::SetVersion(profile->GetPrefs(), + version_info::GetVersionNumber()); + profile->SetSupervisedUserId(supervised_users::kChildAccountSUID); + return profile; + } + + void SetUp() override { + BrowserWithTestWindowTest::SetUp(); + help_app_notification_controller_ = + std::make_unique<HelpAppNotificationController>(profile()); + TestingBrowserProcess::GetGlobal()->SetSystemNotificationHelper( + std::make_unique<SystemNotificationHelper>()); + notification_tester_ = + std::make_unique<NotificationDisplayServiceTester>(nullptr); + notification_tester_->SetNotificationAddedClosure(base::BindRepeating( + &HelpAppNotificationControllerTest::OnNotificationAdded, + base::Unretained(this))); + scoped_feature_list_.InitWithFeatures( + /*enabled_features=*/{chromeos::features::kHelpAppDiscoverTab, + chromeos::features::kReleaseNotesNotification, + chromeos::features:: + kReleaseNotesNotificationAllChannels}, + /*disabled_features=*/{}); + } + + void TearDown() override { + help_app_notification_controller_.reset(); + notification_tester_.reset(); + BrowserWithTestWindowTest::TearDown(); + } + + void OnNotificationAdded() { notification_count_++; } + + protected: + bool HasDiscoverTabNotification() { + return notification_tester_ + ->GetNotification(kShowHelpAppDiscoverTabNotificationId) + .has_value(); + } + + bool HasReleaseNotesNotification() { + return notification_tester_ + ->GetNotification("show_release_notes_notification") + .has_value(); + } + + message_center::Notification GetDiscoverTabNotification() { + return notification_tester_ + ->GetNotification(kShowHelpAppDiscoverTabNotificationId) + .value(); + } + + message_center::Notification GetReleaseNotesNotification() { + return notification_tester_ + ->GetNotification("show_release_notes_notification") + .value(); + } + + FakeChromeUserManager* user_manager_; + user_manager::ScopedUserManager scoped_user_manager_; + int notification_count_ = 0; + std::unique_ptr<HelpAppNotificationController> + help_app_notification_controller_; + std::unique_ptr<NotificationDisplayServiceTester> notification_tester_; + base::test::ScopedFeatureList scoped_feature_list_; +}; + +// Tests for regular profiles. +TEST_F(HelpAppNotificationControllerTest, + DoesNotShowAnyNotificationIfNewRegularProfile) { + std::unique_ptr<Profile> profile = CreateRegularProfile(); + std::unique_ptr<HelpAppNotificationController> controller = + std::make_unique<HelpAppNotificationController>(profile.get()); + + controller->MaybeShowNotification(); + + EXPECT_EQ(0, notification_count_); + EXPECT_EQ(false, HasDiscoverTabNotification()); + EXPECT_EQ(false, HasReleaseNotesNotification()); +} + +TEST_F(HelpAppNotificationControllerTest, + ShowsReleaseNotesNotificationIfBothShownInOlderMilestone) { + std::unique_ptr<Profile> profile = CreateRegularProfile(); + profile->GetPrefs()->SetInteger( + prefs::kDiscoverTabNotificationLastShownMilestone, 20); + profile->GetPrefs()->SetInteger(prefs::kReleaseNotesLastShownMilestone, 20); + std::unique_ptr<HelpAppNotificationController> controller = + std::make_unique<HelpAppNotificationController>(profile.get()); + + controller->MaybeShowNotification(); + + EXPECT_EQ(1, notification_count_); + EXPECT_EQ(false, HasDiscoverTabNotification()); + EXPECT_EQ(true, HasReleaseNotesNotification()); + EXPECT_EQ(CurrentMilestone(), profile->GetPrefs()->GetInteger( + prefs::kReleaseNotesLastShownMilestone)); +} + +TEST_F(HelpAppNotificationControllerTest, + DoesNotShowReleaseNotesNotificationIfAlreadyShownInCurrentMilestone) { + std::unique_ptr<Profile> profile = CreateRegularProfile(); + profile->GetPrefs()->SetInteger( + prefs::kDiscoverTabNotificationLastShownMilestone, 20); + profile->GetPrefs()->SetInteger(prefs::kReleaseNotesLastShownMilestone, + CurrentMilestone()); + std::unique_ptr<HelpAppNotificationController> controller = + std::make_unique<HelpAppNotificationController>(profile.get()); + + controller->MaybeShowNotification(); + + EXPECT_EQ(0, notification_count_); + EXPECT_EQ(false, HasDiscoverTabNotification()); + EXPECT_EQ(false, HasReleaseNotesNotification()); +} + +// Tests for Child profile. +TEST_F(HelpAppNotificationControllerTest, + DoesNotShowAnyNotificationIfNewChildProfile) { + std::unique_ptr<Profile> profile = CreateChildProfile(); + std::unique_ptr<HelpAppNotificationController> controller = + std::make_unique<HelpAppNotificationController>(profile.get()); + + controller->MaybeShowNotification(); + + EXPECT_EQ(0, notification_count_); + EXPECT_EQ(false, HasDiscoverTabNotification()); + EXPECT_EQ(false, HasReleaseNotesNotification()); +} + +TEST_F(HelpAppNotificationControllerTest, + OnlyShowsDiscoverTabNotificationIfBothShownInOlderMilestone) { + std::unique_ptr<Profile> profile = CreateChildProfile(); + profile->GetPrefs()->SetInteger( + prefs::kDiscoverTabNotificationLastShownMilestone, 20); + profile->GetPrefs()->SetInteger(prefs::kReleaseNotesLastShownMilestone, 20); + std::unique_ptr<HelpAppNotificationController> controller = + std::make_unique<HelpAppNotificationController>(profile.get()); + + controller->MaybeShowNotification(); + + EXPECT_EQ(1, notification_count_); + EXPECT_EQ(true, HasDiscoverTabNotification()); + EXPECT_EQ(false, HasReleaseNotesNotification()); + EXPECT_EQ(CurrentMilestone(), + profile->GetPrefs()->GetInteger( + prefs::kDiscoverTabNotificationLastShownMilestone)); +} + +TEST_F(HelpAppNotificationControllerTest, FallsbackToReleaseNotesNotification) { + std::unique_ptr<Profile> profile = CreateChildProfile(); + profile->GetPrefs()->SetInteger( + prefs::kDiscoverTabNotificationLastShownMilestone, CurrentMilestone()); + profile->GetPrefs()->SetInteger(prefs::kReleaseNotesLastShownMilestone, 20); + std::unique_ptr<HelpAppNotificationController> controller = + std::make_unique<HelpAppNotificationController>(profile.get()); + + controller->MaybeShowNotification(); + + EXPECT_EQ(1, notification_count_); + EXPECT_EQ(false, HasDiscoverTabNotification()); + EXPECT_EQ(true, HasReleaseNotesNotification()); + EXPECT_EQ(CurrentMilestone(), + profile->GetPrefs()->GetInteger( + prefs::kDiscoverTabNotificationLastShownMilestone)); +} + +TEST_F(HelpAppNotificationControllerTest, + DoesNotShowNotificationIfAlreadyShownInCurrentMilestone) { + std::unique_ptr<Profile> profile = CreateChildProfile(); + profile->GetPrefs()->SetInteger( + prefs::kDiscoverTabNotificationLastShownMilestone, CurrentMilestone()); + profile->GetPrefs()->SetInteger(prefs::kReleaseNotesLastShownMilestone, + CurrentMilestone()); + std::unique_ptr<HelpAppNotificationController> controller = + std::make_unique<HelpAppNotificationController>(profile.get()); + + controller->MaybeShowNotification(); + + EXPECT_EQ(0, notification_count_); + EXPECT_EQ(false, HasDiscoverTabNotification()); + EXPECT_EQ(false, HasReleaseNotesNotification()); +} + +} // namespace chromeos
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 48e3492..b348998 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -642,6 +642,7 @@ #endif #if BUILDFLAG(ENABLE_OFFLINE_PAGES) +#include "chrome/browser/offline_pages/offline_page_navigation_throttle.h" #include "chrome/browser/offline_pages/offline_page_tab_helper.h" #include "chrome/browser/offline_pages/offline_page_url_loader_request_interceptor.h" #endif @@ -4223,6 +4224,13 @@ handle), &throttles); +#if BUILDFLAG(ENABLE_OFFLINE_PAGES) + MaybeAddThrottle( + offline_pages::OfflinePageNavigationThrottle::MaybeCreateThrottleFor( + handle), + &throttles); +#endif + return throttles; }
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index ed3e547..617afd3 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -1175,6 +1175,12 @@ "../ash/hats/hats_finch_helper.h", "../ash/hats/hats_notification_controller.cc", "../ash/hats/hats_notification_controller.h", + "../ash/kerberos/kerberos_credentials_manager.cc", + "../ash/kerberos/kerberos_credentials_manager.h", + "../ash/kerberos/kerberos_credentials_manager_factory.cc", + "../ash/kerberos/kerberos_credentials_manager_factory.h", + "../ash/kerberos/kerberos_ticket_expiry_notification.cc", + "../ash/kerberos/kerberos_ticket_expiry_notification.h", "../ash/lock_screen_apps/app_manager.h", "../ash/lock_screen_apps/app_manager_impl.cc", "../ash/lock_screen_apps/app_manager_impl.h", @@ -1818,6 +1824,8 @@ "../ash/web_applications/eche_app_info.h", "../ash/web_applications/help_app/help_app_discover_tab_notification.cc", "../ash/web_applications/help_app/help_app_discover_tab_notification.h", + "../ash/web_applications/help_app/help_app_notification_controller.cc", + "../ash/web_applications/help_app/help_app_notification_controller.h", "../ash/web_applications/help_app/help_app_ui_delegate.cc", "../ash/web_applications/help_app/help_app_ui_delegate.h", "../ash/web_applications/help_app/help_app_web_app_info.cc", @@ -2360,12 +2368,6 @@ "input_method/ui/suggestion_window_view.h", "input_method/ui/undo_window.cc", "input_method/ui/undo_window.h", - "kerberos/kerberos_credentials_manager.cc", - "kerberos/kerberos_credentials_manager.h", - "kerberos/kerberos_credentials_manager_factory.cc", - "kerberos/kerberos_credentials_manager_factory.h", - "kerberos/kerberos_ticket_expiry_notification.cc", - "kerberos/kerberos_ticket_expiry_notification.h", "language_preferences.cc", "language_preferences.h", "launcher_search_provider/error_reporter.cc", @@ -3739,6 +3741,8 @@ "../ash/guest_os/guest_os_stability_monitor_unittest.cc", "../ash/hats/hats_finch_helper_unittest.cc", "../ash/hats/hats_notification_controller_unittest.cc", + "../ash/kerberos/kerberos_credentials_manager_test.cc", + "../ash/kerberos/kerberos_ticket_expiry_notification_test.cc", "../ash/lock_screen_apps/app_manager_impl_unittest.cc", "../ash/lock_screen_apps/lock_screen_profile_creator_impl_unittest.cc", "../ash/lock_screen_apps/state_controller_unittest.cc", @@ -3845,6 +3849,7 @@ "../ash/system_logs/single_debug_daemon_log_source_unittest.cc", "../ash/system_logs/single_log_file_log_source_unittest.cc", "../ash/web_applications/help_app/help_app_discover_tab_notification_unittest.cc", + "../ash/web_applications/help_app/help_app_notification_controller_unittest.cc", "../ash/wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.cc", "../ash/wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.h", "../ash/wilco_dtc_supportd/testing_wilco_dtc_supportd_network_context.cc", @@ -3998,11 +4003,14 @@ "input_method/autocorrect_manager_unittest.cc", "input_method/diacritics_insensitive_string_comparator_unittest.cc", "input_method/emoji_suggester_unittest.cc", + "input_method/fake_suggestion_handler.cc", + "input_method/fake_suggestion_handler.h", "input_method/grammar_service_client_unittest.cc", "input_method/input_method_configuration_unittest.cc", "input_method/input_method_engine_unittest.cc", "input_method/input_method_manager_impl_unittest.cc", "input_method/input_method_persistence_unittest.cc", + "input_method/multi_word_suggester_unittest.cc", "input_method/native_input_method_engine_unittest.cc", "input_method/personal_info_suggester_unittest.cc", "input_method/suggestions_collector_unittest.cc", @@ -4012,8 +4020,6 @@ "input_method/ui/input_method_menu_manager_unittest.cc", "input_method/ui/suggestion_window_view_unittest.cc", "input_method/ui/undo_window_unittest.cc", - "kerberos/kerberos_credentials_manager_test.cc", - "kerberos/kerberos_ticket_expiry_notification_test.cc", "locale_change_guard_unittest.cc", "nearby/bluetooth_adapter_manager_unittest.cc", "nearby/nearby_process_manager_impl_unittest.cc",
diff --git a/chrome/browser/chromeos/browser_context_keyed_service_factories.cc b/chrome/browser/chromeos/browser_context_keyed_service_factories.cc index 70494a7..c75dd65 100644 --- a/chrome/browser/chromeos/browser_context_keyed_service_factories.cc +++ b/chrome/browser/chromeos/browser_context_keyed_service_factories.cc
@@ -11,6 +11,7 @@ #include "chrome/browser/ash/borealis/borealis_service_factory.h" #include "chrome/browser/ash/cert_provisioning/cert_provisioning_scheduler_user_service.h" #include "chrome/browser/ash/guest_os/guest_os_registry_service_factory.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/ash/login/easy_unlock/easy_unlock_service_factory.h" #include "chrome/browser/ash/ownership/owner_settings_service_ash_factory.h" #include "chrome/browser/ash/plugin_vm/plugin_vm_engagement_metrics_service.h" @@ -27,7 +28,6 @@ #include "chrome/browser/chromeos/file_system_provider/service_factory.h" #include "chrome/browser/chromeos/fileapi/file_change_service_factory.h" #include "chrome/browser/chromeos/full_restore/full_restore_service_factory.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/chromeos/launcher_search_provider/launcher_search_provider_service_factory.h" #include "chrome/browser/chromeos/nearby/nearby_connections_dependencies_provider_factory.h" #include "chrome/browser/chromeos/nearby/nearby_process_manager_factory.h"
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc index 128dabc..6286ce89 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
@@ -3951,6 +3951,30 @@ } /////////////////////////////////////////////////////////////////////////////// +// AutotestPrivateActivateAppWindowFunction +/////////////////////////////////////////////////////////////////////////////// + +AutotestPrivateActivateAppWindowFunction:: + ~AutotestPrivateActivateAppWindowFunction() = default; + +ExtensionFunction::ResponseAction +AutotestPrivateActivateAppWindowFunction::Run() { + std::unique_ptr<api::autotest_private::ActivateAppWindow::Params> params( + api::autotest_private::ActivateAppWindow::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params); + DVLOG(1) << "AutotestPrivateActivateAppWindowFunction " << params->id; + + auto* window = FindAppWindowById(params->id); + if (!window) { + return RespondNow(Error( + base::StringPrintf("No app window was found : id=%d", params->id))); + } + ash::WindowState::Get(window)->Activate(); + + return RespondNow(NoArguments()); +} + +/////////////////////////////////////////////////////////////////////////////// // AutotestPrivateCloseAppWindowFunction ///////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h index a096a241..58b24874 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h
@@ -23,6 +23,7 @@ #include "chromeos/ui/base/window_state_type.h" #include "extensions/browser/browser_context_keyed_api_factory.h" #include "extensions/browser/extension_function.h" +#include "extensions/browser/extension_function_histogram_value.h" #include "mojo/public/cpp/bindings/remote.h" #include "ui/base/clipboard/clipboard_monitor.h" #include "ui/base/clipboard/clipboard_observer.h" @@ -1050,6 +1051,16 @@ std::unique_ptr<WindowStateChangeObserver> window_state_observer_; }; +class AutotestPrivateActivateAppWindowFunction : public ExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("autotestPrivate.activateAppWindow", + AUTOTESTPRIVATE_ACTIVATEAPPWINDOW) + + private: + ~AutotestPrivateActivateAppWindowFunction() override; + ResponseAction Run() override; +}; + class AutotestPrivateCloseAppWindowFunction : public ExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("autotestPrivate.closeAppWindow",
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc index 5230f34..f0a9fc8 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
@@ -391,8 +391,6 @@ ZipCase("zipFileOpenDownloadsEncryptedCancelPassphrase"), ZipCase("zipFileOpenDrive"), ZipCase("zipFileOpenUsb"), - ZipCase("zipCannotZipFile").ZipNoNaCl(), - ZipCase("zipCannotZipFile").ZipNoNaCl().InGuestMode(), ZipCase("zipCreateFileDownloads").InGuestMode(), ZipCase("zipCreateFileDownloads"), ZipCase("zipCreateFileDrive"),
diff --git a/chrome/browser/chromeos/full_restore/arc_ghost_window_delegate.cc b/chrome/browser/chromeos/full_restore/arc_ghost_window_delegate.cc index 0eec1ac..544b876 100644 --- a/chrome/browser/chromeos/full_restore/arc_ghost_window_delegate.cc +++ b/chrome/browser/chromeos/full_restore/arc_ghost_window_delegate.cc
@@ -9,6 +9,10 @@ #include "ui/display/display.h" #include "ui/display/screen.h" +namespace { +const int kNullWindowState = -1; +} + namespace chromeos { namespace full_restore { @@ -20,6 +24,7 @@ gfx::Rect bounds) : window_id_(window_id), bounds_(gfx::Rect(bounds)), + pending_close_(false), window_state_(chromeos::WindowStateType::kDefault), shell_surface_(shell_surface) { DCHECK(shell_surface); @@ -117,6 +122,13 @@ UpdateWindowInfoToArc(); } +void ArcGhostWindowDelegate::OnWindowCloseRequested(int window_id) { + if (window_id != window_id_) + return; + pending_close_ = true; + UpdateWindowInfoToArc(); +} + bool ArcGhostWindowDelegate::SetDisplayId(int64_t display_id) { base::Optional<double> scale_factor = GetDisplayScaleFactor(display_id); if (!scale_factor.has_value()) { @@ -134,7 +146,7 @@ window_info->window_id = window_id_; window_info->display_id = display_id_; window_info->bounds = gfx::ScaleToRoundedRect(bounds_, scale_factor_); - window_info->state = (int)window_state_; + window_info->state = pending_close_ ? kNullWindowState : (int)window_state_; arc::UpdateWindowInfo(std::move(window_info)); }
diff --git a/chrome/browser/chromeos/full_restore/arc_ghost_window_delegate.h b/chrome/browser/chromeos/full_restore/arc_ghost_window_delegate.h index 9e5032b..25838ad 100644 --- a/chrome/browser/chromeos/full_restore/arc_ghost_window_delegate.h +++ b/chrome/browser/chromeos/full_restore/arc_ghost_window_delegate.h
@@ -49,12 +49,15 @@ // ArcWindowHandler::Observer void OnAppInstanceConnected() override; + void OnWindowCloseRequested(int window_id) override; + private: bool SetDisplayId(int64_t display_id); void UpdateWindowInfoToArc(); int window_id_; gfx::Rect bounds_; + bool pending_close_; int64_t display_id_; double scale_factor_; chromeos::WindowStateType window_state_;
diff --git a/chrome/browser/chromeos/full_restore/arc_ghost_window_shell_surface.cc b/chrome/browser/chromeos/full_restore/arc_ghost_window_shell_surface.cc index bebae4b..7c63dc83 100644 --- a/chrome/browser/chromeos/full_restore/arc_ghost_window_shell_surface.cc +++ b/chrome/browser/chromeos/full_restore/arc_ghost_window_shell_surface.cc
@@ -22,7 +22,8 @@ int window_id, int64_t display_id, gfx::Rect bounds, - std::unique_ptr<views::View> content) { + std::unique_ptr<views::View> content, + base::RepeatingClosure close_callback) { base::Optional<double> scale_factor = GetDisplayScaleFactor(display_id); DCHECK(scale_factor.has_value()); @@ -33,9 +34,12 @@ auto shell_surface = std::make_unique<ArcGhostWindowShellSurface>( std::move(surface), container, scale_factor.value()); - shell_surface->SetApplicationId(app_id.c_str()); + // TODO(sstan): Add set_surface_destroyed_callback. shell_surface->set_delegate(std::make_unique<ArcGhostWindowDelegate>( shell_surface.get(), window_handler, window_id, display_id, bounds)); + shell_surface->set_close_callback(std::move(close_callback)); + + shell_surface->SetApplicationId(app_id.c_str()); shell_surface->SetBounds(display_id, bounds); // Set frame buttons.
diff --git a/chrome/browser/chromeos/full_restore/arc_ghost_window_shell_surface.h b/chrome/browser/chromeos/full_restore/arc_ghost_window_shell_surface.h index a6fc948..63d2428f 100644 --- a/chrome/browser/chromeos/full_restore/arc_ghost_window_shell_surface.h +++ b/chrome/browser/chromeos/full_restore/arc_ghost_window_shell_surface.h
@@ -26,7 +26,8 @@ int window_id, int64_t display_id, gfx::Rect bounds, - std::unique_ptr<views::View> content); + std::unique_ptr<views::View> content, + base::RepeatingClosure close_callback); // ArcGhostWindowShellSurface class is a shell surface which controlled its // root surface.
diff --git a/chrome/browser/chromeos/full_restore/arc_window_handler.cc b/chrome/browser/chromeos/full_restore/arc_window_handler.cc index a368feb4..043dedd 100644 --- a/chrome/browser/chromeos/full_restore/arc_window_handler.cc +++ b/chrome/browser/chromeos/full_restore/arc_window_handler.cc
@@ -53,10 +53,22 @@ container->SetBackground(views::CreateSolidBackground(SK_ColorWHITE)); session_id_to_shell_surface_.emplace( - session_id, InitArcGhostWindow(this, app_id, session_id, - restore_data->display_id.value(), - restore_data->current_bounds.value(), - std::move(container))); + session_id, + InitArcGhostWindow( + this, app_id, session_id, restore_data->display_id.value(), + restore_data->current_bounds.value(), std::move(container), + base::BindRepeating(&ArcWindowHandler::CloseWindow, + weak_ptr_factory_.GetWeakPtr(), session_id))); +} + +void ArcWindowHandler::CloseWindow(int session_id) { + auto it = session_id_to_shell_surface_.find(session_id); + if (it == session_id_to_shell_surface_.end()) + return; + + for (auto& observer : observer_list_) + observer.OnWindowCloseRequested(session_id); + session_id_to_shell_surface_.erase(it); } void ArcWindowHandler::AddObserver(Observer* observer) {
diff --git a/chrome/browser/chromeos/full_restore/arc_window_handler.h b/chrome/browser/chromeos/full_restore/arc_window_handler.h index ab4df203..351aff0 100644 --- a/chrome/browser/chromeos/full_restore/arc_window_handler.h +++ b/chrome/browser/chromeos/full_restore/arc_window_handler.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_CHROMEOS_FULL_RESTORE_ARC_WINDOW_HANDLER_H_ #define CHROME_BROWSER_CHROMEOS_FULL_RESTORE_ARC_WINDOW_HANDLER_H_ +#include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/observer_list_types.h" #include "components/exo/client_controlled_shell_surface.h" @@ -48,6 +49,9 @@ // Observer for app instance connection ready. virtual void OnAppInstanceConnected() {} + // Observer for ghost window close event. + virtual void OnWindowCloseRequested(int window_id) {} + protected: ~Observer() override = default; }; @@ -61,6 +65,8 @@ int32_t session_id, ::full_restore::AppRestoreData* restore_data); + void CloseWindow(int session_id); + void AddObserver(Observer* observer); void RemoveObserver(Observer* observer); bool HasObserver(Observer* observer); @@ -72,6 +78,8 @@ ShellSurfaceMap session_id_to_shell_surface_; base::ObserverList<Observer> observer_list_; + + base::WeakPtrFactory<ArcWindowHandler> weak_ptr_factory_{this}; }; } // namespace full_restore
diff --git a/chrome/browser/chromeos/input_method/assistive_suggester.cc b/chrome/browser/chromeos/input_method/assistive_suggester.cc index 8618d91c..b0995d13 100644 --- a/chrome/browser/chromeos/input_method/assistive_suggester.cc +++ b/chrome/browser/chromeos/input_method/assistive_suggester.cc
@@ -236,7 +236,8 @@ Profile* profile) : profile_(profile), personal_info_suggester_(engine, profile), - emoji_suggester_(engine, profile) { + emoji_suggester_(engine, profile), + multi_word_suggester_(engine) { RecordAssistiveUserPrefForPersonalInfo( profile_->GetPrefs()->GetBoolean(prefs::kAssistPersonalInfoEnabled)); RecordAssistiveUserPrefForEmoji(
diff --git a/chrome/browser/chromeos/input_method/fake_suggestion_handler.cc b/chrome/browser/chromeos/input_method/fake_suggestion_handler.cc new file mode 100644 index 0000000..0ca2750 --- /dev/null +++ b/chrome/browser/chromeos/input_method/fake_suggestion_handler.cc
@@ -0,0 +1,62 @@ +// Copyright 2021 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/chromeos/input_method/fake_suggestion_handler.h" + +namespace chromeos { + +bool FakeSuggestionHandler::DismissSuggestion(int context_id, + std::string* error) { + showing_suggestion_ = false; + dismissed_suggestion_ = true; + suggestion_text_ = u""; + confirmed_length_ = 0; + return true; +} + +bool FakeSuggestionHandler::SetSuggestion( + int context_id, + const ui::ime::SuggestionDetails& details, + std::string* error) { + showing_suggestion_ = true; + context_id_ = context_id; + suggestion_text_ = details.text; + confirmed_length_ = details.confirmed_length; + return true; +} + +bool FakeSuggestionHandler::AcceptSuggestion(int context_id, + std::string* error) { + return false; +} + +void FakeSuggestionHandler::OnSuggestionsChanged( + const std::vector<std::string>& suggestions) {} + +bool FakeSuggestionHandler::SetButtonHighlighted( + int context_id, + const ui::ime::AssistiveWindowButton& button, + bool highlighted, + std::string* error) { + return false; +} + +void FakeSuggestionHandler::ClickButton( + const ui::ime::AssistiveWindowButton& button) {} + +bool FakeSuggestionHandler::AcceptSuggestionCandidate( + int context_id, + const std::u16string& candidate, + std::string* error) { + return false; +} + +bool FakeSuggestionHandler::SetAssistiveWindowProperties( + int context_id, + const AssistiveWindowProperties& assistive_window, + std::string* error) { + return false; +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/input_method/fake_suggestion_handler.h b/chrome/browser/chromeos/input_method/fake_suggestion_handler.h new file mode 100644 index 0000000..c6735d17 --- /dev/null +++ b/chrome/browser/chromeos/input_method/fake_suggestion_handler.h
@@ -0,0 +1,62 @@ +// Copyright 2021 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_CHROMEOS_INPUT_METHOD_FAKE_SUGGESTION_HANDLER_H_ +#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_FAKE_SUGGESTION_HANDLER_H_ + +#include "chrome/browser/chromeos/input_method/assistive_window_properties.h" +#include "chrome/browser/chromeos/input_method/suggestion_handler_interface.h" +#include "chrome/browser/chromeos/input_method/ui/suggestion_details.h" + +namespace chromeos { + +// Fake suggestion handler used for testing. +// +// TODO(crbug/1201529): This class has borrowed heavily from the +// `TestSuggestionHandler` class in personal_info_suggester_unittest.cc. That +// class included a number of testing assertions within the fake whereas this +// class does not. In future CLs we should remove the `TestSuggestionHandler` +// class from personal_info_suggester_unittest.cc and replace it with this +// class. +class FakeSuggestionHandler : public SuggestionHandlerInterface { + public: + // SuggestionHandlerInterface overrides + bool DismissSuggestion(int context_id, std::string* error) override; + bool SetSuggestion(int context_id, + const ui::ime::SuggestionDetails& details, + std::string* error) override; + bool AcceptSuggestion(int context_id, std::string* error) override; + void OnSuggestionsChanged( + const std::vector<std::string>& suggestions) override; + bool SetButtonHighlighted(int context_id, + const ui::ime::AssistiveWindowButton& button, + bool highlighted, + std::string* error) override; + void ClickButton(const ui::ime::AssistiveWindowButton& button) override; + bool AcceptSuggestionCandidate(int context_id, + const std::u16string& candidate, + std::string* error) override; + bool SetAssistiveWindowProperties( + int context_id, + const AssistiveWindowProperties& assistive_window, + std::string* error) override; + + // Test getters + int GetContextId() { return context_id_; } + std::u16string GetSuggestionText() { return suggestion_text_; } + size_t GetConfirmedLength() { return confirmed_length_; } + bool GetShowingSuggestion() { return showing_suggestion_; } + bool GetDismissedSuggestion() { return dismissed_suggestion_; } + + private: + int context_id_ = 0; + std::u16string suggestion_text_; + size_t confirmed_length_ = 0; + bool showing_suggestion_ = false; + bool dismissed_suggestion_ = false; +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_FAKE_SUGGESTION_HANDLER_H_
diff --git a/chrome/browser/chromeos/input_method/multi_word_suggester.cc b/chrome/browser/chromeos/input_method/multi_word_suggester.cc index 600fcabf..3d3f3bc8 100644 --- a/chrome/browser/chromeos/input_method/multi_word_suggester.cc +++ b/chrome/browser/chromeos/input_method/multi_word_suggester.cc
@@ -4,27 +4,59 @@ #include "chrome/browser/chromeos/input_method/multi_word_suggester.h" +#include "base/optional.h" +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/chromeos/input_method/ui/suggestion_details.h" #include "chromeos/services/ime/public/cpp/suggestions.h" namespace chromeos { namespace { using TextSuggestion = ::chromeos::ime::TextSuggestion; +using TextSuggestionType = ::chromeos::ime::TextSuggestionType; + +base::Optional<TextSuggestion> GetMultiWordSuggestion( + const std::vector<TextSuggestion>& suggestions) { + if (suggestions.empty()) + return base::nullopt; + if (suggestions[0].type == TextSuggestionType::kMultiWord) { + // There should only ever be one multi word suggestion given at a time. + DCHECK_EQ(suggestions.size(), 1); + return suggestions[0]; + } + return base::nullopt; +} } // namespace +MultiWordSuggester::MultiWordSuggester( + SuggestionHandlerInterface* suggestion_handler) + : suggestion_handler_(suggestion_handler) {} + MultiWordSuggester::~MultiWordSuggester() = default; -void MultiWordSuggester::OnFocus(int context_id) {} +void MultiWordSuggester::OnFocus(int context_id) { + focused_context_id_ = context_id; +} -void MultiWordSuggester::OnBlur() {} +void MultiWordSuggester::OnBlur() { + focused_context_id_ = 0; +} void MultiWordSuggester::OnExternalSuggestionsUpdated( const std::vector<TextSuggestion>& suggestions) { - // TODO(crbug/1146266): Take any suggestions here and display them. + auto multi_word_suggestion = GetMultiWordSuggestion(suggestions); + if (multi_word_suggestion) { + DisplaySuggestion(multi_word_suggestion.value()); + } } SuggestionStatus MultiWordSuggester::HandleKeyEvent(const ui::KeyEvent& event) { + if (suggestion_shown_) { + DismissSuggestion(); + return SuggestionStatus::kDismiss; + } + return SuggestionStatus::kNotHandled; } @@ -36,7 +68,16 @@ return false; } -void MultiWordSuggester::DismissSuggestion() {} +void MultiWordSuggester::DismissSuggestion() { + std::string error; + suggestion_handler_->DismissSuggestion(focused_context_id_, &error); + if (!error.empty()) { + LOG(ERROR) << "suggest: Failed to dismiss suggestion - " << error; + return; + } + + suggestion_shown_ = false; +} AssistiveType MultiWordSuggester::GetProposeActionType() { return AssistiveType::kMultiWordPrediction; @@ -50,4 +91,28 @@ return {}; } +void MultiWordSuggester::DisplaySuggestion(const TextSuggestion& suggestion) { + ui::ime::SuggestionDetails details; + details.text = base::UTF8ToUTF16(suggestion.text); + + // TODO(crbug/1146266): Handle completion candidates where part of the + // suggested text is already written by the user. + details.confirmed_length = 0; + + // TODO(crbug/1146266): Handle the suggestion ui annotation. + details.show_annotation = false; + + // TODO(crbug/1146266): Add required pref counter to hide settings link. + details.show_setting_link = false; + + std::string error; + suggestion_handler_->SetSuggestion(focused_context_id_, details, &error); + if (!error.empty()) { + LOG(ERROR) << "suggest: Failed to show suggestion in assistive framework" + << " - " << error; + } + + suggestion_shown_ = true; +} + } // namespace chromeos
diff --git a/chrome/browser/chromeos/input_method/multi_word_suggester.h b/chrome/browser/chromeos/input_method/multi_word_suggester.h index 7ff1ce3..43fc4663 100644 --- a/chrome/browser/chromeos/input_method/multi_word_suggester.h +++ b/chrome/browser/chromeos/input_method/multi_word_suggester.h
@@ -17,6 +17,9 @@ // suggestions generated by the system. class MultiWordSuggester : public Suggester { public: + // `suggestion_handler` needs to exist longer than the lifetime of this + // object. + explicit MultiWordSuggester(SuggestionHandlerInterface* suggestion_handler); ~MultiWordSuggester() override; // Suggester overrides: @@ -31,6 +34,17 @@ AssistiveType GetProposeActionType() override; bool HasSuggestions() override; std::vector<ime::TextSuggestion> GetSuggestions() override; + + private: + void DisplaySuggestion(const ime::TextSuggestion& suggestion); + + // The currently focused input (zero if none are focused) + int focused_context_id_ = 0; + + bool suggestion_shown_ = false; + + // Not owned by this class + SuggestionHandlerInterface* suggestion_handler_; }; } // namespace chromeos
diff --git a/chrome/browser/chromeos/input_method/multi_word_suggester_unittest.cc b/chrome/browser/chromeos/input_method/multi_word_suggester_unittest.cc new file mode 100644 index 0000000..0f1aa80 --- /dev/null +++ b/chrome/browser/chromeos/input_method/multi_word_suggester_unittest.cc
@@ -0,0 +1,99 @@ +// Copyright 2021 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/chromeos/input_method/multi_word_suggester.h" + +#include <vector> + +#include "chrome/browser/chromeos/input_method/fake_suggestion_handler.h" +#include "chromeos/services/ime/public/cpp/suggestions.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/events/base_event_utils.h" +#include "ui/events/keycodes/dom/dom_code.h" + +namespace chromeos { +namespace { + +using TextSuggestion = ::chromeos::ime::TextSuggestion; +using TextSuggestionMode = ::chromeos::ime::TextSuggestionMode; +using TextSuggestionType = ::chromeos::ime::TextSuggestionType; + +void SendKeyEvent(MultiWordSuggester* suggester, const ui::DomCode& code) { + suggester->HandleKeyEvent(ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, + code, ui::EF_NONE, ui::DomKey::NONE, + ui::EventTimeForNow())); +} + +} // namespace + +TEST(MultiWordSuggesterTest, IgnoresIrrelevantExternalSuggestions) { + FakeSuggestionHandler suggestion_handler; + MultiWordSuggester suggester(&suggestion_handler); + int focused_context_id = 5; + + std::vector<TextSuggestion> suggestions = { + TextSuggestion{.mode = TextSuggestionMode::kPrediction, + .type = TextSuggestionType::kAssistivePersonalInfo, + .text = "my name is John Wayne"}}; + + suggester.OnFocus(focused_context_id); + suggester.OnExternalSuggestionsUpdated(suggestions); + + EXPECT_FALSE(suggestion_handler.GetShowingSuggestion()); + EXPECT_NE(suggestion_handler.GetContextId(), focused_context_id); + EXPECT_EQ(suggestion_handler.GetSuggestionText(), u""); +} + +TEST(MultiWordSuggesterTest, IgnoresEmpyExternalSuggestions) { + FakeSuggestionHandler suggestion_handler; + MultiWordSuggester suggester(&suggestion_handler); + int focused_context_id = 5; + + suggester.OnFocus(focused_context_id); + suggester.OnExternalSuggestionsUpdated({}); + + EXPECT_FALSE(suggestion_handler.GetShowingSuggestion()); + EXPECT_NE(suggestion_handler.GetContextId(), focused_context_id); + EXPECT_EQ(suggestion_handler.GetSuggestionText(), u""); +} + +TEST(MultiWordSuggesterTest, DisplaysRelevantExternalSuggestions) { + FakeSuggestionHandler suggestion_handler; + MultiWordSuggester suggester(&suggestion_handler); + int focused_context_id = 5; + + std::vector<TextSuggestion> suggestions = { + TextSuggestion{.mode = TextSuggestionMode::kPrediction, + .type = TextSuggestionType::kMultiWord, + .text = "hello there!"}}; + + suggester.OnFocus(focused_context_id); + suggester.OnExternalSuggestionsUpdated(suggestions); + + EXPECT_TRUE(suggestion_handler.GetShowingSuggestion()); + EXPECT_EQ(suggestion_handler.GetContextId(), focused_context_id); + EXPECT_EQ(suggestion_handler.GetSuggestionText(), u"hello there!"); +} + +TEST(MultiWordSuggesterTest, ImmediatelyDismissesSuggestionOnKeyEvent) { + FakeSuggestionHandler suggestion_handler; + MultiWordSuggester suggester(&suggestion_handler); + int focused_context_id = 5; + + std::vector<TextSuggestion> suggestions = { + TextSuggestion{.mode = TextSuggestionMode::kPrediction, + .type = TextSuggestionType::kMultiWord, + .text = "hi there!"}, + }; + + suggester.OnFocus(focused_context_id); + suggester.OnExternalSuggestionsUpdated(suggestions); + SendKeyEvent(&suggester, ui::DomCode::TAB); + + EXPECT_FALSE(suggestion_handler.GetShowingSuggestion()); + EXPECT_TRUE(suggestion_handler.GetDismissedSuggestion()); + EXPECT_EQ(suggestion_handler.GetSuggestionText(), u""); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/input_method/personal_info_suggester_unittest.cc b/chrome/browser/chromeos/input_method/personal_info_suggester_unittest.cc index 50e768f..83bdf545 100644 --- a/chrome/browser/chromeos/input_method/personal_info_suggester_unittest.cc +++ b/chrome/browser/chromeos/input_method/personal_info_suggester_unittest.cc
@@ -32,6 +32,8 @@ using TextSuggestionMode = ::chromeos::ime::TextSuggestionMode; using TextSuggestionType = ::chromeos::ime::TextSuggestionType; +// TODO(crbug/1201529): Update this unit test to use `FakeSuggestionHandler` +// instead. class TestSuggestionHandler : public SuggestionHandlerInterface { public: bool DismissSuggestion(int context_id, std::string* error) override {
diff --git a/chrome/browser/chromeos/note_taking_helper.cc b/chrome/browser/chromeos/note_taking_helper.cc index 36d1ffa..62d5ba7 100644 --- a/chrome/browser/chromeos/note_taking_helper.cc +++ b/chrome/browser/chromeos/note_taking_helper.cc
@@ -62,12 +62,12 @@ // Allowed note-taking app IDs. const char* const kDefaultAllowedAppIds[] = { + web_app::kA4AppId, // TODO(jdufault): Remove dev version? See crbug.com/640828. NoteTakingHelper::kDevKeepExtensionId, NoteTakingHelper::kProdKeepExtensionId, NoteTakingHelper::kNoteTakingWebAppIdTest, NoteTakingHelper::kNoteTakingWebAppIdDev, - web_app::kA4AppId, }; // Returns whether |app_id| looks like it's probably an Android package name
diff --git a/chrome/browser/chromeos/smb_client/smb_kerberos_credentials_updater.h b/chrome/browser/chromeos/smb_client/smb_kerberos_credentials_updater.h index 7e0db20..8bba766 100644 --- a/chrome/browser/chromeos/smb_client/smb_kerberos_credentials_updater.h +++ b/chrome/browser/chromeos/smb_client/smb_kerberos_credentials_updater.h
@@ -10,7 +10,7 @@ #include "base/callback.h" #include "base/macros.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" namespace chromeos {
diff --git a/chrome/browser/chromeos/smb_client/smb_kerberos_credentials_updater_unittest.cc b/chrome/browser/chromeos/smb_client/smb_kerberos_credentials_updater_unittest.cc index 812ec689..f51115cb 100644 --- a/chrome/browser/chromeos/smb_client/smb_kerberos_credentials_updater_unittest.cc +++ b/chrome/browser/chromeos/smb_client/smb_kerberos_credentials_updater_unittest.cc
@@ -8,8 +8,8 @@ #include "base/run_loop.h" #include "base/test/bind.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/ash/login/users/mock_user_manager.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/scoped_testing_local_state.h" #include "chrome/test/base/testing_browser_process.h"
diff --git a/chrome/browser/chromeos/smb_client/smb_service.cc b/chrome/browser/chromeos/smb_client/smb_service.cc index 163f8e9..a0268b2 100644 --- a/chrome/browser/chromeos/smb_client/smb_service.cc +++ b/chrome/browser/chromeos/smb_client/smb_service.cc
@@ -16,11 +16,11 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/time/default_tick_clock.h" #include "base/unguessable_token.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/chromeos/smb_client/discovery/mdns_host_locator.h" #include "chrome/browser/chromeos/smb_client/discovery/netbios_client.h" #include "chrome/browser/chromeos/smb_client/discovery/netbios_host_locator.h"
diff --git a/chrome/browser/chromeos/smb_client/smb_service_factory.cc b/chrome/browser/chromeos/smb_client/smb_service_factory.cc index b3d15f0..84cd128 100644 --- a/chrome/browser/chromeos/smb_client/smb_service_factory.cc +++ b/chrome/browser/chromeos/smb_client/smb_service_factory.cc
@@ -8,10 +8,10 @@ #include "base/time/default_tick_clock.h" #include "chrome/browser/ash/authpolicy/authpolicy_credentials_manager.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/chromeos/file_manager/volume_manager_factory.h" #include "chrome/browser/chromeos/file_system_provider/service_factory.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/chromeos/smb_client/smb_service.h" #include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/enterprise/connectors/file_system/box_api_call_flow.cc b/chrome/browser/enterprise/connectors/file_system/box_api_call_flow.cc index df99c31e..23ff41c 100644 --- a/chrome/browser/enterprise/connectors/file_system/box_api_call_flow.cc +++ b/chrome/browser/enterprise/connectors/file_system/box_api_call_flow.cc
@@ -148,8 +148,7 @@ "No settings control." policy_exception_justification: "Not implemented yet." })"); - // TODO(https://crbug.com/1157959): Add the policy that will turn on/off the - // connector here? + // TODO(https://crbug.com/1157959): Add the policy to turn on/off connector. } // static @@ -400,8 +399,8 @@ base::Optional<std::string> file_read) { if (!file_read) { DLOG(ERROR) << "[BoxApiCallFlow] WholeFileUpload read file failed"; - std::move(callback_).Run( - false, 0); // TODO(https://crbug.com/1165972): error handling + // TODO(https://crbug.com/1165972): error handling + std::move(callback_).Run(false, 0); return; } DCHECK_LE(file_read->size(), kWholeFileUploadMaxSize);
diff --git a/chrome/browser/enterprise/connectors/file_system/box_api_call_flow_unittest.cc b/chrome/browser/enterprise/connectors/file_system/box_api_call_flow_unittest.cc index 41387ab0d..2334cec 100644 --- a/chrome/browser/enterprise/connectors/file_system/box_api_call_flow_unittest.cc +++ b/chrome/browser/enterprise/connectors/file_system/box_api_call_flow_unittest.cc
@@ -752,8 +752,6 @@ void OnResponse(bool success, int response_code, base::Value) { processed_success_ = success; response_code_ = response_code; - if (quit_closure_) - std::move(quit_closure_).Run(); } const std::string file_content_; @@ -762,7 +760,6 @@ base::test::SingleThreadTaskEnvironment task_environment_; data_decoder::test::InProcessDataDecoder decoder_; - base::OnceClosure quit_closure_; base::WeakPtrFactory<BoxPartFileUploadApiCallFlowTest> factory_{this}; }; @@ -880,7 +877,6 @@ } base::test::SingleThreadTaskEnvironment task_environment_; - base::OnceClosure quit_closure_; base::WeakPtrFactory<BoxAbortUploadSessionApiCallFlowTest> factory_{this}; };
diff --git a/chrome/browser/enterprise/connectors/file_system/box_upload_file_chunks_handler.cc b/chrome/browser/enterprise/connectors/file_system/box_upload_file_chunks_handler.cc new file mode 100644 index 0000000..7af5b56 --- /dev/null +++ b/chrome/browser/enterprise/connectors/file_system/box_upload_file_chunks_handler.cc
@@ -0,0 +1,179 @@ +// Copyright 2021 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/enterprise/connectors/file_system/box_upload_file_chunks_handler.h" + +#include "base/base64.h" +#include "base/files/file.h" +#include "base/task/thread_pool.h" +#include "build/build_config.h" +#include "net/base/file_stream.h" +#include "net/base/io_buffer.h" +#include "net/base/net_errors.h" + +namespace { + +const uint32_t kOpenFlag = base::File::FLAG_OPEN | base::File::FLAG_READ; + +bool CheckChunkSize(const size_t chunks, + const size_t file_size, + const size_t chunk_size, + const size_t bytes_read) { + if (chunks < file_size / chunk_size) { + CHECK_EQ(bytes_read, chunk_size); + } else { + CHECK_GT(bytes_read, 0U); + CHECK_LE(bytes_read, chunk_size); + } + return true; +} + +} // namespace + +namespace enterprise_connectors { + +using FileChunksHandler = BoxUploader::FileChunksHandler; + +FileChunksHandler::FileChunksHandler(const base::FilePath& path, + const size_t file_size, + const size_t chunk_size) + : sequenced_file_(base::ThreadPool::CreateSequencedTaskRunner( + {base::MayBlock(), base::TaskPriority::USER_VISIBLE})), + file_size_(file_size), + chunk_size_(chunk_size) { + sequenced_file_.AsyncCall(&base::File::Initialize).WithArgs(path, kOpenFlag); +} + +FileChunksHandler::~FileChunksHandler() = default; + +void FileChunksHandler::StartReading( + FilePartiallyReadCallback file_partially_read_cb, + FileCompletelyReadCallback file_completely_read_cb) { + file_partially_read_cb_ = file_partially_read_cb; + file_completely_read_cb_ = std::move(file_completely_read_cb); + CheckFileError(base::BindOnce(&FileChunksHandler::ReadIfValid, + weak_factory_.GetWeakPtr()), + true); +} + +void FileChunksHandler::ReadIfValid(bool file_valid) { + if (!file_valid) { + return OnFileCompletelyRead(false); + } + chunk_content_.resize(chunk_size_); + base::SHA1Init(sha1_ctx_); + Read(); +} + +void FileChunksHandler::Read() { + auto bytes_remaining = file_size_ - byte_to_; + DCHECK_GE(bytes_remaining, 0U); + if (bytes_remaining == 0U) { + return OnFileCompletelyRead(true); + } else if (bytes_remaining < chunk_content_.size()) { + chunk_content_.resize(bytes_remaining); + } + + byte_from_ = byte_to_; + + DCHECK(sequenced_file_); + sequenced_file_.AsyncCall(&base::File::ReadAtCurrentPos) + .WithArgs(&chunk_content_[0U], chunk_content_.size()) + .Then(base::BindOnce(&FileChunksHandler::OnFileChunkRead, + weak_factory_.GetWeakPtr())); +} + +void FileChunksHandler::OnFileChunkRead(int bytes_read) { + if (bytes_read > 0) { + byte_to_ += bytes_read; + ++chunks_read_; + DCHECK(CheckChunkSize(chunks_read_, file_size_, chunk_size_, + static_cast<size_t>(bytes_read))); + DCHECK_EQ(byte_to_, std::min(file_size_, chunks_read_ * chunk_size_)); + DCHECK_EQ(static_cast<size_t>(bytes_read), chunk_content_.size()) + << "at " << byte_to_ << " / total " << file_size_ << " bytes"; + + base::SHA1Update(chunk_content_, sha1_ctx_); + + // Everywhere else in this class, byte_to_ is used to verify chunk size and + // bytes already read, exclusive of the last byte read. However, the byte + // ranges used to upload each part's content need to be non-overlapping. + // Therefore, PartInfo::byte_to == byte_to_ = 1. + size_t range_to = byte_to_ - 1; + file_partially_read_cb_.Run(PartInfo{chunk_content_, byte_from_, range_to}); + + } else { + DLOG(ERROR) << "Failed to read file chunk from byte " << byte_from_; + CheckFileError(base::BindOnce(&FileChunksHandler::OnFileCompletelyRead, + weak_factory_.GetWeakPtr()), + /* step_success = */ false); + } +} + +void FileChunksHandler::OnFileCompletelyRead(bool success) { + sequenced_file_.Reset(); + + if (!success) { + LOG(ERROR) << "Terminating file read due to failure!"; + file_partially_read_cb_.Run(PartInfo()); + return; + } + + DCHECK_EQ(byte_to_, file_size_); + + // Finalize the file's SHA-1 digest and format it into base64 encoding as + // required by box API. + base::SHA1Digest sha1_digest; + base::SHA1Final(sha1_ctx_, sha1_digest); + auto digest_str = base::Base64Encode(base::span<const uint8_t>(sha1_digest)); + + DCHECK(file_completely_read_cb_); + std::move(file_completely_read_cb_).Run(digest_str); +} + +void FileChunksHandler::ContinueToReadChunk(size_t n) { + DCHECK_EQ(chunks_read_ + 1, n); + Read(); +} + +void FileChunksHandler::CheckFileError(FileCheckCallback cb, + bool step_success) { + sequenced_file_.AsyncCall(&base::File::IsValid) + .Then(base::BindOnce(&FileChunksHandler::OnFileChecked, + weak_factory_.GetWeakPtr(), std::move(cb), + step_success)); +} + +void FileChunksHandler::OnFileChecked(FileCheckCallback cb, + bool step_success, + bool file_valid) { + if (!file_valid) { + LOG(ERROR) << "File is invalid!"; + sequenced_file_.AsyncCall(&base::File::error_details) + .Then(base::BindOnce(&FileChunksHandler::OnFileError, + weak_factory_.GetWeakPtr(), std::move(cb))); + } else { + std::move(cb).Run(step_success); + } +} + +void FileChunksHandler::OnFileError(FileCheckCallback cb, + base::File::Error error) { + LOG(ERROR) << "File Error: " << base::File::ErrorToString(error); + sequenced_file_.Reset(); + std::move(cb).Run(false); +} + +void FileChunksHandler::SkipToOnFileChunkReadForTesting( + std::string content, + int bytes_read, + FilePartiallyReadCallback file_partially_read_cb, + FileCompletelyReadCallback file_completely_read_cb) { + chunk_content_ = content; + file_partially_read_cb_ = file_partially_read_cb; + file_completely_read_cb_ = std::move(file_completely_read_cb); + OnFileChunkRead(bytes_read); +} + +} // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/file_system/box_upload_file_chunks_handler.h b/chrome/browser/enterprise/connectors/file_system/box_upload_file_chunks_handler.h new file mode 100644 index 0000000..9bebb987 --- /dev/null +++ b/chrome/browser/enterprise/connectors/file_system/box_upload_file_chunks_handler.h
@@ -0,0 +1,93 @@ +// Copyright 2021 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_ENTERPRISE_CONNECTORS_FILE_SYSTEM_BOX_UPLOAD_FILE_CHUNKS_HANDLER_H_ +#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_FILE_SYSTEM_BOX_UPLOAD_FILE_CHUNKS_HANDLER_H_ + +#include "chrome/browser/enterprise/connectors/file_system/box_uploader.h" + +#include "base/callback.h" +#include "base/files/file.h" +#include "base/files/file_path.h" +#include "base/hash/sha1.h" +#include "base/threading/sequence_bound.h" +#include "base/values.h" +#include "chrome/browser/enterprise/connectors/file_system/box_api_call_flow.h" + +namespace enterprise_connectors { + +// Helper class to read and prepare file content for chunked uploads to Box. +// API reference: https://developer.box.com/guides/uploads/chunked/. +// +// Note that although this class creates file digest using SHA-1, it is not +// meant for cryptographic security, so the corresponding API requests must be +// made via https for security/privacy. It uses SHA-1 only because Box requires +// SHA-1 for file integrity check, not to detect MitM attacks. +class BoxUploader::FileChunksHandler { + public: + struct PartInfo { + const std::string content; + size_t byte_from; // Inclusive of 1st byte of the file part. + size_t byte_to; // Inclusive of last byte in the file part. + // Therefore byte_to == byte_from + content.size() - 1. + }; + // Arg: PartInfo for the last chunk read. + using FilePartiallyReadCallback = base::RepeatingCallback<void(PartInfo)>; + // Arg: SHA-1 digest of the entire file. + using FileCompletelyReadCallback = base::OnceCallback<void(std::string)>; + FileChunksHandler(const base::FilePath& path, + const size_t file_size, + const size_t chunk_size); + ~FileChunksHandler(); + + // Kick off reading of the file; this class calls |file_partially_read_cb| + // each time a chunk is read, including the last chunk. After the last chunk + // is read and OnPartUploaded() is called, owner of this class is notified via + // |file_completedly_read_cb|. + void StartReading(FilePartiallyReadCallback file_partially_read_cb, + FileCompletelyReadCallback file_completely_read_cb); + // Called by owner of this class to continue to read the next chunk. + void ContinueToReadChunk(size_t n); + + void SkipToOnFileChunkReadForTesting( + std::string content, + int bytes_read, + FilePartiallyReadCallback file_partially_read_cb, + FileCompletelyReadCallback file_completely_read_cb); + + private: + void ReadIfValid(bool file_valid); + void Read(); + void OnFileChunkRead(int bytes_read); + void OnFileCompletelyRead(bool success); + + // Helper methods to check if file open operation succeeded, and log failures. + // Arg: bool indicates whether the file read was successful. + using FileCheckCallback = base::OnceCallback<void(bool)>; + void CheckFileError(FileCheckCallback cb, bool step_success); + void OnFileChecked(FileCheckCallback cb, bool step_success, bool file_valid); + void OnFileError(FileCheckCallback cb, base::File::Error error); + + base::SequenceBound<base::File> sequenced_file_; + size_t chunks_read_{0U}; // # of chunks read; checked with byte_from/to_. + // Byte range for the chunk read into chunk_content_, indexed as [0, size): + size_t byte_from_{0U}; // Inclusive of 1st byte in the chunk read. + size_t byte_to_{0U}; // Exclusive of last byte in the chunk read. + std::string chunk_content_; // Each chunk is byte [byte_from_, byte_to). + base::SHA1Context sha1_ctx_; // Streaming SHA-1; updated by each chunk read. + // After the last chunk is read, sha1_ctx_ is finalized into sha1_digest, + // passed back to owner via |file_completely_read_cb| provided in + // StartReading(). + + FilePartiallyReadCallback file_partially_read_cb_; + FileCompletelyReadCallback file_completely_read_cb_; + const size_t file_size_; // Size of the entire file. + const size_t chunk_size_; // Size for each file chunk to be read/uploaded. + + base::WeakPtrFactory<FileChunksHandler> weak_factory_{this}; +}; + +} // namespace enterprise_connectors + +#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_FILE_SYSTEM_BOX_UPLOAD_FILE_CHUNKS_HANDLER_H_
diff --git a/chrome/browser/enterprise/connectors/file_system/box_upload_file_chunks_handler_unittest.cc b/chrome/browser/enterprise/connectors/file_system/box_upload_file_chunks_handler_unittest.cc new file mode 100644 index 0000000..a7c2720 --- /dev/null +++ b/chrome/browser/enterprise/connectors/file_system/box_upload_file_chunks_handler_unittest.cc
@@ -0,0 +1,199 @@ +// Copyright 2021 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. +// +// A complete set of unit tests for BoxUploadFileChunksHandler. + +#include "chrome/browser/enterprise/connectors/file_system/box_upload_file_chunks_handler.h" + +#include "base/base64.h" +#include "base/files/file_util.h" +#include "base/files/scoped_temp_dir.h" +#include "base/test/task_environment.h" +#include "chrome/browser/enterprise/connectors/file_system/box_api_call_test_helper.h" +#include "net/base/net_errors.h" +#include "net/http/http_status_code.h" +#include "services/network/public/mojom/url_response_head.mojom.h" +#include "services/network/test/test_utils.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace enterprise_connectors { +const size_t kChunkSize = BoxApiCallFlow::kChunkFileUploadMinSize; +using FileChunksHandler = BoxUploader::FileChunksHandler; + +class BoxUploadFileChunksHandlerTest : public testing::Test { + public: + void Run() { + quit_closure_ = run_loop_.QuitClosure(); + run_loop_.Run(); + } + + void Quit() { + ASSERT_TRUE(quit_closure_); + std::move(quit_closure_).Run(); + } + + void WriteTestFileAndRead(const std::string& content) { + ASSERT_TRUE(base::WriteFile(file_path_, content)) << file_path_; + InitializeReaderAndStart(content.size()); + Run(); + } + + static size_t CalculateExpectedChunkReadCount(size_t content_length) { + size_t expected_read_count = content_length / kChunkSize; + if (content_length % kChunkSize != 0) { + ++expected_read_count; + } + return expected_read_count; + } + + protected: + void SetUp() override { + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + file_path_ = temp_dir_.GetPath().Append(file_name_); + } + + virtual void InitializeReaderAndStart(size_t file_size) { + chunked_reader_ = + std::make_unique<FileChunksHandler>(file_path_, file_size, kChunkSize); + chunked_reader_->StartReading( + base::BindRepeating(&BoxUploadFileChunksHandlerTest::OnFileChunkRead, + base::Unretained(this)), + base::BindOnce(&BoxUploadFileChunksHandlerTest::OnFileCompletelyRead, + base::Unretained(this))); + } + + void OnFileCompletelyRead(std::string sha1_digest) { + file_finished_reading_ = true; + file_successfully_read_ = !sha1_digest.empty(); + file_sha1_digest_ = sha1_digest; + return Quit(); + } + + void OnFileChunkRead(FileChunksHandler::PartInfo part_info) { + file_chunk_successfully_read_ = part_info.content.size(); + if (!file_chunk_successfully_read_) { + return Quit(); + } + + file_content_.append(part_info.content); + ++file_chunk_read_count_; + + chunked_reader_->ContinueToReadChunk(file_chunk_read_count_ + 1); + } + + std::unique_ptr<FileChunksHandler> chunked_reader_; + const base::FilePath file_name_{ + FILE_PATH_LITERAL("box_upload_file_chunk_handler_test.txt")}; + base::FilePath file_path_; + std::string file_content_; + + bool file_chunk_successfully_read_ = false; + bool file_finished_reading_ = false; + bool file_successfully_read_ = false; + size_t file_chunk_read_count_ = 0; + std::string file_sha1_digest_; + + private: + base::ScopedTempDir temp_dir_; + base::test::TaskEnvironment task_environment_; + base::RunLoop run_loop_; + base::OnceClosure quit_closure_; +}; + +TEST_F(BoxUploadFileChunksHandlerTest, Test1Chunk) { + std::string expected_file_content("abcdefghijklmn"); + + WriteTestFileAndRead(expected_file_content); + // Includes chunked_reader_->MakePartFileUploadApiCallFlow() and + // OnPartUploaded() to arrive at OnFileCompletelyRead() and return. + + ASSERT_TRUE(file_chunk_successfully_read_); + ASSERT_TRUE(file_finished_reading_); + EXPECT_TRUE(file_successfully_read_); + EXPECT_EQ(file_chunk_read_count_, 1U); + EXPECT_EQ(file_content_.size(), expected_file_content.size()); + ASSERT_EQ(file_content_, expected_file_content); + + ASSERT_TRUE(chunked_reader_); + std::string expected_sha; + base::Base64Encode(base::SHA1HashString(expected_file_content), + &expected_sha); + ASSERT_EQ(file_sha1_digest_, expected_sha); +} + +class BoxUploadFileChunksHandler_MultipleChunksTest + : public BoxUploadFileChunksHandlerTest, + public testing::WithParamInterface<size_t> {}; + +TEST_P(BoxUploadFileChunksHandler_MultipleChunksTest, + BigFileReadInMultipleChunks) { + const size_t fill_size = GetParam() * 1024 * 1024; + const size_t total_size = fill_size * 3; + ASSERT_GT(total_size, kChunkSize) << "Adjust test files to be bigger?"; + + std::string expected_file_content; + expected_file_content.reserve(total_size); + expected_file_content.resize(fill_size, 'a'); + expected_file_content += std::string(fill_size, 'b'); + expected_file_content += std::string(fill_size, 'c'); + + const size_t expected_chunk_read_count = + CalculateExpectedChunkReadCount(expected_file_content.size()); + WriteTestFileAndRead(expected_file_content); + // Includes chunked_reader_->MakePartFileUploadApiCallFlow() and + // OnPartUploaded() to arrive at OnFileCompletelyRead() and return. + + ASSERT_TRUE(file_chunk_successfully_read_); + ASSERT_TRUE(file_finished_reading_); + EXPECT_TRUE(file_successfully_read_); + EXPECT_EQ(file_chunk_read_count_, expected_chunk_read_count); + EXPECT_EQ(file_content_.size(), expected_file_content.size()); + ASSERT_EQ(file_content_.compare(expected_file_content), 0); + + ASSERT_TRUE(chunked_reader_); + std::string expected_sha; + base::Base64Encode(base::SHA1HashString(expected_file_content), + &expected_sha); + ASSERT_EQ(file_sha1_digest_, expected_sha); +} + +INSTANTIATE_TEST_CASE_P(BoxUploadFileChunksHandlerTest, + BoxUploadFileChunksHandler_MultipleChunksTest, + testing::Values(8, 11, 15)); + +class BoxUploadFileChunksHandler_FailureTest + : public BoxUploadFileChunksHandlerTest { + public: + void InitializeReaderAndStart(size_t file_size) override { + chunked_reader_ = + std::make_unique<FileChunksHandler>(file_path_, file_size, kChunkSize); + chunked_reader_->SkipToOnFileChunkReadForTesting( + std::string(), -1, + base::BindRepeating( + &BoxUploadFileChunksHandler_FailureTest::OnFileChunkRead, + base::Unretained(this)), + base::BindOnce( + &BoxUploadFileChunksHandler_FailureTest::OnFileCompletelyRead, + base::Unretained(this))); + } +}; + +TEST_F(BoxUploadFileChunksHandler_FailureTest, NegativeBytesRead) { + WriteTestFileAndRead("BoxUploadFileChunksHandler_FailureTest"); + + EXPECT_FALSE(file_finished_reading_); + EXPECT_FALSE(file_successfully_read_); + ASSERT_FALSE(file_chunk_successfully_read_); +} + +TEST_F(BoxUploadFileChunksHandler_FailureTest, NoFile) { + InitializeReaderAndStart(100); // Without creating a test file to be opened. + Run(); + + ASSERT_FALSE(file_finished_reading_); + ASSERT_FALSE(file_successfully_read_); + ASSERT_FALSE(file_chunk_successfully_read_); +} + +} // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/file_system/box_uploader.h b/chrome/browser/enterprise/connectors/file_system/box_uploader.h index 02b2a258..ff61656 100644 --- a/chrome/browser/enterprise/connectors/file_system/box_uploader.h +++ b/chrome/browser/enterprise/connectors/file_system/box_uploader.h
@@ -44,6 +44,8 @@ void NotifyAuthenFailureForTesting(); void NotifyResultForTesting(bool success); + class FileChunksHandler; // To be moved into BoxChunkedFileUploader. + protected: // Constructor with download::DownloadItem* to access download_item fields but // does not store the pointer internally and the ownership of download_item
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn index e2afe35..655f917 100644 --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn
@@ -226,6 +226,8 @@ "api/image_writer_private/write_from_file_operation.h", "api/image_writer_private/write_from_url_operation.cc", "api/image_writer_private/write_from_url_operation.h", + "api/image_writer_private/xz_extractor.cc", + "api/image_writer_private/xz_extractor.h", "api/image_writer_private/zip_extractor.cc", "api/image_writer_private/zip_extractor.h", "api/instance_id/instance_id_api.cc", @@ -812,6 +814,7 @@ "//chrome/browser/web_applications/extensions", "//chrome/common/extensions/api:extensions_features", "//chrome/common/safe_browsing:proto", + "//chrome/services/file_util/public/mojom:mojom", "//chrome/services/removable_storage_writer/public/mojom", "//components/autofill/content/browser", "//components/bookmarks/browser",
diff --git a/chrome/browser/extensions/api/image_writer_private/extraction_properties.h b/chrome/browser/extensions/api/image_writer_private/extraction_properties.h index 4638ba5..1f85537 100644 --- a/chrome/browser/extensions/api/image_writer_private/extraction_properties.h +++ b/chrome/browser/extensions/api/image_writer_private/extraction_properties.h
@@ -5,6 +5,10 @@ #ifndef CHROME_BROWSER_EXTENSIONS_API_IMAGE_WRITER_PRIVATE_EXTRACTION_PROPERTIES_H_ #define CHROME_BROWSER_EXTENSIONS_API_IMAGE_WRITER_PRIVATE_EXTRACTION_PROPERTIES_H_ +#include <stdint.h> + +#include <string> + #include "base/callback.h" #include "base/files/file_path.h" @@ -16,13 +20,18 @@ ExtractionProperties(ExtractionProperties&&); ~ExtractionProperties(); + using OpenCallback = base::OnceCallback<void(const base::FilePath&)>; + using CompleteCallback = base::OnceClosure; + using FailureCallback = base::OnceCallback<void(const std::string&)>; + using ProgressCallback = base::RepeatingCallback<void(int64_t, int64_t)>; + base::FilePath image_path; base::FilePath temp_dir_path; - base::OnceCallback<void(const base::FilePath&)> open_callback; - base::OnceClosure complete_callback; - base::OnceCallback<void(const std::string&)> failure_callback; - base::RepeatingCallback<void(int64_t, int64_t)> progress_callback; + OpenCallback open_callback; + CompleteCallback complete_callback; + FailureCallback failure_callback; + ProgressCallback progress_callback; }; } // namespace image_writer
diff --git a/chrome/browser/extensions/api/image_writer_private/extractor_browsertest.cc b/chrome/browser/extensions/api/image_writer_private/extractor_browsertest.cc new file mode 100644 index 0000000..a59efff5 --- /dev/null +++ b/chrome/browser/extensions/api/image_writer_private/extractor_browsertest.cc
@@ -0,0 +1,92 @@ +// Copyright 2021 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 <string> +#include <utility> + +#include "base/files/file_util.h" +#include "base/files/scoped_temp_dir.h" +#include "base/run_loop.h" +#include "base/test/gmock_callback_support.h" +#include "base/test/mock_callback.h" +#include "chrome/browser/extensions/api/image_writer_private/error_messages.h" +#include "chrome/browser/extensions/api/image_writer_private/extraction_properties.h" +#include "chrome/browser/extensions/api/image_writer_private/test_utils.h" +#include "chrome/browser/extensions/api/image_writer_private/xz_extractor.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "content/public/test/browser_test.h" + +namespace extensions { +namespace image_writer { + +using ::testing::_; +using ::testing::NiceMock; +using ::testing::SaveArg; +using ::testing::StrictMock; + +class ExtractorBrowserTest : public InProcessBrowserTest { + protected: + ExtractorBrowserTest() = default; + ~ExtractorBrowserTest() override = default; + + void SetUpOnMainThread() override { + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + + properties_.temp_dir_path = temp_dir_.GetPath(); + properties_.open_callback = open_callback_.Get(); + properties_.complete_callback = complete_callback_.Get(); + properties_.failure_callback = failure_callback_.Get(); + properties_.progress_callback = progress_callback_.Get(); + } + + protected: + StrictMock<base::MockCallback<ExtractionProperties::OpenCallback>> + open_callback_; + StrictMock<base::MockCallback<ExtractionProperties::CompleteCallback>> + complete_callback_; + StrictMock<base::MockCallback<ExtractionProperties::FailureCallback>> + failure_callback_; + NiceMock<base::MockCallback<ExtractionProperties::ProgressCallback>> + progress_callback_; + + ExtractionProperties properties_; + base::ScopedTempDir temp_dir_; +}; + +IN_PROC_BROWSER_TEST_F(ExtractorBrowserTest, ExtractTarXz) { + base::ThreadRestrictions::SetIOAllowed(true); + + base::FilePath test_data_dir; + ASSERT_TRUE(GetTestDataDirectory(&test_data_dir)); + properties_.image_path = test_data_dir.AppendASCII("test.tar.xz"); + + base::FilePath out_path; + base::RunLoop run_loop; + EXPECT_CALL(open_callback_, Run(_)).WillOnce(SaveArg<0>(&out_path)); + EXPECT_CALL(complete_callback_, Run()) + .WillOnce(base::test::RunClosure(run_loop.QuitClosure())); + XzExtractor::Extract(std::move(properties_)); + run_loop.Run(); + + std::string contents; + ASSERT_TRUE(base::ReadFileToString(out_path, &contents)); + EXPECT_EQ("foo\n", contents); +} + +IN_PROC_BROWSER_TEST_F(ExtractorBrowserTest, ExtractNonExistentTarXz) { + base::ThreadRestrictions::SetIOAllowed(true); + + base::FilePath test_data_dir; + ASSERT_TRUE(GetTestDataDirectory(&test_data_dir)); + properties_.image_path = test_data_dir.AppendASCII("non_existent.tar.xz"); + + base::RunLoop run_loop; + EXPECT_CALL(failure_callback_, Run(error::kUnzipGenericError)) + .WillOnce(base::test::RunClosure(run_loop.QuitClosure())); + XzExtractor::Extract(std::move(properties_)); + run_loop.Run(); +} + +} // namespace image_writer +} // namespace extensions
diff --git a/chrome/browser/extensions/api/image_writer_private/extractor_unittest.cc b/chrome/browser/extensions/api/image_writer_private/extractor_unittest.cc index 4fec7d9d..f01e72b9 100644 --- a/chrome/browser/extensions/api/image_writer_private/extractor_unittest.cc +++ b/chrome/browser/extensions/api/image_writer_private/extractor_unittest.cc
@@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <string> +#include <utility> + #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/run_loop.h" +#include "base/test/gmock_callback_support.h" +#include "base/test/mock_callback.h" #include "base/test/task_environment.h" #include "chrome/browser/extensions/api/image_writer_private/error_messages.h" #include "chrome/browser/extensions/api/image_writer_private/extraction_properties.h" @@ -15,83 +20,75 @@ namespace extensions { namespace image_writer { +using ::testing::_; +using ::testing::NiceMock; +using ::testing::SaveArg; +using ::testing::StrictMock; + class ExtractorTest : public testing::Test { - public: + protected: ExtractorTest() = default; ~ExtractorTest() override = default; void SetUp() override { - testing::Test::SetUp(); ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); properties_.temp_dir_path = temp_dir_.GetPath(); - properties_.open_callback = - base::BindOnce(&ExtractorTest::OnOpenSuccess, base::Unretained(this)); - properties_.complete_callback = - base::BindOnce(&ExtractorTest::OnComplete, base::Unretained(this)); - properties_.failure_callback = - base::BindOnce(&ExtractorTest::OnError, base::Unretained(this)); - properties_.progress_callback = - base::BindRepeating(&ExtractorTest::OnProgress, base::Unretained(this)); + properties_.open_callback = open_callback_.Get(); + properties_.complete_callback = complete_callback_.Get(); + properties_.failure_callback = failure_callback_.Get(); + properties_.progress_callback = progress_callback_.Get(); } - void OnOpenSuccess(const base::FilePath& out_path) { out_path_ = out_path; } - - void OnComplete() { - is_complete_ = true; - run_loop_.Quit(); - } - - void OnError(const std::string& error) { - error_ = error; - run_loop_.Quit(); - } - - void OnProgress(int64_t total_bytes, int64_t curr_bytes) {} - protected: - base::FilePath out_path_; - bool is_complete_ = false; - std::string error_; + StrictMock<base::MockCallback<ExtractionProperties::OpenCallback>> + open_callback_; + StrictMock<base::MockCallback<ExtractionProperties::CompleteCallback>> + complete_callback_; + StrictMock<base::MockCallback<ExtractionProperties::FailureCallback>> + failure_callback_; + NiceMock<base::MockCallback<ExtractionProperties::ProgressCallback>> + progress_callback_; ExtractionProperties properties_; - base::ScopedTempDir temp_dir_; base::test::TaskEnvironment task_environment_; - - base::RunLoop run_loop_; }; TEST_F(ExtractorTest, ExtractTar) { base::FilePath test_data_dir; ASSERT_TRUE(GetTestDataDirectory(&test_data_dir)); - properties_.image_path = test_data_dir.AppendASCII("test.tar"); - TarExtractor::Extract(std::move(properties_)); - run_loop_.Run(); - EXPECT_TRUE(is_complete_); - EXPECT_TRUE(error_.empty()); + base::FilePath out_path; + base::RunLoop run_loop; + EXPECT_CALL(open_callback_, Run(_)).WillOnce(SaveArg<0>(&out_path)); + EXPECT_CALL(complete_callback_, Run()) + .WillOnce(base::test::RunClosure(run_loop.QuitClosure())); + TarExtractor::Extract(std::move(properties_)); + run_loop.Run(); std::string contents; - ASSERT_TRUE(base::ReadFileToString(out_path_, &contents)); + ASSERT_TRUE(base::ReadFileToString(out_path, &contents)); EXPECT_EQ("foo\n", contents); } TEST_F(ExtractorTest, ExtractTarLargerThanChunk) { base::FilePath test_data_dir; ASSERT_TRUE(GetTestDataDirectory(&test_data_dir)); - properties_.image_path = test_data_dir.AppendASCII("test_large.tar"); - TarExtractor::Extract(std::move(properties_)); - run_loop_.Run(); - EXPECT_TRUE(is_complete_); - EXPECT_TRUE(error_.empty()); + base::FilePath out_path; + base::RunLoop run_loop; + EXPECT_CALL(open_callback_, Run(_)).WillOnce(SaveArg<0>(&out_path)); + EXPECT_CALL(complete_callback_, Run()) + .WillOnce(base::test::RunClosure(run_loop.QuitClosure())); + TarExtractor::Extract(std::move(properties_)); + run_loop.Run(); std::string contents; - ASSERT_TRUE(base::ReadFileToString(out_path_, &contents)); + ASSERT_TRUE(base::ReadFileToString(out_path, &contents)); // Larger than the buffer of SingleFileTarReader. EXPECT_EQ(10u * 1024u, contents.size()); } @@ -99,13 +96,13 @@ TEST_F(ExtractorTest, ExtractNonExistentTar) { base::FilePath test_data_dir; ASSERT_TRUE(GetTestDataDirectory(&test_data_dir)); - properties_.image_path = test_data_dir.AppendASCII("non_existent.tar"); - TarExtractor::Extract(std::move(properties_)); - run_loop_.Run(); - EXPECT_FALSE(is_complete_); - EXPECT_EQ(error::kUnzipGenericError, error_); + base::RunLoop run_loop; + EXPECT_CALL(failure_callback_, Run(error::kUnzipGenericError)) + .WillOnce(base::test::RunClosure(run_loop.QuitClosure())); + TarExtractor::Extract(std::move(properties_)); + run_loop.Run(); } // TODO(tetsui): Add a test of passing a non-tar file to TarExtractor.
diff --git a/chrome/browser/extensions/api/image_writer_private/operation.cc b/chrome/browser/extensions/api/image_writer_private/operation.cc index 04128a06..44ce8f5 100644 --- a/chrome/browser/extensions/api/image_writer_private/operation.cc +++ b/chrome/browser/extensions/api/image_writer_private/operation.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/extensions/api/image_writer_private/extraction_properties.h" #include "chrome/browser/extensions/api/image_writer_private/operation_manager.h" #include "chrome/browser/extensions/api/image_writer_private/tar_extractor.h" +#include "chrome/browser/extensions/api/image_writer_private/xz_extractor.h" #include "chrome/browser/extensions/api/image_writer_private/zip_extractor.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" @@ -28,9 +29,9 @@ // Returns true if the file at |image_path| is an archived image. bool IsArchive(const base::FilePath& image_path) { - // TODO(tetsui): Support .tar.xz file format. return ZipExtractor::IsZipFile(image_path) || - TarExtractor::IsTarFile(image_path); + TarExtractor::IsTarFile(image_path) || + XzExtractor::IsXzFile(image_path); } // Extracts the archive at |image_path| using to |temp_dir_path| using a proper @@ -40,8 +41,11 @@ ZipExtractor::Extract(std::move(properties)); } else if (TarExtractor::IsTarFile(properties.image_path)) { TarExtractor::Extract(std::move(properties)); + } else if (XzExtractor::IsXzFile(properties.image_path)) { + XzExtractor::Extract(std::move(properties)); + } else { + NOTREACHED(); } - // TODO(tetsui): Support .tar.xz file format. } } // namespace
diff --git a/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.cc b/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.cc index dce1566..691ef3c 100644 --- a/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.cc +++ b/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.h" +#include <algorithm> #include <string> #include "base/check.h" @@ -21,11 +22,12 @@ SingleFileTarReader::~SingleFileTarReader() = default; -bool SingleFileTarReader::ExtractChunk() { - int bytes_read = - delegate_->ReadTarFile(buffer_.data(), buffer_.size(), &error_id_); - if (bytes_read < 0) { - return false; +SingleFileTarReader::Result SingleFileTarReader::ExtractChunk() { + uint32_t bytes_read = buffer_.size(); + Result result = + delegate_->ReadTarFile(buffer_.data(), &bytes_read, &error_id_); + if (result != Result::kSuccess) { + return result; } int offset = 0; @@ -34,7 +36,7 @@ if (total_bytes_ == 0) { if (bytes_read < 512) { error_id_ = error::kUnzipInvalidArchive; - return false; + return Result::kFailure; } // TODO(tetsui): check the file header checksum @@ -53,13 +55,13 @@ std::min<uint64_t>(total_bytes_ - curr_bytes_, bytes_read - offset); if (!delegate_->WriteContents(buffer_.data() + offset, bytes_written, &error_id_)) { - return false; + return Result::kFailure; } curr_bytes_ += bytes_written; // TODO(tetsui): check it's the end of the file - return true; + return Result::kSuccess; } bool SingleFileTarReader::IsComplete() const {
diff --git a/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.h b/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.h index 2265cdf..7bccae2 100644 --- a/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.h +++ b/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.h
@@ -5,11 +5,13 @@ #ifndef CHROME_BROWSER_EXTENSIONS_API_IMAGE_WRITER_PRIVATE_SINGLE_FILE_TAR_READER_H_ #define CHROME_BROWSER_EXTENSIONS_API_IMAGE_WRITER_PRIVATE_SINGLE_FILE_TAR_READER_H_ -#include "base/gtest_prod_util.h" +#include <stdint.h> #include <string> #include <vector> +#include "base/gtest_prod_util.h" + namespace extensions { namespace image_writer { @@ -20,17 +22,23 @@ // multiple files is rejected as error. class SingleFileTarReader { public: + enum class Result { kSuccess, kFailure, kShouldWait }; + // An interface that delegates file I/O of SingleFileTarReader. class Delegate { public: + using Result = SingleFileTarReader::Result; + virtual ~Delegate() = default; - // Reads input data and returns the number of bytes that is actually read. - // The input data will be written to |data|. |size| is the size of the - // |data| buffer. Usually the return value is same as |size|, but it can be - // smaller than |size| at the end of the file. - // Returns a negative number and sets |error_id| if it fails. - virtual int ReadTarFile(char* data, int size, std::string* error_id) = 0; + // Reads input data and returns kSuccess if it succeeds. + // The input data will be written to |data|. |*size| is initially the size + // of the |data| buffer. |*size| will be set to the amount actually read. + // Returns kShouldWait if the data is still not available. + // Returns kFailure and sets |error_id| if it fails. + virtual Result ReadTarFile(char* data, + uint32_t* size, + std::string* error_id) = 0; // Writes the passed data. |size| is the size of the |data| buffer. // Returns false and sets |error_id| if it fails. @@ -46,8 +54,12 @@ // Extracts a chunk of the tar file. To fully extract the file, the caller has // to repeatedly call this function until IsComplete() returns true. - // Returns false if it fails. error_id() identifies the reason of the error. - bool ExtractChunk(); + // Returns kShouldWait if the input data is still not available. The caller + // has to call ExtractChunk() again when the data is ready. The detail depends + // on the implementation of the delegate. + // Returns kFailure if it fails. error_id() identifies the reason of the + // error. + Result ExtractChunk(); bool IsComplete() const;
diff --git a/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader_unittest.cc b/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader_unittest.cc index 7ec7f6a..f6643a4 100644 --- a/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader_unittest.cc +++ b/chrome/browser/extensions/api/image_writer_private/single_file_tar_reader_unittest.cc
@@ -4,6 +4,9 @@ #include "chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.h" +#include <memory> +#include <vector> + #include "base/files/file_util.h" #include "chrome/browser/extensions/api/image_writer_private/test_utils.h" #include "testing/gtest/include/gtest/gtest.h" @@ -27,8 +30,16 @@ } // SingleFileTarReader::Delegate: - int ReadTarFile(char* data, int size, std::string* error_id) override { - return infile_->ReadAtCurrentPos(data, size); + SingleFileTarReader::Result ReadTarFile(char* data, + uint32_t* size, + std::string* error_id) override { + int bytes_read = infile_->ReadAtCurrentPos(data, *size); + if (bytes_read < 0) { + return SingleFileTarReader::Result::kFailure; + } + + *size = bytes_read; + return SingleFileTarReader::Result::kSuccess; } bool WriteContents(const char* data, @@ -54,7 +65,7 @@ ASSERT_TRUE(OpenTarFile(test_data_dir.AppendASCII("test.tar"))); while (!reader().IsComplete()) { - EXPECT_TRUE(reader().ExtractChunk()); + EXPECT_EQ(SingleFileTarReader::Result::kSuccess, reader().ExtractChunk()); } EXPECT_EQ(4u, reader().total_bytes());
diff --git a/chrome/browser/extensions/api/image_writer_private/tar_extractor.cc b/chrome/browser/extensions/api/image_writer_private/tar_extractor.cc index b309d2d9..94bca8e 100644 --- a/chrome/browser/extensions/api/image_writer_private/tar_extractor.cc +++ b/chrome/browser/extensions/api/image_writer_private/tar_extractor.cc
@@ -4,6 +4,8 @@ #include "chrome/browser/extensions/api/image_writer_private/tar_extractor.h" +#include <utility> + #include "base/threading/sequenced_task_runner_handle.h" #include "chrome/browser/extensions/api/image_writer_private/error_messages.h" @@ -33,12 +35,16 @@ TarExtractor::~TarExtractor() = default; -int TarExtractor::ReadTarFile(char* data, int size, std::string* error_id) { - const int bytes_read = infile_.ReadAtCurrentPos(data, size); +SingleFileTarReader::Result TarExtractor::ReadTarFile(char* data, + uint32_t* size, + std::string* error_id) { + const int bytes_read = infile_.ReadAtCurrentPos(data, *size); if (bytes_read < 0) { *error_id = error::kUnzipGenericError; + return SingleFileTarReader::Result::kFailure; } - return bytes_read; + *size = bytes_read; + return SingleFileTarReader::Result::kSuccess; } bool TarExtractor::WriteContents(const char* data, @@ -76,7 +82,7 @@ } void TarExtractor::ExtractChunk() { - if (!tar_reader_.ExtractChunk()) { + if (tar_reader_.ExtractChunk() != SingleFileTarReader::Result::kSuccess) { std::move(properties_.failure_callback).Run(tar_reader_.error_id()); delete this; return;
diff --git a/chrome/browser/extensions/api/image_writer_private/tar_extractor.h b/chrome/browser/extensions/api/image_writer_private/tar_extractor.h index 5db03a9..0f98f44 100644 --- a/chrome/browser/extensions/api/image_writer_private/tar_extractor.h +++ b/chrome/browser/extensions/api/image_writer_private/tar_extractor.h
@@ -9,10 +9,6 @@ #include "chrome/browser/extensions/api/image_writer_private/extraction_properties.h" #include "chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.h" -namespace base { -class File; -} // namespace base - namespace extensions { namespace image_writer { @@ -35,8 +31,10 @@ void ExtractImpl(); void ExtractChunk(); - // SingleFileTarReader: - int ReadTarFile(char* data, int size, std::string* error_id) override; + // SingleFileTarReader::Delegate: + SingleFileTarReader::Result ReadTarFile(char* data, + uint32_t* size, + std::string* error_id) override; bool WriteContents(const char* data, int size, std::string* error_id) override;
diff --git a/chrome/browser/extensions/api/image_writer_private/xz_extractor.cc b/chrome/browser/extensions/api/image_writer_private/xz_extractor.cc new file mode 100644 index 0000000..10c48026 --- /dev/null +++ b/chrome/browser/extensions/api/image_writer_private/xz_extractor.cc
@@ -0,0 +1,198 @@ +// Copyright 2021 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/extensions/api/image_writer_private/xz_extractor.h" + +#include <utility> + +#include "base/bind.h" +#include "base/files/file_path.h" +#include "base/location.h" +#include "base/threading/sequenced_task_runner_handle.h" +#include "chrome/browser/extensions/api/image_writer_private/error_messages.h" +#include "chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.h" +#include "chrome/browser/file_util_service.h" +#include "mojo/public/cpp/system/data_pipe.h" + +// XzExtractor performs XZ extraction by using a sandboxed service +// (FileUtilService). Extracted data will be handed to SingleFileTarReader, +// which is basically a class that drops tar header and padding for the given +// tar stream, and will be written to extracted.bin. + +namespace extensions { +namespace image_writer { + +namespace { + +constexpr base::FilePath::StringPieceType kExtractedBinFileName = + FILE_PATH_LITERAL("extracted.bin"); + +} // namespace + +bool XzExtractor::IsXzFile(const base::FilePath& image_path) { + // TODO(tetsui): Check the file header instead of the extension. + return image_path.Extension() == FILE_PATH_LITERAL(".tar.xz"); +} + +// static +void XzExtractor::Extract(ExtractionProperties properties) { + // XzExtractor manages its own lifetime, and will delete itself when it + // completes. + XzExtractor* extractor = new XzExtractor(std::move(properties)); + extractor->ExtractImpl(); +} + +XzExtractor::XzExtractor(ExtractionProperties properties) + : tar_reader_(this), + xz_producer_watcher_(FROM_HERE, + mojo::SimpleWatcher::ArmingPolicy::AUTOMATIC), + tar_consumer_watcher_(FROM_HERE, + mojo::SimpleWatcher::ArmingPolicy::AUTOMATIC), + properties_(std::move(properties)) {} + +XzExtractor::~XzExtractor() = default; + +void XzExtractor::ExtractImpl() { + service_.Bind(LaunchFileUtilService()); + service_->BindXzFileExtractor( + remote_xz_file_extractor_.BindNewPipeAndPassReceiver()); + + mojo::ScopedDataPipeConsumerHandle xz_consumer; + mojo::ScopedDataPipeProducerHandle tar_producer; + + if (mojo::CreateDataPipe(nullptr, xz_producer_, xz_consumer) != + MOJO_RESULT_OK || + mojo::CreateDataPipe(nullptr, tar_producer, tar_consumer_) != + MOJO_RESULT_OK) { + RunFailureCallbackAndDeleteThis(error::kUnzipGenericError); + return; + } + + // base::Unretained(this) is safe here because callback won't be called once + // |remote_xz_file_extractor_| is destroyed. + remote_xz_file_extractor_->Extract( + std::move(xz_consumer), std::move(tar_producer), + base::BindOnce(&XzExtractor::OnRemoteFinished, base::Unretained(this))); + + infile_.Initialize(properties_.image_path, + base::File::FLAG_OPEN | base::File::FLAG_READ | + base::File::FLAG_EXCLUSIVE_WRITE | + base::File::FLAG_SHARE_DELETE); + if (!infile_.IsValid()) { + RunFailureCallbackAndDeleteThis(error::kUnzipGenericError); + return; + } + + base::FilePath out_image_path = + properties_.temp_dir_path.Append(kExtractedBinFileName); + outfile_.Initialize(out_image_path, base::File::FLAG_CREATE_ALWAYS | + base::File::FLAG_WRITE | + base::File::FLAG_EXCLUSIVE_READ | + base::File::FLAG_EXCLUSIVE_WRITE | + base::File::FLAG_SHARE_DELETE); + if (!outfile_.IsValid()) { + RunFailureCallbackAndDeleteThis(error::kTempFileError); + return; + } + std::move(properties_.open_callback).Run(out_image_path); + + // base::Unretained(this) is safe here because callback won't be called once + // |xz_producer_watcher_| is destroyed. + xz_producer_watcher_.Watch( + xz_producer_.get(), + MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, + base::BindRepeating(&XzExtractor::OnXzWritable, base::Unretained(this))); + + // base::Unretained(this) is safe here because callback won't be called once + // |tar_consumer_watcher_| is destroyed. + tar_consumer_watcher_.Watch( + tar_consumer_.get(), + MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, + base::BindRepeating(&XzExtractor::OnTarReadable, base::Unretained(this))); +} + +void XzExtractor::OnXzWritable(MojoResult /* result */) { + char* data = nullptr; + uint32_t size = 0; + MojoResult result = xz_producer_->BeginWriteData( + reinterpret_cast<void**>(&data), &size, MOJO_WRITE_DATA_FLAG_NONE); + if (result == MOJO_RESULT_SHOULD_WAIT) { + return; + } + if (result != MOJO_RESULT_OK) { + RunFailureCallbackAndDeleteThis(error::kUnzipGenericError); + return; + } + const int bytes_read = infile_.ReadAtCurrentPos(data, size); + if (bytes_read < 0) { + xz_producer_->EndWriteData(0); + RunFailureCallbackAndDeleteThis(error::kUnzipGenericError); + return; + } + result = xz_producer_->EndWriteData(bytes_read); + if (result != MOJO_RESULT_OK) { + RunFailureCallbackAndDeleteThis(error::kUnzipGenericError); + return; + } +} + +void XzExtractor::OnTarReadable(MojoResult /* result */) { + SingleFileTarReader::Result result = tar_reader_.ExtractChunk(); + if (result == SingleFileTarReader::Result::kShouldWait) + return; + if (result == SingleFileTarReader::Result::kFailure) { + RunFailureCallbackAndDeleteThis(tar_reader_.error_id()); + return; + } + + // TODO(tetsui): Also check it's the end of XZ. + if (tar_reader_.IsComplete()) { + auto complete_callback = std::move(properties_.complete_callback); + delete this; + std::move(complete_callback).Run(); + return; + } + + properties_.progress_callback.Run(tar_reader_.total_bytes(), + tar_reader_.curr_bytes()); +} + +void XzExtractor::OnRemoteFinished(bool success) { + if (!success) { + RunFailureCallbackAndDeleteThis(error::kUnzipGenericError); + } +} + +void XzExtractor::RunFailureCallbackAndDeleteThis(std::string error_id) { + auto failure_callback = std::move(properties_.failure_callback); + delete this; + std::move(failure_callback).Run(error_id); +} + +SingleFileTarReader::Result XzExtractor::ReadTarFile(char* data, + uint32_t* size, + std::string* error_id) { + MojoResult result = + tar_consumer_->ReadData(data, size, MOJO_READ_DATA_FLAG_NONE); + if (result == MOJO_RESULT_SHOULD_WAIT) + return SingleFileTarReader::Result::kShouldWait; + if (result == MOJO_RESULT_OK) + return SingleFileTarReader::Result::kSuccess; + *error_id = error::kUnzipGenericError; + return SingleFileTarReader::Result::kFailure; +} + +bool XzExtractor::WriteContents(const char* data, + int size, + std::string* error_id) { + const int bytes_written = outfile_.WriteAtCurrentPos(data, size); + if (bytes_written < 0 || bytes_written != size) { + *error_id = error::kTempFileError; + return false; + } + return true; +} + +} // namespace image_writer +} // namespace extensions
diff --git a/chrome/browser/extensions/api/image_writer_private/xz_extractor.h b/chrome/browser/extensions/api/image_writer_private/xz_extractor.h new file mode 100644 index 0000000..edde3f69 --- /dev/null +++ b/chrome/browser/extensions/api/image_writer_private/xz_extractor.h
@@ -0,0 +1,80 @@ +// Copyright 2021 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_EXTENSIONS_API_IMAGE_WRITER_PRIVATE_XZ_EXTRACTOR_H_ +#define CHROME_BROWSER_EXTENSIONS_API_IMAGE_WRITER_PRIVATE_XZ_EXTRACTOR_H_ + +#include <string> + +#include "base/files/file.h" +#include "chrome/browser/extensions/api/image_writer_private/extraction_properties.h" +#include "chrome/browser/extensions/api/image_writer_private/single_file_tar_reader.h" +#include "chrome/services/file_util/public/mojom/file_util_service.mojom.h" +#include "chrome/services/file_util/public/mojom/xz_file_extractor.mojom.h" +#include "mojo/public/cpp/bindings/remote.h" + +namespace base { +class FilePath; +} // namespace base + +namespace extensions { +namespace image_writer { + +// .tar.xz archive extractor. Should be called from a SequencedTaskRunner +// context. +class XzExtractor : public SingleFileTarReader::Delegate { + public: + static bool IsXzFile(const base::FilePath& image_path); + + // Start extracting the archive at |properties.image_path| to + // |properties.temp_dir_path|. A fixed file name is used for an extracted + // image, so a new temporary directory has to be used for every Extract() + // call. + static void Extract(ExtractionProperties properties); + + XzExtractor(const XzExtractor&) = delete; + XzExtractor& operator=(const XzExtractor&) = delete; + + private: + // This class manages its own lifetime. + explicit XzExtractor(ExtractionProperties properties); + ~XzExtractor() override; + + void ExtractImpl(); + void OnXzWritable(MojoResult result); + void OnTarReadable(MojoResult result); + void OnRemoteFinished(bool success); + + // |error_id| might be a member variable, so it cannot be a reference. + void RunFailureCallbackAndDeleteThis(std::string error_id); + + // SingleFileTarReader::Delegate: + SingleFileTarReader::Result ReadTarFile(char* data, + uint32_t* size, + std::string* error_id) override; + bool WriteContents(const char* data, + int size, + std::string* error_id) override; + + mojo::Remote<chrome::mojom::FileUtilService> service_; + mojo::Remote<chrome::mojom::XzFileExtractor> remote_xz_file_extractor_; + + SingleFileTarReader tar_reader_; + + base::File infile_; + base::File outfile_; + + mojo::ScopedDataPipeProducerHandle xz_producer_; + mojo::ScopedDataPipeConsumerHandle tar_consumer_; + + mojo::SimpleWatcher xz_producer_watcher_; + mojo::SimpleWatcher tar_consumer_watcher_; + + ExtractionProperties properties_; +}; + +} // namespace image_writer +} // namespace extensions + +#endif // CHROME_BROWSER_EXTENSIONS_API_IMAGE_WRITER_PRIVATE_XZ_EXTRACTOR_H_
diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementCoordinator.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementCoordinator.java index c12e08f..27f90e1 100644 --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementCoordinator.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementCoordinator.java
@@ -12,6 +12,8 @@ import androidx.recyclerview.widget.RecyclerView; import org.chromium.chrome.browser.feed.webfeed.R; +import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.components.favicon.LargeIconBridge; import org.chromium.ui.modelutil.LayoutViewBuilder; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; @@ -39,7 +41,8 @@ recyclerView.setLayoutManager(manager); recyclerView.setAdapter(adapter); - mMediator = new FollowManagementMediator(context, listItems, adapter); + mMediator = new FollowManagementMediator(context, listItems, adapter, + new LargeIconBridge(Profile.getLastUsedRegularProfile())); } public View getView() {
diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementItemProperties.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementItemProperties.java index 31807e7c..338deb0 100644 --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementItemProperties.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementItemProperties.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser.feed.followmanagement; +import android.graphics.Bitmap; import android.view.View.OnClickListener; import org.chromium.ui.modelutil.PropertyKey; @@ -25,7 +26,7 @@ new WritableObjectPropertyKey<>(); public static final WritableObjectPropertyKey<byte[]> ID_KEY = new WritableObjectPropertyKey<>(); - public static final WritableObjectPropertyKey<byte[]> FAVICON_KEY = + public static final WritableObjectPropertyKey<Bitmap> FAVICON_KEY = new WritableObjectPropertyKey<>(); public static final PropertyKey[] ALL_KEYS = {
diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementItemView.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementItemView.java index bb82910..1e323cb0 100644 --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementItemView.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementItemView.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.browser.feed.followmanagement; import android.content.Context; +import android.graphics.Bitmap; import android.util.AttributeSet; import android.widget.CheckBox; import android.widget.ImageView; @@ -32,8 +33,8 @@ public void setUrl(String url) { mUrl.setText(url); } - public void setFavicon(byte[] favicon) { - // TODO(1197286): Put bitmap into image view. + public void setFavicon(Bitmap favicon) { + mFavicon.setImageBitmap(favicon); } public void setSubscribed(boolean subscribed) { mSubscribedCheckbox.setChecked(subscribed);
diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementMediator.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementMediator.java index 1003bcc..b9391272 100644 --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementMediator.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/followmanagement/FollowManagementMediator.java
@@ -5,22 +5,30 @@ package org.chromium.chrome.browser.feed.followmanagement; import android.content.Context; +import android.graphics.Bitmap; import android.view.View; import android.view.View.OnClickListener; import android.widget.CheckBox; +import androidx.annotation.ColorInt; +import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView.Adapter; import org.chromium.base.Callback; +import org.chromium.chrome.browser.feed.webfeed.R; import org.chromium.chrome.browser.feed.webfeed.WebFeedBridge; import org.chromium.chrome.browser.feed.webfeed.WebFeedBridge.FollowResults; import org.chromium.chrome.browser.feed.webfeed.WebFeedBridge.UnfollowResults; import org.chromium.chrome.browser.feed.webfeed.WebFeedBridge.WebFeedMetadata; import org.chromium.chrome.browser.feed.webfeed.WebFeedSubscriptionRequestStatus; import org.chromium.chrome.browser.feed.webfeed.WebFeedSubscriptionStatus; +import org.chromium.components.browser_ui.widget.RoundedIconGenerator; +import org.chromium.components.favicon.IconType; +import org.chromium.components.favicon.LargeIconBridge; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; +import org.chromium.url.GURL; import java.util.List; @@ -35,17 +43,18 @@ private Adapter mAdapter; private boolean mSubscribed; private WebFeedBridge mWebFeedBridge; + private LargeIconBridge mLargeIconBridge; /** * Nested class to curry arguments into the listener so we can use them later. */ - public class ClickListener { + class ClickListener { private final byte[] mId; private boolean mSubscribed; private CheckBox mCheckbox; /** Callback from the WebFeedBridge's followFromId method */ - public class FollowCallback implements Callback<FollowResults> { + class FollowCallback implements Callback<FollowResults> { /** Report reesults of follow operation. */ @Override public void onResult(FollowResults results) { @@ -58,7 +67,7 @@ } /** Callback from WebFeedBridge's unfollow operation. */ - public class UnfollowCallback implements Callback<UnfollowResults> { + class UnfollowCallback implements Callback<UnfollowResults> { /** Report results of unfollow operation. */ @Override public void onResult(UnfollowResults results) { @@ -77,14 +86,14 @@ /** * returns the click handler to use with android. */ - public OnClickListener getClickListener() { + OnClickListener getClickListener() { return this::clickHandler; } /** * Click handler for clicks on the checkbox. Follows or unfollows as needed. */ - public void clickHandler(View view) { + void clickHandler(View view) { mCheckbox = (CheckBox) view; // Disable the button until we get a callback to prevent duplicate events. mCheckbox.setClickable(false); @@ -98,11 +107,75 @@ } } - FollowManagementMediator(Context context, ModelList modelList, Adapter adapter) { + /** + * Generates the favicon to use, and if no favicon is available, creates a monogram. A monogram + * is a rounded icon with the first letter of the domain. A rounded icon generator is used + * to create the monogram. + */ + class FaviconProvider { + GURL mUrl; + Callback<Bitmap> mInsertFaviconCallback; + + // Constructor - save off arguments we will need to continue. + FaviconProvider(GURL url, Callback<Bitmap> insertFaviconCallback) { + mUrl = url; + mInsertFaviconCallback = insertFaviconCallback; + } + /** + * Retrieve a favicon. Will callback into onFaviconAvailable. + */ + void startFaviconFetch() { + // Start the async call for the favicon, passing onFaviconAvailable as the callback. + mLargeIconBridge.getLargeIconForUrl(mUrl, + mContext.getResources().getDimensionPixelSize(R.dimen.web_feed_icon_size), + this::onFaviconAvailable); + } + + /** + * Passed as the callback to {@link LargeIconBridge#getLargeIconForUrl}. + */ + private void onFaviconAvailable(@Nullable Bitmap favicon, @ColorInt int fallbackColor, + boolean isColorDefault, @IconType int iconType) { + // If we have a favicon, set it into the bitmap. If not, make a monogram and put that + // into the bitmap. + int faviconSize = + mContext.getResources().getDimensionPixelSize(R.dimen.web_feed_icon_size); + + if (favicon == null) { + // TODO(crbug/1152592): Update monogram according to specs. + RoundedIconGenerator iconGenerator = + createRoundedIconGenerator(fallbackColor, faviconSize); + favicon = iconGenerator.generateIconForUrl(mUrl.getSpec()); + } else { + // Scale the bitmap to the size of the area on the screen we have for it. + favicon = Bitmap.createScaledBitmap(favicon, faviconSize, faviconSize, false); + } + + // Update the favicon in the model. + mInsertFaviconCallback.onResult(favicon); + } + + private RoundedIconGenerator createRoundedIconGenerator( + @ColorInt int iconColor, int faviconSize) { + int cornerRadius = faviconSize / 2; + int textSize = mContext.getResources().getDimensionPixelSize( + R.dimen.web_feed_monogram_text_size); + + return new RoundedIconGenerator( + faviconSize, faviconSize, cornerRadius, iconColor, textSize); + } + } + + /** + * Build a FollowManagementMediator. + */ + FollowManagementMediator(Context context, ModelList modelList, Adapter adapter, + LargeIconBridge largeIconBridge) { mModelList = modelList; mContext = context; mAdapter = adapter; mWebFeedBridge = new WebFeedBridge(); + mLargeIconBridge = largeIconBridge; mWebFeedBridge.getAllFollowedWebFeeds(this::followedWebFeedsCallback); } @@ -111,7 +184,7 @@ private void followedWebFeedsCallback(List<WebFeedMetadata> followedWebFeeds) { for (WebFeedMetadata page : followedWebFeeds) { String title = page.title; - String url = page.visitUrl.getSpec(); + GURL url = page.visitUrl; byte[] id = page.id; boolean subscribed = false; int subscriptionStatus = page.subscriptionStatus; @@ -119,23 +192,31 @@ || subscriptionStatus == WebFeedSubscriptionStatus.SUBSCRIBE_IN_PROGRESS) { subscribed = true; } - OnClickListener listener = (new ClickListener(id)).getClickListener(); - PropertyModel pageModel = generateListItem(title, url, subscribed, listener); - mModelList.add(new SimpleRecyclerViewAdapter.ListItem( - FollowManagementItemProperties.DEFAULT_ITEM_TYPE, pageModel)); - // TODO(1197286): Get favicons from the item cache async, then attach to the item. - } + OnClickListener clickListener = (new ClickListener(id)).getClickListener(); + PropertyModel pageModel = + generateListItem(title, url.getSpec(), subscribed, clickListener); + SimpleRecyclerViewAdapter.ListItem listItem = new SimpleRecyclerViewAdapter.ListItem( + FollowManagementItemProperties.DEFAULT_ITEM_TYPE, pageModel); + mModelList.add(listItem); - mAdapter.notifyDataSetChanged(); + // Obtain the favicon asynchronously, and insert it into the model once it arrives. + FaviconProvider faviconProvider = new FaviconProvider(url, (favicon) -> { + listItem.model.set(FollowManagementItemProperties.FAVICON_KEY, favicon); + mAdapter.notifyDataSetChanged(); + }); + + // getFavicon is async. We'll get the favicon, then add it to the model. + faviconProvider.startFaviconFetch(); + } } // Generate a list item for the recycler vivew for a followed page. private PropertyModel generateListItem( - String title, String url, boolean subscribed, OnClickListener listener) { + String title, String url, boolean subscribed, OnClickListener clickListener) { return new PropertyModel.Builder(FollowManagementItemProperties.ALL_KEYS) .with(FollowManagementItemProperties.TITLE_KEY, title) .with(FollowManagementItemProperties.URL_KEY, url) - .with(FollowManagementItemProperties.ON_CLICK_KEY, listener) + .with(FollowManagementItemProperties.ON_CLICK_KEY, clickListener) .with(FollowManagementItemProperties.SUBSCRIBED_KEY, subscribed) .build(); }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 88366d3..b7dadb7 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -1491,6 +1491,11 @@ "expiry_milestone": -1 }, { + "name": "enable-commerce-merchant-viewer", + "owners": [ "chrome-shopping@google.com" ], + "expiry_milestone": 94 + }, + { "name": "enable-conditional-tabstrip", "owners": [ "memex-team@google.com" ], "expiry_milestone": 90 @@ -1690,6 +1695,11 @@ "expiry_milestone": 96 }, { + "name": "enable-dns-proxy", + "owners": [ "garrick", "jasongustaman", "cros-networking@google.com" ], + "expiry_milestone": 99 + }, + { "name": "enable-encryption-migration", "owners": [ "fukino" ], "expiry_milestone": 76 @@ -5332,7 +5342,7 @@ "name": "webnotes-stylize", "owners": [ "gayane", "seblalancette"], "expiry_milestone": 99 - }, + }, { "name": "webpage-alternative-text-zoom", "owners": [ "rkgibson@google.com", "bling-flags@google.com" ],
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 643091d4..17e2742 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -2398,6 +2398,10 @@ "Allows users to see their tabs in a grid layout in the tab switcher on " "phones."; +const char kCommerceMerchantViewerAndroidName[] = "Merchant Viewer"; +const char kCommerceMerchantViewerAndroidDescription[] = + "Allows users to view merchant trust signals on eligible pages."; + const char kTabGroupsAndroidName[] = "Tab Groups"; const char kTabGroupsAndroidDescription[] = "Allows users to create groups to better organize their tabs on phones."; @@ -4241,6 +4245,11 @@ "visiting will be logged locally into an encrypted file. Should not be " "enabled. Be aware that hash option only provides a thin layer of privacy."; +const char kEnableDnsProxyName[] = "Enable DNS proxy service"; +const char kEnableDnsProxyDescription[] = + "When enabled, standard DNS queries will be proxied through the system " + "service"; + const char kEnableEncryptionMigrationName[] = "Enable encryption migration of user data"; const char kEnableEncryptionMigrationDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 08dca52f..e3b8422 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1386,6 +1386,9 @@ extern const char kTabGridLayoutAndroidName[]; extern const char kTabGridLayoutAndroidDescription[]; +extern const char kCommerceMerchantViewerAndroidName[]; +extern const char kCommerceMerchantViewerAndroidDescription[]; + extern const char kTabGroupsAndroidName[]; extern const char kTabGroupsAndroidDescription[]; @@ -2447,6 +2450,9 @@ extern const char kEnableCrOSActionRecorderName[]; extern const char kEnableCrOSActionRecorderDescription[]; +extern const char kEnableDnsProxyName[]; +extern const char kEnableDnsProxyDescription[]; + extern const char kEnableEncryptionMigrationName[]; extern const char kEnableEncryptionMigrationDescription[];
diff --git a/chrome/browser/offline_pages/offline_page_navigation_throttle.cc b/chrome/browser/offline_pages/offline_page_navigation_throttle.cc new file mode 100644 index 0000000..8579d17 --- /dev/null +++ b/chrome/browser/offline_pages/offline_page_navigation_throttle.cc
@@ -0,0 +1,54 @@ +// Copyright 2021 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/offline_pages/offline_page_navigation_throttle.h" + +#include "base/metrics/histogram_functions.h" +#include "components/offline_pages/core/request_header/offline_page_header.h" +#include "content/public/browser/navigation_handle.h" + +namespace offline_pages { + +const char kOfflinePagesDidNavigationThrottleCancelNavigation[] = + "OfflinePages.DidNavigationThrottleCancelNavigation"; + +namespace { +void RecordWhetherNavigationWasCanceled(bool was_navigation_canceled) { + base::UmaHistogramBoolean(kOfflinePagesDidNavigationThrottleCancelNavigation, + was_navigation_canceled); +} +} // namespace + +OfflinePageNavigationThrottle::OfflinePageNavigationThrottle( + content::NavigationHandle* navigation_handle) + : content::NavigationThrottle(navigation_handle) {} + +OfflinePageNavigationThrottle::~OfflinePageNavigationThrottle() = default; + +content::NavigationThrottle::ThrottleCheckResult +OfflinePageNavigationThrottle::WillStartRequest() { + return CANCEL_AND_IGNORE; +} + +const char* OfflinePageNavigationThrottle::GetNameForLogging() { + return "OfflinePageNavigationThrottle"; +} + +// static +std::unique_ptr<content::NavigationThrottle> +OfflinePageNavigationThrottle::MaybeCreateThrottleFor( + content::NavigationHandle* navigation_handle) { + // Checks if the request was initiated by the renderer and if it contains the + // "X-Chrome-offline" header. There is no legitimate reason for a renderer to + // make a request with this header, so we can cancel these types of requests. + if (navigation_handle->IsRendererInitiated() && + navigation_handle->GetRequestHeaders().HasHeader(kOfflinePageHeader)) { + RecordWhetherNavigationWasCanceled(true); + return std::make_unique<OfflinePageNavigationThrottle>(navigation_handle); + } + RecordWhetherNavigationWasCanceled(false); + return nullptr; +} + +} // namespace offline_pages
diff --git a/chrome/browser/offline_pages/offline_page_navigation_throttle.h b/chrome/browser/offline_pages/offline_page_navigation_throttle.h new file mode 100644 index 0000000..fce4d71 --- /dev/null +++ b/chrome/browser/offline_pages/offline_page_navigation_throttle.h
@@ -0,0 +1,40 @@ +// Copyright 2021 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_OFFLINE_PAGES_OFFLINE_PAGE_NAVIGATION_THROTTLE_H_ +#define CHROME_BROWSER_OFFLINE_PAGES_OFFLINE_PAGE_NAVIGATION_THROTTLE_H_ + +#include <memory> + +#include "content/public/browser/navigation_throttle.h" + +namespace offline_pages { + +extern const char kOfflinePagesDidNavigationThrottleCancelNavigation[]; + +// OfflinePageNavigationThrottle cancels any request coming from the renderer +// that include the "X-Chrome-offline" header. +// TODO(crbug/1178202): Remove this class once OfflinePageHeader has been +// refactored. +class OfflinePageNavigationThrottle : public content::NavigationThrottle { + public: + explicit OfflinePageNavigationThrottle( + content::NavigationHandle* navigation_handle); + ~OfflinePageNavigationThrottle() override; + + OfflinePageNavigationThrottle(const OfflinePageNavigationThrottle&) = delete; + OfflinePageNavigationThrottle& operator=( + const OfflinePageNavigationThrottle&) = delete; + + // content::NavigationThrottle: + ThrottleCheckResult WillStartRequest() override; + const char* GetNameForLogging() override; + + static std::unique_ptr<NavigationThrottle> MaybeCreateThrottleFor( + content::NavigationHandle* navigation_handle); +}; + +} // namespace offline_pages + +#endif // CHROME_BROWSER_OFFLINE_PAGES_OFFLINE_PAGE_NAVIGATION_THROTTLE_H_
diff --git a/chrome/browser/offline_pages/offline_page_navigation_throttle_unittest.cc b/chrome/browser/offline_pages/offline_page_navigation_throttle_unittest.cc new file mode 100644 index 0000000..edcb289c --- /dev/null +++ b/chrome/browser/offline_pages/offline_page_navigation_throttle_unittest.cc
@@ -0,0 +1,121 @@ +// Copyright 2021 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/offline_pages/offline_page_navigation_throttle.h" + +#include <memory> + +#include "base/test/metrics/histogram_tester.h" +#include "content/public/test/mock_navigation_handle.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace offline_pages { +namespace { + +class OfflinePageNavigationThrottleTest : public testing::Test { + public: + void SetUp() override { + histogram_tester_ = std::make_unique<base::HistogramTester>(); + } + + base::HistogramTester* histogram_tester() { return histogram_tester_.get(); } + + // Creates a MockNavigationHandle and configures it based on the input param + std::unique_ptr<content::MockNavigationHandle> MakeMockNavigationHandle( + bool is_renderer_initiated, + bool has_offline_headers) { + std::unique_ptr<content::MockNavigationHandle> navigation_handle = + std::make_unique<content::MockNavigationHandle>(); + navigation_handle->set_is_renderer_initiated(is_renderer_initiated); + + net::HttpRequestHeaders request_headers; + if (has_offline_headers) + request_headers.SetHeader( + "X-Chrome-offline", + "persist=1 reason=file_url_intent intent_url=not_a_real_file"); + navigation_handle->set_request_headers(request_headers); + + return navigation_handle; + } + + private: + std::unique_ptr<base::HistogramTester> histogram_tester_; +}; + +TEST_F(OfflinePageNavigationThrottleTest, CancelOfflineRequestFromRenderer) { + std::unique_ptr<content::MockNavigationHandle> navigation_handle = + MakeMockNavigationHandle(/*is_renderer_initiated=*/true, + /*has_offline_headers=*/true); + + std::unique_ptr<content::NavigationThrottle> navigation_throttle = + OfflinePageNavigationThrottle::MaybeCreateThrottleFor( + navigation_handle.get()); + + // Checks that a non-null OfflinePageNavigationThrottle was created, and a + // value of true was logged to UMA. + ASSERT_NE(navigation_throttle, nullptr); + histogram_tester()->ExpectUniqueSample( + kOfflinePagesDidNavigationThrottleCancelNavigation, true, 1); + + // Ensure that the created throttle specifies to cancel and ignore the + // navigation request. + content::NavigationThrottle::ThrottleCheckResult throttle_check_result = + navigation_throttle->WillStartRequest(); + EXPECT_EQ(throttle_check_result.action(), + content::NavigationThrottle::CANCEL_AND_IGNORE); +} + +TEST_F(OfflinePageNavigationThrottleTest, AllowOfflineRequestFromBrowser) { + std::unique_ptr<content::MockNavigationHandle> navigation_handle = + MakeMockNavigationHandle(/*is_renderer_initiated=*/false, + /*has_offline_headers=*/true); + + std::unique_ptr<content::NavigationThrottle> navigation_throttle = + OfflinePageNavigationThrottle::MaybeCreateThrottleFor( + navigation_handle.get()); + + // Checks that a OfflinePageNavigationThrottle wasn't created and instead a + // nullptr was returned. Additionally checks that a value of false was logged + // to UMA. + EXPECT_EQ(navigation_throttle, nullptr); + histogram_tester()->ExpectUniqueSample( + kOfflinePagesDidNavigationThrottleCancelNavigation, false, 1); +} + +TEST_F(OfflinePageNavigationThrottleTest, AllowRegularRequestFromRenderer) { + std::unique_ptr<content::MockNavigationHandle> navigation_handle = + MakeMockNavigationHandle(/*is_renderer_initiated=*/true, + /*has_offline_headers=*/false); + + std::unique_ptr<content::NavigationThrottle> navigation_throttle = + OfflinePageNavigationThrottle::MaybeCreateThrottleFor( + navigation_handle.get()); + + // Checks that a OfflinePageNavigationThrottle wasn't created and instead a + // nullptr was returned. Additionally checks that a value of false was logged + // to UMA. + EXPECT_EQ(navigation_throttle, nullptr); + histogram_tester()->ExpectUniqueSample( + kOfflinePagesDidNavigationThrottleCancelNavigation, false, 1); +} + +TEST_F(OfflinePageNavigationThrottleTest, AllowRegularRequestFromBrowser) { + std::unique_ptr<content::MockNavigationHandle> navigation_handle = + MakeMockNavigationHandle(/*is_renderer_initiated=*/false, + /*has_offline_headers=*/false); + + std::unique_ptr<content::NavigationThrottle> navigation_throttle = + OfflinePageNavigationThrottle::MaybeCreateThrottleFor( + navigation_handle.get()); + + // Checks that a OfflinePageNavigationThrottle wasn't created and instead a + // nullptr was returned. Additionally checks that a value of false was logged + // to UMA. + EXPECT_EQ(navigation_throttle, nullptr); + histogram_tester()->ExpectUniqueSample( + kOfflinePagesDidNavigationThrottleCancelNavigation, false, 1); +} + +} // namespace +} // namespace offline_pages
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc index f73e2cb..6608cc7 100644 --- a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
@@ -41,7 +41,7 @@ AttachObserver(); } - const std::vector<mojom::PageLoadFeatures>& observed_features() const { + const std::vector<blink::UseCounterFeature>& observed_features() const { return embedder_interface_->observed_features(); }
diff --git a/chrome/browser/prefs/DIR_METADATA b/chrome/browser/prefs/DIR_METADATA index 81c6dca2..8fdb974c 100644 --- a/chrome/browser/prefs/DIR_METADATA +++ b/chrome/browser/prefs/DIR_METADATA
@@ -1,4 +1,4 @@ monorail: { - component: "UI>Browser>Preferences" + component: "Internals>Preferences" } team_email: "chromium-dev@chromium.org"
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 592f49a..2bc65a0 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -14,6 +14,7 @@ #include "chrome/browser/accessibility/accessibility_labels_service.h" #include "chrome/browser/accessibility/accessibility_ui.h" #include "chrome/browser/accessibility/invert_bubble_prefs.h" +#include "chrome/browser/ash/web_applications/help_app/help_app_notification_controller.h" #include "chrome/browser/availability/availability_prober.h" #include "chrome/browser/browser_process_impl.h" #include "chrome/browser/chrome_content_browser_client.h" @@ -176,11 +177,11 @@ #include "extensions/browser/extension_prefs.h" #if BUILDFLAG(IS_CHROMEOS_ASH) #include "chrome/browser/ash/guest_os/guest_os_share_path.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/ash/login/easy_unlock/easy_unlock_service.h" #include "chrome/browser/ash/settings/stats_reporting_controller.h" #include "chrome/browser/chromeos/device_name_store.h" #include "chrome/browser/chromeos/extensions/extensions_permissions_tracker.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/chromeos/net/system_proxy_manager.h" #include "chrome/browser/chromeos/platform_keys/key_permissions/key_permissions_manager_impl.h" #include "chrome/browser/chromeos/policy/system_features_disable_list_policy_handler.h" @@ -1085,6 +1086,7 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) app_list::AppListSyncableService::RegisterProfilePrefs(registry); app_list::ArcAppReinstallSearchProvider::RegisterProfilePrefs(registry); + apps::AppPlatformMetricsService::RegisterProfilePrefs(registry); arc::prefs::RegisterProfilePrefs(registry); ArcAppListPrefs::RegisterProfilePrefs(registry); certificate_manager::CertificatesHandler::RegisterProfilePrefs(registry); @@ -1112,6 +1114,7 @@ ash::MultiProfileUserController::RegisterProfilePrefs(registry); chromeos::NetworkMetadataStore::RegisterPrefs(registry); ash::ReleaseNotesStorage::RegisterProfilePrefs(registry); + chromeos::HelpAppNotificationController::RegisterProfilePrefs(registry); chromeos::quick_unlock::FingerprintStorage::RegisterProfilePrefs(registry); chromeos::quick_unlock::PinStoragePrefs::RegisterProfilePrefs(registry); chromeos::Preferences::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/profile_resetter/DIR_METADATA b/chrome/browser/profile_resetter/DIR_METADATA index 81c6dca2..be0bbbe 100644 --- a/chrome/browser/profile_resetter/DIR_METADATA +++ b/chrome/browser/profile_resetter/DIR_METADATA
@@ -1,4 +1,4 @@ monorail: { - component: "UI>Browser>Preferences" + component: "Services>Safebrowsing" } team_email: "chromium-dev@chromium.org"
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/action_manager.js b/chrome/browser/resources/chromeos/accessibility/switch_access/action_manager.js index 7ae7b83..4b3732eb 100644 --- a/chrome/browser/resources/chromeos/accessibility/switch_access/action_manager.js +++ b/chrome/browser/resources/chromeos/accessibility/switch_access/action_manager.js
@@ -262,7 +262,7 @@ Navigator.byPoint.start(); return true; case SwitchAccessMenuAction.ITEM_SCAN: - Navigator.byPoint.stop(); + Navigator.byItem.restart(); return true; default: return false;
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/item_scan_manager.js b/chrome/browser/resources/chromeos/accessibility/switch_access/item_scan_manager.js index 542b6f8..580ab6f 100644 --- a/chrome/browser/resources/chromeos/accessibility/switch_access/item_scan_manager.js +++ b/chrome/browser/resources/chromeos/accessibility/switch_access/item_scan_manager.js
@@ -7,6 +7,7 @@ import {FocusRingManager} from './focus_ring_manager.js'; import {FocusData, FocusHistory} from './history.js'; import {MenuManager} from './menu_manager.js'; +import {Navigator} from './navigator.js'; import {ItemNavigatorInterface} from './navigator_interface.js'; import {BackButtonNode} from './nodes/back_button_node.js'; import {BasicNode, BasicRootNode} from './nodes/basic_node.js'; @@ -230,6 +231,15 @@ } /** @override */ + restart() { + const point = Navigator.byPoint.currentPoint; + SwitchAccess.mode = SAConstants.Mode.ITEM_SCAN; + this.desktop_.hitTestWithReply(point.x, point.y, (node) => { + this.moveTo_(node); + }); + } + + /** @override */ get currentNode() { this.moveToValidNode(); return this.node_;
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/navigator_interface.js b/chrome/browser/resources/chromeos/accessibility/switch_access/navigator_interface.js index 5579355..4b1ac7f 100644 --- a/chrome/browser/resources/chromeos/accessibility/switch_access/navigator_interface.js +++ b/chrome/browser/resources/chromeos/accessibility/switch_access/navigator_interface.js
@@ -95,6 +95,12 @@ */ moveToValidNode() {} + /** + * Restarts item scanning from the last point chosen by point scanning. + * @abstract + */ + restart() {} + // =============== Getter Methods ============== /**
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/point_scan_manager.js b/chrome/browser/resources/chromeos/accessibility/switch_access/point_scan_manager.js index 64c270c..7f65392 100644 --- a/chrome/browser/resources/chromeos/accessibility/switch_access/point_scan_manager.js +++ b/chrome/browser/resources/chromeos/accessibility/switch_access/point_scan_manager.js
@@ -36,7 +36,6 @@ stop() { chrome.accessibilityPrivate.setPointScanState(PointScanState.STOP); - SwitchAccess.mode = SAConstants.Mode.ITEM_SCAN; } // ============= Private Methods =============
diff --git a/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing.html b/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing.html index 6d8220b..c5d0e163 100644 --- a/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing.html +++ b/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing.html
@@ -45,13 +45,6 @@ Render quality: <span class="arc-tracing-app-render-quality"></span> Commit deviation: <span class="arc-tracing-app-commit-deviation"></span> <span class="arc-tracing-new-line"></span> - Average power: - <span class="arc-tracing-app-power-total"></span> watts. - <span class="arc-tracing-new-line"></span> - CPU: <span class="arc-tracing-app-power-cpu"></span>, - GPU: <span class="arc-tracing-app-power-gpu"></span>, - Memory: <span class="arc-tracing-app-power-memory"></span> watts. - <span class="arc-tracing-new-line"></span> </div> <div id="arc-overview-tracing-models"></div> <hr>
diff --git a/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing_ui.js b/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing_ui.js index e2252f43..dde59e5 100644 --- a/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing_ui.js +++ b/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing_ui.js
@@ -157,18 +157,6 @@ header.getElementsByClassName('arc-tracing-app-commit-deviation')[0] .textContent = renderQualityAndCommitDeviation[1].toFixed(2) + 'ms'; - var cpuPower = getAveragePower(model, 10 /* kCpuPower */); - var gpuPower = getAveragePower(model, 11 /* kGpuPower */); - var memoryPower = getAveragePower(model, 12 /* kMemoryPower */); - header.getElementsByClassName('arc-tracing-app-power-total')[0].textContent = - (cpuPower + gpuPower + memoryPower).toFixed(2); - header.getElementsByClassName('arc-tracing-app-power-cpu')[0].textContent = - cpuPower.toFixed(2); - header.getElementsByClassName('arc-tracing-app-power-gpu')[0].textContent = - gpuPower.toFixed(2); - header.getElementsByClassName('arc-tracing-app-power-memory')[0].textContent = - memoryPower.toFixed(2); - // Handler to remove model from the view. header.getElementsByClassName('arc-tracing-close-button')[0].onclick = function() { @@ -472,6 +460,9 @@ } /** + * TODO(b/182801299): kernel support was removed for non-root process. + * Not using feature for now to prevent confusing users. + * * Creates power view for the particular counter. * * @param {HTMLElement} parent container for the newly created chart. @@ -535,17 +526,10 @@ addDeltaView(parent, resolution, duration, true /* appView */); addFPSView(parent, resolution, duration, false /* appView */); addDeltaView(parent, resolution, duration, false /* appView */); - addPowerView( - parent, 'Package power constraint', resolution, duration, - 13 /* eventType */); - addPowerView(parent, 'CPU Power', resolution, duration, 10 /* eventType */); - addPowerView(parent, 'GPU Power', resolution, duration, 11 /* eventType */); - addPowerView( - parent, 'Memory Power', resolution, duration, 12 /* eventType */); } /** - * Assigns color for the model. Tries to be peristence in different runs. It + * Assigns color for the model. Tries to be persistent in different runs. It * uses timestamp as a source for hash that points to the ideal color. If that * color is already taken for another chart, it scans all possible colors and * selects the first available. If nothing helps, pink color as assigned as a @@ -611,4 +595,4 @@ modelColors.delete(model); refreshModels(); -} \ No newline at end of file +}
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_group.html b/chrome/browser/resources/chromeos/emoji_picker/emoji_group.html index bd5b1c2..670a25d 100644 --- a/chrome/browser/resources/chromeos/emoji_picker/emoji_group.html +++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_group.html
@@ -1,6 +1,7 @@ <style> :host { margin-top: 10px; + --emoji-group-clear-recents-icon-size: 16px; } #heading { @@ -29,7 +30,10 @@ #show-clear { margin: 0; - --cr-icon-button-size: 16px; + margin-inline-end: calc( + (var(--emoji-group-button-size) - + var(--emoji-group-clear-recents-icon-size))* .5); + --cr-icon-button-size: var(--emoji-group-clear-recents-icon-size); } #clear-recents {
diff --git a/chrome/browser/resources/chromeos/projector/BUILD.gn b/chrome/browser/resources/chromeos/projector/BUILD.gn new file mode 100644 index 0000000..5e7155b05 --- /dev/null +++ b/chrome/browser/resources/chromeos/projector/BUILD.gn
@@ -0,0 +1,45 @@ +# Copyright 2021 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. + +import("//chrome/common/features.gni") +import("//third_party/closure_compiler/compile_js.gni") +import("//tools/grit/grit_rule.gni") +import("//ui/webui/resources/tools/generate_grd.gni") + +assert(is_chromeos_ash, "Projector is ChromeOS only") + +generate_grd("build_grd") { + grd_prefix = "projector" + out_grd = "$target_gen_dir/resources.grd" + input_files = [ + "selfie_cam.html", + "selfie_cam.js", + ] + input_files_base_dir = rebase_path(".", "//") +} + +grit("resources") { + defines = chrome_grit_defines + + # These arguments are needed since the grd is generated at build time. + enable_input_discovery_for_gn_analyze = false + source = "$target_gen_dir/resources.grd" + deps = [ ":build_grd" ] + + outputs = [ + "grit/projector_resources.h", + "grit/projector_resources_map.cc", + "grit/projector_resources_map.h", + "projector_resources.pak", + ] + output_dir = "$root_gen_dir/chromeos/projector" +} + +js_type_check("closure_compile") { + deps = [ ":projector" ] +} + +js_library("projector") { + sources = [ "selfie_cam.js" ] +}
diff --git a/chrome/browser/resources/chromeos/projector/DIR_METADATA b/chrome/browser/resources/chromeos/projector/DIR_METADATA new file mode 100644 index 0000000..df2cd975 --- /dev/null +++ b/chrome/browser/resources/chromeos/projector/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "FamilyExperiences" +}
diff --git a/chrome/browser/resources/chromeos/projector/OWNERS b/chrome/browser/resources/chromeos/projector/OWNERS new file mode 100644 index 0000000..0ec890c --- /dev/null +++ b/chrome/browser/resources/chromeos/projector/OWNERS
@@ -0,0 +1,3 @@ +tobyhuang@chromium.org +llin@chromium.org +yilkal@chromium.org
diff --git a/chrome/browser/resources/chromeos/projector/selfie_cam.html b/chrome/browser/resources/chromeos/projector/selfie_cam.html new file mode 100644 index 0000000..7736ca0 --- /dev/null +++ b/chrome/browser/resources/chromeos/projector/selfie_cam.html
@@ -0,0 +1,13 @@ +<!-- +Copyright 2021 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. +--> + +<!DOCTYPE html> +<html> + <body> + <video autoplay></video> + <script type="module" src="selfie_cam.js"></script> + </body> +</html>
diff --git a/chrome/browser/resources/chromeos/projector/selfie_cam.js b/chrome/browser/resources/chromeos/projector/selfie_cam.js new file mode 100644 index 0000000..33d8ca1 --- /dev/null +++ b/chrome/browser/resources/chromeos/projector/selfie_cam.js
@@ -0,0 +1,13 @@ +// Copyright 2021 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. + +// Grabs video feed from user's camera. If the user's device does not have a +// camera, then the error is caught below. +navigator.mediaDevices.getUserMedia({video: true}) + .then(stream => { + document.body.querySelector('video').srcObject = stream; + }) + .catch(err => { + console.error(err.name + ': ' + err.message); + });
diff --git a/chrome/browser/resources/download_shelf/download_item.html b/chrome/browser/resources/download_shelf/download_item.html index f70de0ec..bda942c6 100644 --- a/chrome/browser/resources/download_shelf/download_item.html +++ b/chrome/browser/resources/download_shelf/download_item.html
@@ -101,7 +101,7 @@ } #filename, -#statusText { +#status-text { overflow: hidden; padding-bottom: 2px; padding-top: 2px; @@ -109,7 +109,7 @@ white-space: nowrap; } -#statusText { +#status-text { font-size: 85%; } @@ -131,7 +131,7 @@ stroke-width: 1.2; } -#fileIcon { +#file-icon { height: 16px; position: absolute; } @@ -148,11 +148,11 @@ <circle class="progress-circle"></circle> <circle class="progress-spinner"></circle> </svg> - <img id="fileIcon"> + <img id="file-icon"> </div> <div id="text-container"> <div id="filename"></div> - <div id="statusText"></div> + <div id="status-text"></div> </div> <button id="dropdown-button"> <svg id="dropdown-icon" viewBox="0 0 16 16">
diff --git a/chrome/browser/resources/download_shelf/download_item.js b/chrome/browser/resources/download_shelf/download_item.js index 7f31bcd5..8119c82 100644 --- a/chrome/browser/resources/download_shelf/download_item.js +++ b/chrome/browser/resources/download_shelf/download_item.js
@@ -24,6 +24,10 @@ /** @private {!DownloadShelfApiProxy} */ this.apiProxy_ = DownloadShelfApiProxyImpl.getInstance(); + + this.$('#dropdown-button') + .addEventListener('click', e => this.onDropdownButtonClick_(e)); + this.addEventListener('contextmenu', e => this.onContextMenu_(e)); } /** @param {!DownloadItem} value */ @@ -53,7 +57,7 @@ this.$('#filename').innerText = filePath.substring(filePath.lastIndexOf('/') + 1); - const statusTextElement = this.$('#statusText'); + const statusTextElement = this.$('#status-text'); const statusText = (!item.shouldPromoteOrigin || !item.originalUrl.url) ? item.statusText : new URL(item.originalUrl.url).origin; @@ -81,7 +85,7 @@ } this.apiProxy_.getFileIcon(item.id).then(icon => { - this.$('#fileIcon').src = icon; + this.$('#file-icon').src = icon; }); } @@ -90,6 +94,19 @@ this.$('.progress') .style.setProperty('--download-progress', value.toString()); } + + /** @param {!Event} e */ + onContextMenu_(e) { + this.apiProxy_.showContextMenu(this.item.id, e.clientX, e.clientY); + } + + /** @param {!Event} e */ + onDropdownButtonClick_(e) { + // TODO(crbug.com/1182529): Switch to down caret icon when context menu is + // open. + const rect = e.target.getBoundingClientRect(); + this.apiProxy_.showContextMenu(this.item.id, rect.left, rect.top); + } } customElements.define('download-item', DownloadItemElement);
diff --git a/chrome/browser/resources/download_shelf/download_list.html b/chrome/browser/resources/download_shelf/download_list.html index 0c21462..161350a 100644 --- a/chrome/browser/resources/download_shelf/download_list.html +++ b/chrome/browser/resources/download_shelf/download_list.html
@@ -1,5 +1,5 @@ <style> -#downloadList { +#download-list { display: flex; flex-direction: row; height: 100%; @@ -7,4 +7,4 @@ overflow: hidden; } </style> -<div id="downloadList"></div> +<div id="download-list"></div>
diff --git a/chrome/browser/resources/download_shelf/download_list.js b/chrome/browser/resources/download_shelf/download_list.js index 4d60c57..967418d 100644 --- a/chrome/browser/resources/download_shelf/download_list.js +++ b/chrome/browser/resources/download_shelf/download_list.js
@@ -35,7 +35,7 @@ this.apiProxy_ = DownloadShelfApiProxyImpl.getInstance(); /** @private {!Element} */ - this.listElement_ = assert(this.$('#downloadList')); + this.listElement_ = assert(this.$('#download-list')); /** @private {!Array<number>} */ this.listenerIds_ = []; @@ -92,7 +92,6 @@ if (i < elementCount) /** Remove elements out of viewport. */ { for (let j = i; j < elementCount; ++j) { const downloadElement = this.elements_[j]; - downloadElement.removeEventListener('click', this.onItemClick_); this.listElement_.removeChild(downloadElement); } this.elements_.splice(i, elementCount - i); @@ -106,7 +105,6 @@ } else /** Insert new elements inside viewport */ { downloadElement = document.createElement('download-item'); downloadElement.item = this.items_[i]; - downloadElement.addEventListener('click', this.onItemClick_); this.listElement_.appendChild(downloadElement); this.elements_.push(downloadElement); } @@ -117,21 +115,11 @@ if (itemCount < elementCount) { for (let i = itemCount; i < elementCount; ++i) { const downloadElement = this.elements_[i]; - downloadElement.removeEventListener('click', this.onItemClick_); this.listElement_.removeChild(downloadElement); } this.elements_.splice(itemCount, elementCount - itemCount); } } - - /** - * @param {!Event} e - * @private - */ - onItemClick_(e) { - this.apiProxy_.showContextMenu( - e.currentTarget.item.id, e.clientX, e.clientY); - } } customElements.define('download-list', DownloadListElement);
diff --git a/chrome/browser/resources/internals/hello_ts/app.ts b/chrome/browser/resources/internals/hello_ts/app.ts index b02e7332..34c10bf 100644 --- a/chrome/browser/resources/internals/hello_ts/app.ts +++ b/chrome/browser/resources/internals/hello_ts/app.ts
@@ -15,7 +15,7 @@ import {helloWorld} from 'chrome://resources/js/hello_world.js'; import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js'; import {getDeepActiveElement} from 'chrome://resources/js/util.m.js'; -import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {afterNextRender, html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; export class TsAppElement extends PolymerElement { static get is() { @@ -76,6 +76,7 @@ ready() { super.ready(); console.log(this.message); + console.log(afterNextRender); } connectedCallback() {
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html index 7522f43..7e9240b 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html
@@ -215,7 +215,9 @@ on-settings-boolean-control-change="onSpellcheckToggleChange_" deep-link-focus-id$="[[Setting.kSpellCheck]]"> </settings-toggle-button> - <div class="subsection"> + <iron-collapse class="subsection" opened="[[isCollapseOpened_( + languageSettingsV2Update2Enabled_, + prefs.browser.enable_spellchecking.value)]]"> <template is="dom-if" if="[[!languageSettingsV2Update2Enabled_]]"> <div id="spellCheckLanguagesList"> <div class="single-column"> @@ -347,7 +349,7 @@ </div> </div> </template> - </div> + </iron-collapse> </div> <template is="dom-if" if="[[showAddInputMethodsDialog_]]" restamp>
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js index a8deadd..2e16ea1 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js
@@ -501,4 +501,13 @@ return !this.languageSettingsV2Update2Enabled_ && (this.spellCheckLanguages_ && this.spellCheckLanguages_.length === 0); }, + + /** + * @param {boolean} update2Enabled + * @param {boolean} spellCheckOn + * @return {boolean} + */ + isCollapseOpened_(update2Enabled, spellCheckOn) { + return !update2Enabled || spellCheckOn; + }, });
diff --git a/chrome/browser/safe_browsing/settings_reset_prompt/DIR_METADATA b/chrome/browser/safe_browsing/settings_reset_prompt/DIR_METADATA index 0149205..bf59213 100644 --- a/chrome/browser/safe_browsing/settings_reset_prompt/DIR_METADATA +++ b/chrome/browser/safe_browsing/settings_reset_prompt/DIR_METADATA
@@ -1,4 +1,4 @@ monorail: { - component: "UI>Browser>Preferences>Protector" + component: "Services>Safebrowsing" } team_email: "security-dev@chromium.org"
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 5f98aabe..631c8d5 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -2425,6 +2425,8 @@ "webui/chromeos/onc_import_message_handler.h", "webui/chromeos/power_ui.cc", "webui/chromeos/power_ui.h", + "webui/chromeos/projector/projector_ui.cc", + "webui/chromeos/projector/projector_ui.h", "webui/chromeos/set_time_ui.cc", "webui/chromeos/set_time_ui.h", "webui/chromeos/slow_trace_ui.cc", @@ -2661,6 +2663,7 @@ "//chrome/browser/resources:internet_config_dialog_resources", "//chrome/browser/resources:internet_detail_dialog_resources", "//chrome/browser/resources/chromeos:multidevice_setup_resources", + "//chrome/browser/resources/chromeos/projector:resources", "//chrome/browser/ui/app_list/search/cros_action_history:cros_action_proto", "//chrome/browser/ui/app_list/search/search_result_ranker:app_launch_event_logger_proto", "//chrome/browser/ui/app_list/search/search_result_ranker:app_launch_predictor_proto",
diff --git a/chrome/browser/ui/ash/default_pinned_apps.cc b/chrome/browser/ui/ash/default_pinned_apps.cc index 860f2f15..893f22c 100644 --- a/chrome/browser/ui/ash/default_pinned_apps.cc +++ b/chrome/browser/ui/ash/default_pinned_apps.cc
@@ -7,11 +7,32 @@ #include "base/stl_util.h" #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" #include "chrome/browser/web_applications/components/web_app_id_constants.h" +#include "chrome/common/chrome_features.h" +#include "chrome/common/extensions/extension_constants.h" #include "extensions/common/constants.h" base::span<StaticAppId> GetDefaultPinnedApps() { + if (!base::FeatureList::IsEnabled(features::kDefaultPinnedAppsUpdate2021Q2)) { + constexpr const char* kLegacyDefaultPinnedApps[] = { + extension_misc::kFilesManagerAppId, + + extension_misc::kGmailAppId, + web_app::kGmailAppId, + + extension_misc::kGoogleDocAppId, + web_app::kGoogleDocsAppId, + + extension_misc::kYoutubeAppId, + web_app::kYoutubeAppId, + + arc::kPlayStoreAppId, + }; + return base::span<StaticAppId>(kLegacyDefaultPinnedApps, + base::size(kLegacyDefaultPinnedApps)); + } + constexpr const char* kDefaultPinnedApps[] = { - extension_misc::kGMailAppId, + extension_misc::kGmailAppId, web_app::kGmailAppId, web_app::kGoogleCalendarAppId, @@ -32,6 +53,23 @@ } base::span<StaticAppId> GetTabletFormFactorDefaultPinnedApps() { + if (!base::FeatureList::IsEnabled(features::kDefaultPinnedAppsUpdate2021Q2)) { + constexpr const char* kLegacyTabletFormFactorDefaultPinnedApps[] = { + extension_misc::kFilesManagerAppId, + + arc::kGmailAppId, + + extension_misc::kGoogleDocAppId, + + arc::kYoutubeAppId, + + arc::kPlayStoreAppId, + }; + return base::span<StaticAppId>( + kLegacyTabletFormFactorDefaultPinnedApps, + base::size(kLegacyTabletFormFactorDefaultPinnedApps)); + } + constexpr const char* kTabletFormFactorDefaultPinnedApps[] = { arc::kGmailAppId,
diff --git a/chrome/browser/ui/ash/launcher/chrome_shelf_controller_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_shelf_controller_unittest.cc index 84a828a..fce31a0 100644 --- a/chrome/browser/ui/ash/launcher/chrome_shelf_controller_unittest.cc +++ b/chrome/browser/ui/ash/launcher/chrome_shelf_controller_unittest.cc
@@ -1400,19 +1400,30 @@ StartPrefSyncService(syncer::SyncDataList()); EXPECT_EQ("Chrome, Youtube, App1", GetPinnedAppStatus()); - AddWebApp(web_app::kMessagesAppId); - EXPECT_EQ("Chrome, Messages, Youtube, App1", GetPinnedAppStatus()); + if (base::FeatureList::IsEnabled(features::kDefaultPinnedAppsUpdate2021Q2)) { + AddWebApp(web_app::kMessagesAppId); + EXPECT_EQ("Chrome, Messages, Youtube, App1", GetPinnedAppStatus()); - AddExtension(extension_files_app_.get()); - EXPECT_EQ("Chrome, Files, Messages, Youtube, App1", GetPinnedAppStatus()); + AddExtension(extension_files_app_.get()); + EXPECT_EQ("Chrome, Files, Messages, Youtube, App1", GetPinnedAppStatus()); - AddWebApp(web_app::kGoogleCalendarAppId); - EXPECT_EQ("Chrome, Calendar, Files, Messages, Youtube, App1", - GetPinnedAppStatus()); + AddWebApp(web_app::kGoogleCalendarAppId); + EXPECT_EQ("Chrome, Calendar, Files, Messages, Youtube, App1", + GetPinnedAppStatus()); - AddWebApp(web_app::kGmailAppId); - EXPECT_EQ("Chrome, Gmail, Calendar, Files, Messages, Youtube, App1", - GetPinnedAppStatus()); + AddWebApp(web_app::kGmailAppId); + EXPECT_EQ("Chrome, Gmail, Calendar, Files, Messages, Youtube, App1", + GetPinnedAppStatus()); + } else { + AddWebApp(web_app::kGoogleDocsAppId); + EXPECT_EQ("Chrome, Doc, Youtube, App1", GetPinnedAppStatus()); + + AddWebApp(web_app::kGmailAppId); + EXPECT_EQ("Chrome, Gmail, Doc, Youtube, App1", GetPinnedAppStatus()); + + AddExtension(extension_files_app_.get()); + EXPECT_EQ("Chrome, Files, Gmail, Doc, Youtube, App1", GetPinnedAppStatus()); + } } TEST_F(ChromeShelfControllerSplitSettingsSyncTest, PreinstalledApps) { @@ -1429,9 +1440,13 @@ AddWebApp(web_app::kYoutubeAppId); AddWebApp(web_app::kMessagesAppId); AddWebApp(web_app::kGmailAppId); + AddWebApp(web_app::kGoogleDocsAppId); // Default apps are pinned. - EXPECT_EQ("Chrome, Gmail, Messages, Youtube", GetPinnedAppStatus()); + if (base::FeatureList::IsEnabled(features::kDefaultPinnedAppsUpdate2021Q2)) + EXPECT_EQ("Chrome, Gmail, Messages, Youtube", GetPinnedAppStatus()); + else + EXPECT_EQ("Chrome, Gmail, Doc, Youtube", GetPinnedAppStatus()); } TEST_F(ChromeShelfControllerLacrosTest, LacrosPinnedByDefault) {
diff --git a/chrome/browser/ui/ash/sharesheet/sharesheet_constants.h b/chrome/browser/ui/ash/sharesheet/sharesheet_constants.h index eb57a2d..9b1cfd7 100644 --- a/chrome/browser/ui/ash/sharesheet/sharesheet_constants.h +++ b/chrome/browser/ui/ash/sharesheet/sharesheet_constants.h
@@ -13,6 +13,8 @@ // Sizes are in px. constexpr int kSpacing = 24; +constexpr size_t kTextPreviewMaximumLines = 3; + constexpr int kTitleTextLineHeight = 24; constexpr int kSubtitleTextLineHeight = 22; constexpr int kPrimaryTextLineHeight = 20;
diff --git a/chrome/browser/ui/ash/sharesheet/sharesheet_content_previews.cc b/chrome/browser/ui/ash/sharesheet/sharesheet_content_previews.cc index 3c06790..30ff7595 100644 --- a/chrome/browser/ui/ash/sharesheet/sharesheet_content_previews.cc +++ b/chrome/browser/ui/ash/sharesheet/sharesheet_content_previews.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ui/ash/sharesheet/sharesheet_content_previews.h" +#include <algorithm> #include <utility> #include "ash/public/cpp/ash_typography.h" @@ -97,11 +98,7 @@ } void SharesheetContentPreviews::ShowTextPreview() { - std::vector<std::u16string> text_fields; - if (intent_->share_text.has_value() && - !(intent_->share_text.value().empty())) { - text_fields = ExtractShareText(); - } + std::vector<std::u16string> text_fields = ExtractShareText(); std::u16string filenames_tooltip_text = u""; if (intent_->file_urls.has_value() && !intent_->file_urls.value().empty()) { @@ -124,19 +121,16 @@ text_fields.push_back(file_text); } - // TODO(crbug.com/2650014): Handle drive_share_url and share_title fields. - // When this is added, we can remove the if condition, because it should - // be impossible that there are no text_fields. - - // File names show on the last line, so |filenames_tooltip_text| is only - // passed in on the last line of text. If there are no files, it will be empty - // and the tooltip will instead be set to what the text says. - if (text_fields.size() == 1) { - AddTextLine(text_fields[0], filenames_tooltip_text); - } else if (text_fields.size() > 1) { - AddTextLine(text_fields[0]); - AddTextLine(text_fields[1], filenames_tooltip_text); + int index = 0; + int max_lines = std::min(text_fields.size(), kTextPreviewMaximumLines); + for (; index < max_lines - 1; ++index) { + AddTextLine(text_fields[index]); } + // File names must always be on the last line, so |filenames_tooltip_text| is + // only passed in on the last line of text. If there are no files, it will be + // empty and the tooltip will instead be set to what the text says. + DCHECK_LT(index, text_fields.size()); + AddTextLine(text_fields[index], filenames_tooltip_text); } void SharesheetContentPreviews::AddTextLine( @@ -149,7 +143,6 @@ new_line->SetHorizontalAlignment(gfx::ALIGN_LEFT); new_line->SetHandlesTooltips(true); if (tooltip_text.empty()) { - new_line->SetTooltipText(new_line->GetText()); return; } new_line->SetTooltipText(tooltip_text); @@ -161,31 +154,47 @@ } std::vector<std::u16string> SharesheetContentPreviews::ExtractShareText() { - std::vector<std::u16string> result; - std::string extracted_text = intent_->share_text.value(); - GURL extracted_url; - size_t last_space = extracted_text.find_last_of(' '); + std::vector<std::u16string> text_fields; - if (!intent_->share_text.has_value()) - return result; - - if (last_space == std::string::npos) { - extracted_url = GURL(extracted_text); - if (extracted_url.is_valid()) - extracted_text.clear(); - } else { - extracted_url = GURL(extracted_text.substr(last_space + 1)); - if (extracted_url.is_valid()) - extracted_text.erase(last_space); + if (intent_->share_title.has_value() && + !(intent_->share_title.value().empty())) { + std::string title_text = intent_->share_title.value(); + text_fields.push_back(base::ASCIIToUTF16(title_text)); } - if (!extracted_text.empty()) - result.push_back(base::ASCIIToUTF16(extracted_text)); + if (intent_->drive_share_url.has_value()) { + GURL drive_share_url = intent_->drive_share_url.value(); + if (drive_share_url.is_valid()) { + text_fields.push_back(base::ASCIIToUTF16(drive_share_url.spec())); + } + } - if (extracted_url.is_valid()) - result.push_back(base::ASCIIToUTF16(extracted_url.spec())); + if (intent_->share_text.has_value() && + !(intent_->share_text.value().empty())) { + std::string extracted_text = intent_->share_text.value(); + size_t last_space = extracted_text.find_last_of(' '); + GURL extracted_url; - return result; + if (last_space == std::string::npos) { + extracted_url = GURL(extracted_text); + if (extracted_url.is_valid()) + extracted_text.clear(); + } else { + extracted_url = GURL(extracted_text.substr(last_space + 1)); + if (extracted_url.is_valid()) + extracted_text.erase(last_space); + } + + if (!extracted_text.empty()) + text_fields.push_back(base::ASCIIToUTF16(extracted_text)); + + if (extracted_url.is_valid()) + text_fields.push_back(base::ASCIIToUTF16(extracted_url.spec())); + } + + // There will always be at least 1 text field. + DCHECK_NE(text_fields.size(), 0); + return text_fields; } // TODO(crbug.com/2650014) Optimise to load several images.
diff --git a/chrome/browser/ui/prefs/DIR_METADATA b/chrome/browser/ui/prefs/DIR_METADATA index ad6d979..3937744 100644 --- a/chrome/browser/ui/prefs/DIR_METADATA +++ b/chrome/browser/ui/prefs/DIR_METADATA
@@ -1,3 +1,3 @@ monorail { - component: "UI>Browser>Preferences" + component: "Internals>Preferences" }
diff --git a/chrome/browser/ui/views/bubble/bubble_contents_wrapper.h b/chrome/browser/ui/views/bubble/bubble_contents_wrapper.h index f2ae522..f87d121 100644 --- a/chrome/browser/ui/views/bubble/bubble_contents_wrapper.h +++ b/chrome/browser/ui/views/bubble/bubble_contents_wrapper.h
@@ -110,12 +110,19 @@ ui::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()); // Depends on the WebUIController object being constructed synchronously - // when the navigation is started in LoadInitialURL(). - GetWebUIController()->set_embedder(weak_ptr_factory_.GetWeakPtr()); + // when the navigation is started in LoadInitialURL(). The WebUIController + // may not be defined at this point if the content code encounteres an + // error during navigation so check here to ensure the pointer is valid. + if (T* webui_controller = GetWebUIController()) + webui_controller->set_embedder(weak_ptr_factory_.GetWeakPtr()); } + // May return null. T* GetWebUIController() { - return web_contents()->GetWebUI()->GetController()->template GetAs<T>(); + content::WebUI* const webui = web_contents()->GetWebUI(); + return webui && webui->GetController() + ? webui->GetController()->template GetAs<T>() + : nullptr; } private:
diff --git a/chrome/browser/ui/views/download/download_shelf_web_view.cc b/chrome/browser/ui/views/download/download_shelf_web_view.cc index b895297..1a7165e 100644 --- a/chrome/browser/ui/views/download/download_shelf_web_view.cc +++ b/chrome/browser/ui/views/download/download_shelf_web_view.cc
@@ -44,6 +44,13 @@ gfx::Size(), gfx::Size(0, 58)); } +bool DownloadShelfWebView::HandleContextMenu( + content::RenderFrameHost* render_frame_host, + const content::ContextMenuParams& params) { + // Suppress native context menu, since the web content shows one. + return true; +} + void DownloadShelfWebView::OnThemeChanged() { views::WebView::OnThemeChanged(); SetBorder(views::CreateSolidSidedBorder(
diff --git a/chrome/browser/ui/views/download/download_shelf_web_view.h b/chrome/browser/ui/views/download/download_shelf_web_view.h index 45dd78c..2ca67c6 100644 --- a/chrome/browser/ui/views/download/download_shelf_web_view.h +++ b/chrome/browser/ui/views/download/download_shelf_web_view.h
@@ -28,6 +28,8 @@ // views::WebView: gfx::Size CalculatePreferredSize() const override; + bool HandleContextMenu(content::RenderFrameHost* render_frame_host, + const content::ContextMenuParams& params) override; protected: // DownloadShelf:
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc index f3625cb..caa1dc8 100644 --- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc +++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
@@ -188,6 +188,13 @@ } } +TabStripUI* GetTabStripUI(content::WebContents* web_contents) { + content::WebUI* const webui = web_contents->GetWebUI(); + return webui && webui->GetController() + ? webui->GetController()->template GetAs<TabStripUI>() + : nullptr; +} + class WebUITabStripWebView : public views::WebView { public: METADATA_HEADER(WebUITabStripWebView); @@ -506,9 +513,8 @@ view_observations_.AddObservation(tab_contents_container_); view_observations_.AddObservation(top_container_); - TabStripUI* const tab_strip_ui = static_cast<TabStripUI*>( - web_view_->GetWebContents()->GetWebUI()->GetController()); - tab_strip_ui->Initialize(browser_view_->browser(), this); + if (TabStripUI* tab_strip_ui = GetTabStripUI(web_view_->GetWebContents())) + tab_strip_ui->Initialize(browser_view_->browser(), this); } WebUITabStripContainerView::~WebUITabStripContainerView() { @@ -904,9 +910,8 @@ // replaceable with PreferredSizeChanged. InvalidateLayout(); - TabStripUI* const tab_strip_ui = static_cast<TabStripUI*>( - web_view_->GetWebContents()->GetWebUI()->GetController()); - tab_strip_ui->LayoutChanged(); + if (TabStripUI* tab_strip_ui = GetTabStripUI(web_view_->GetWebContents())) + tab_strip_ui->LayoutChanged(); } } @@ -923,10 +928,8 @@ // Make sure the pane first receives focus, then send a WebUI event to the // front-end so the correct HTML element receives focus. bool received_focus = AccessiblePaneView::SetPaneFocusAndFocusDefault(); - if (received_focus) { - TabStripUI* const tab_strip_ui = static_cast<TabStripUI*>( - web_view_->GetWebContents()->GetWebUI()->GetController()); + TabStripUI* tab_strip_ui = GetTabStripUI(web_view_->GetWebContents()); + if (received_focus && tab_strip_ui) tab_strip_ui->ReceivedKeyboardFocus(); - } return received_focus; }
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index 417cf6e0..85b9066 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -202,6 +202,7 @@ #include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h" #include "chrome/browser/ui/webui/chromeos/network_ui.h" #include "chrome/browser/ui/webui/chromeos/power_ui.h" +#include "chrome/browser/ui/webui/chromeos/projector/projector_ui.h" #include "chrome/browser/ui/webui/chromeos/set_time_ui.h" #include "chrome/browser/ui/webui/chromeos/slow_trace_ui.h" #include "chrome/browser/ui/webui/chromeos/slow_ui.h" @@ -805,6 +806,8 @@ !profile->IsOffTheRecord()) { return &NewWebUI<nearby_share::NearbyShareDialogUI>; } + if (url.host_piece() == chrome::kChromeUIProjectorHost) + return &NewWebUI<chromeos::ProjectorUI>; if (url.host_piece() == chrome::kChromeUISetTimeHost) return &NewWebUI<chromeos::SetTimeUI>; if (url.host_piece() == chrome::kChromeUISlowHost)
diff --git a/chrome/browser/ui/webui/chromeos/emoji/emoji_ui.cc b/chrome/browser/ui/webui/chromeos/emoji/emoji_ui.cc index 229a3f8b..535b113 100644 --- a/chrome/browser/ui/webui/chromeos/emoji/emoji_ui.cc +++ b/chrome/browser/ui/webui/chromeos/emoji/emoji_ui.cc
@@ -101,6 +101,8 @@ auto weak_ptr = bubble_view->GetWeakPtr(); views::BubbleDialogDelegateView::CreateBubble(std::move(bubble_view)); weak_ptr->SetAnchorRect(anchor_rect); + weak_ptr->GetBubbleFrameView()->SetPreferredArrowAdjustment( + views::BubbleFrameView::PreferredArrowAdjustment::kOffset); weak_ptr->set_adjust_if_offscreen(true); }
diff --git a/chrome/browser/ui/webui/chromeos/projector/projector_ui.cc b/chrome/browser/ui/webui/chromeos/projector/projector_ui.cc new file mode 100644 index 0000000..110edb2 --- /dev/null +++ b/chrome/browser/ui/webui/chromeos/projector/projector_ui.cc
@@ -0,0 +1,37 @@ +// Copyright 2021 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/chromeos/projector/projector_ui.h" + +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/webui_util.h" +#include "chrome/common/url_constants.h" +#include "chromeos/projector/grit/projector_resources.h" +#include "chromeos/projector/grit/projector_resources_map.h" +#include "content/public/browser/web_ui_data_source.h" + +namespace chromeos { + +namespace { + +content::WebUIDataSource* CreateProjectorHTMLSource() { + content::WebUIDataSource* source = + content::WebUIDataSource::Create(chrome::kChromeUIProjectorHost); + + webui::SetupWebUIDataSource( + source, base::make_span(kProjectorResources, kProjectorResourcesSize), + IDR_PROJECTOR_SELFIE_CAM_HTML); + return source; +} + +} // namespace + +ProjectorUI::ProjectorUI(content::WebUI* web_ui) : WebUIController(web_ui) { + Profile* profile = Profile::FromWebUI(web_ui); + content::WebUIDataSource::Add(profile, CreateProjectorHTMLSource()); +} + +ProjectorUI::~ProjectorUI() = default; + +} // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/projector/projector_ui.h b/chrome/browser/ui/webui/chromeos/projector/projector_ui.h new file mode 100644 index 0000000..367d28f --- /dev/null +++ b/chrome/browser/ui/webui/chromeos/projector/projector_ui.h
@@ -0,0 +1,23 @@ +// Copyright 2021 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_CHROMEOS_PROJECTOR_PROJECTOR_UI_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_PROJECTOR_PROJECTOR_UI_H_ + +#include "content/public/browser/web_ui_controller.h" + +namespace chromeos { + +// The implementation for the Projector Selfie Cam WebUI. +class ProjectorUI : public content::WebUIController { + public: + explicit ProjectorUI(content::WebUI* web_ui); + ~ProjectorUI() override; + ProjectorUI(const ProjectorUI&) = delete; + ProjectorUI& operator=(const ProjectorUI&) = delete; +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_PROJECTOR_PROJECTOR_UI_H_
diff --git a/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.cc b/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.cc index b4016d8..f2d1346 100644 --- a/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.cc
@@ -11,9 +11,9 @@ #include "base/bind.h" #include "base/memory/ptr_util.h" #include "base/values.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/settings/chromeos/os_settings_section.h" #include "chrome/browser/ui/webui/webui_util.h"
diff --git a/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h b/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h index 9c2d1e3a..60301d4 100644 --- a/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h
@@ -12,7 +12,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observation.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "chromeos/dbus/kerberos/kerberos_service.pb.h" #include "components/signin/public/identity_manager/identity_manager.h"
diff --git a/chrome/browser/ui/webui/settings/chromeos/kerberos_section.h b/chrome/browser/ui/webui/settings/chromeos/kerberos_section.h index 12c7d8b8..b84e908 100644 --- a/chrome/browser/ui/webui/settings/chromeos/kerberos_section.h +++ b/chrome/browser/ui/webui/settings/chromeos/kerberos_section.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_KERBEROS_SECTION_H_ #include "base/values.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/ui/webui/settings/chromeos/os_settings_section.h" class Profile;
diff --git a/chrome/browser/ui/webui/settings/chromeos/os_settings_manager_factory.cc b/chrome/browser/ui/webui/settings/chromeos/os_settings_manager_factory.cc index cd270e5..6a1931d 100644 --- a/chrome/browser/ui/webui/settings/chromeos/os_settings_manager_factory.cc +++ b/chrome/browser/ui/webui/settings/chromeos/os_settings_manager_factory.cc
@@ -5,9 +5,9 @@ #include "chrome/browser/ui/webui/settings/chromeos/os_settings_manager_factory.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/chromeos/android_sms/android_sms_service_factory.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/chromeos/multidevice_setup/multidevice_setup_client_factory.h" #include "chrome/browser/chromeos/phonehub/phone_hub_manager_factory.h" #include "chrome/browser/chromeos/printing/cups_printers_manager_factory.h"
diff --git a/chrome/browser/ui/webui/settings/chromeos/os_settings_manager_unittest.cc b/chrome/browser/ui/webui/settings/chromeos/os_settings_manager_unittest.cc index ac6c5a9c..f6f30652 100644 --- a/chrome/browser/ui/webui/settings/chromeos/os_settings_manager_unittest.cc +++ b/chrome/browser/ui/webui/settings/chromeos/os_settings_manager_unittest.cc
@@ -8,9 +8,9 @@ #include "base/no_destructor.h" #include "base/test/metrics/histogram_enum_reader.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/chromeos/android_sms/android_sms_service_factory.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h" #include "chrome/browser/chromeos/multidevice_setup/multidevice_setup_client_factory.h" #include "chrome/browser/chromeos/phonehub/phone_hub_manager_factory.h" #include "chrome/browser/chromeos/printing/cups_printers_manager_factory.h"
diff --git a/chrome/browser/ui/webui/settings/chromeos/people_section.h b/chrome/browser/ui/webui/settings/chromeos/people_section.h index 61fe0e0..cddb87a 100644 --- a/chrome/browser/ui/webui/settings/chromeos/people_section.h +++ b/chrome/browser/ui/webui/settings/chromeos/people_section.h
@@ -9,7 +9,7 @@ #include "base/memory/weak_ptr.h" #include "base/scoped_observation.h" #include "base/values.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/ui/webui/settings/chromeos/os_settings_section.h" #include "components/account_manager_core/account.h" #include "components/account_manager_core/account_manager_facade.h"
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index ec1ed1dd..cb014a30 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -101,10 +101,10 @@ #include "ash/public/cpp/ash_switches.h" #include "chrome/browser/ash/account_manager/account_manager_util.h" #include "chrome/browser/ash/assistant/assistant_util.h" +#include "chrome/browser/ash/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/ash/login/quick_unlock/quick_unlock_utils.h" #include "chrome/browser/ash/ownership/owner_settings_service_ash.h" #include "chrome/browser/ash/ownership/owner_settings_service_ash_factory.h" -#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom.h" #include "chrome/common/webui_url_constants.h"
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc index 79694df..288bfdc 100644 --- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc +++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
@@ -94,6 +94,8 @@ TabStripUI::~TabStripUI() = default; +WEB_UI_CONTROLLER_TYPE_IMPL(TabStripUI) + void TabStripUI::Initialize(Browser* browser, TabStripUIEmbedder* embedder) { content::WebUI* const web_ui = TabStripUI::web_ui(); DCHECK_EQ(Profile::FromWebUI(web_ui), browser->profile());
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h index 6f2f98d..a483622f 100644 --- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h +++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h
@@ -41,6 +41,7 @@ TabStripUIHandler* handler_ = nullptr; + WEB_UI_CONTROLLER_TYPE_DECL(); DISALLOW_COPY_AND_ASSIGN(TabStripUI); };
diff --git a/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/SurfaceScopeDependencyProvider.java b/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/SurfaceScopeDependencyProvider.java index 57fae78..d43a0c1 100644 --- a/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/SurfaceScopeDependencyProvider.java +++ b/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/SurfaceScopeDependencyProvider.java
@@ -73,6 +73,7 @@ } /** Events that are triggered during the video auto-play. */ + @Deprecated public enum AutoplayEvent { /** * Auto-play is triggered, but not started yet. This occurs when the video card becomes @@ -93,5 +94,86 @@ } /** Reports the event related to video auto-play. */ + @Deprecated default void reportAutoplayEvent(AutoplayEvent event) {} + + /** Events that are triggered during the video playing. */ + public @interface VideoPlayEvent { + // Events applying muted autoplay only. + + /** + * Auto-play is triggered, but not started yet. This occurs when the video card becomes + * fully visible. + */ + int AUTOPLAY_REQUESTED = 0; + /** + * Auto-play stops before reaching the end. This occurs when the video card becomes + * partially visible or invisible. + */ + int AUTOPLAY_STOPPED = 1; + /** Auto-play reaches the end. */ + int AUTOPLAY_ENDED = 2; + /** User clicks on the auto-play video. */ + int AUTOPLAY_CLICKED = 3; + + // Events applying to both muted autoplay and regular play. + + /** The player starts to play the video. */ + int PLAY_STARTED = 4; + int PLAY_ERROR = 5; + int NUM_ENTRIES = 6; + } + + /** Errors occurred during the video player initialization. */ + public @interface VideoInitializationError { + int CLIENT_LIBRARY_UPDATE_REQUIRED = 0; + int DEVELOPER_KEY_INVALID = 1; + int ERROR_CONNECTING_TO_SERVICE = 2; + int INTERNAL_ERROR = 3; + int INVALID_APPLICATION_SIGNATURE = 4; + int NETWORK_ERROR = 5; + int SERVICE_DISABLED = 6; + int SERVICE_INVALID = 7; + int SERVICE_MISSING = 8; + int SERVICE_VERSION_UPDATE_REQUIRED = 9; + int UNKNOWN_ERROR = 10; + int NUM_ENTRIES = 11; + } + + /** Errors occurred during the video playing. */ + public @interface VideoPlayError { + int NOT_PLAYABLE = 0; + int UNAUTHORIZED_OVERLAY = 1; + int INTERNAL_ERROR = 2; + int UNKNOWN_ERROR = 3; + int AUTOPLAY_DISABLED = 4; + int UNEXPECTED_SERVICE_DISCONNECTION = 5; + int NOT_PLAYABLE_MUTED = 6; + int NUM_ENTRIES = 7; + } + + /** + * Reports the event related to video playing. + * + * @param isMutedAutoplay Whether the video is currently autoplaying muted. + * @param event The event to report. + */ + default void reportVideoPlayEvent(boolean isMutedAutoplay, @VideoPlayEvent int event) {} + + /** + * Reports the error related to video player initialization. + * + * @param isMutedAutoplay Whether the video is currently autoplaying muted. + * @param error The error to report. + */ + default void reportVideoInitializationError( + boolean isMutedAutoplay, @VideoInitializationError int error) {} + + /** + * Reports the error related to video playing. + * + * @param isMutedAutoplay Whether the video is currently autoplaying muted. + * @param error The error to report. + */ + default void reportVideoPlayError(boolean isMutedAutoplay, @VideoPlayError int error) {} }
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 97bddf9c..4864ce7 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-master-1619546379-20f90ebeb75ecf41e96b23dab18358a4953a8c02.profdata +chrome-mac-master-1619567641-53df4d93cea09a77e17115e55d74f50d0e18eeda.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 008e66b..97ed8dbf 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-master-1619546379-5a0dba72f543078b3748e5d96b95d110e07e66a3.profdata +chrome-win32-master-1619578171-5731c483e2fbaf9c8dc449565a36daa1c0b3ef66.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 698f1c1..06a78c1 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-master-1619546379-2747bea154d1d236cc5533b03b96ae01e7fd1034.profdata +chrome-win64-master-1619578171-c779e52dacab672955a85853f588333421cd0900.profdata
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni index e27f804..0770f5a 100644 --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni
@@ -209,6 +209,7 @@ "$root_gen_dir/chromeos/chromeos_print_management_resources.pak", "$root_gen_dir/chromeos/chromeos_resources.pak", "$root_gen_dir/chromeos/connectivity_diagnostics_resources.pak", + "$root_gen_dir/chromeos/projector/projector_resources.pak", "$root_gen_dir/ui/file_manager/file_manager_gen_resources.pak", "$root_gen_dir/ui/file_manager/file_manager_resources.pak", ] @@ -225,6 +226,7 @@ "//chrome/browser/resources/chromeos/login:resources", "//chrome/browser/resources/chromeos/multidevice_internals:resources", "//chrome/browser/resources/chromeos/network_ui:resources", + "//chrome/browser/resources/chromeos/projector:resources", "//chrome/browser/resources/nearby_internals:resources", "//chrome/browser/resources/nearby_share:resources", "//chrome/browser/resources/settings/chromeos:resources",
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index 8dcc5f87..96af1297b 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -227,6 +227,13 @@ "DefaultWebAppInstallation", base::FEATURE_ENABLED_BY_DEFAULT}; #endif +#if BUILDFLAG(IS_CHROMEOS_ASH) +// Updates the default set of pinned apps in the Chrome OS shelf for new +// profiles. +const base::Feature kDefaultPinnedAppsUpdate2021Q2{ + "DefaultPinnedAppsUpdate2021Q2", base::FEATURE_DISABLED_BY_DEFAULT}; +#endif + // Enable using tab sharing infobars for desktop capture. const base::Feature kDesktopCaptureTabSharingInfobar{ "DesktopCaptureTabSharingInfobar", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index 4b0cc367..d7db15b 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -166,6 +166,11 @@ extern const base::Feature kPreinstalledWebAppInstallation; #endif +#if BUILDFLAG(IS_CHROMEOS_ASH) +COMPONENT_EXPORT(CHROME_FEATURES) +extern const base::Feature kDefaultPinnedAppsUpdate2021Q2; +#endif + COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kDesktopCaptureTabSharingInfobar;
diff --git a/chrome/common/extensions/api/autotest_private.idl b/chrome/common/extensions/api/autotest_private.idl index be384814..9c74214 100644 --- a/chrome/common/extensions/api/autotest_private.idl +++ b/chrome/common/extensions/api/autotest_private.idl
@@ -954,9 +954,14 @@ WindowStateChangeDict change, WindowStateCallback callback); + // Activate app window given by "id". + // |id|: the id of the window + // |callback|: called when the window is requested to activate. + static void activateAppWindow(long id, VoidCallback callback); + // Closes an app window given by "id". // |id|: the id of the window - // |callback|: called when the window state is requested to close. + // |callback|: called when the window is requested to close. static void closeAppWindow(long id, VoidCallback callback); // Installs the Progressive Web App (PWA) that is in the current URL.
diff --git a/chrome/common/media/cdm_registration.cc b/chrome/common/media/cdm_registration.cc index 341c94d..b575456 100644 --- a/chrome/common/media/cdm_registration.cc +++ b/chrome/common/media/cdm_registration.cc
@@ -20,10 +20,14 @@ #if BUILDFLAG(ENABLE_WIDEVINE) #include "third_party/widevine/cdm/widevine_cdm_common.h" // nogncheck -#if defined(OS_LINUX) || defined(OS_CHROMEOS) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || \ + BUILDFLAG(ENABLE_MEDIA_FOUNDATION_WIDEVINE_CDM) #include "base/native_library.h" -#include "base/no_destructor.h" #include "chrome/common/chrome_paths.h" +#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || + // BUILDFLAG(ENABLE_MEDIA_FOUNDATION_WIDEVINE_CDM) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) +#include "base/no_destructor.h" #include "components/cdm/common/cdm_manifest.h" // TODO(crbug.com/663554): Needed for WIDEVINE_CDM_VERSION_STRING. Support // component updated CDM on all desktop platforms and remove this. @@ -243,6 +247,26 @@ cdms->push_back(content::CdmInfo( kWidevineKeySystem, Robustness::kHardwareSecure, std::move(capability))); +#elif BUILDFLAG(ENABLE_MEDIA_FOUNDATION_WIDEVINE_CDM) + // TODO(hmchen): Remove this after the Windows CDM is component updated. + base::FilePath install_dir; + if (!base::PathService::Get(chrome::DIR_BUNDLED_WIDEVINE_CDM, &install_dir)) + return; + + auto widevine_cdm_path = install_dir.AppendASCII( + base::GetNativeLibraryName(kMediaFoundationWidevineCdmLibraryName)); + if (!base::PathExists(widevine_cdm_path)) + return; + + // Register Widevine hardware secure support for lazy initialization. + // TODO(xhwang): Get the version from the DLL. + VLOG(1) << "Registering " << kMediaFoundationWidevineCdmDisplayName; + cdms->push_back(content::CdmInfo( + kWidevineKeySystem, Robustness::kHardwareSecure, base::nullopt, + /*supports_sub_key_systems=*/false, + kMediaFoundationWidevineCdmDisplayName, kMediaFoundationWidevineCdmGuid, + base::Version(), widevine_cdm_path, + /*file_system_id=*/"")); #endif // BUILDFLAG(USE_CHROMEOS_PROTECTED_MEDIA) }
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index b2d4ece7..270854c 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -951,6 +951,10 @@ const char kReleaseNotesSuggestionChipTimesLeftToShow[] = "times_left_to_show_release_notes_suggestion_chip"; +// Last milestone on which the Discover Tab notification was shown. +const char kDiscoverTabNotificationLastShownMilestone[] = + "discover_tab_notification_last_shown_milestone"; + // Boolean pref indicating whether the NTLM authentication protocol should be // enabled when mounting an SMB share with a user credential by the Network File // Shares for Chrome OS feature.
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 0b426203..4fb8e38 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h
@@ -327,6 +327,7 @@ extern const char kLastChildScreenTimeReset[]; extern const char kReleaseNotesLastShownMilestone[]; extern const char kReleaseNotesSuggestionChipTimesLeftToShow[]; +extern const char kDiscoverTabNotificationLastShownMilestone[]; extern const char kNTLMShareAuthenticationEnabled[]; extern const char kNetworkFileSharesPreconfiguredShares[]; extern const char kMostRecentlyUsedNetworkFileShareURL[];
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc index 72cd6564..af02eff 100644 --- a/chrome/common/webui_url_constants.cc +++ b/chrome/common/webui_url_constants.cc
@@ -40,7 +40,7 @@ const char kChromeUIConflictsHost[] = "conflicts"; const char kChromeUIConstrainedHTMLTestURL[] = "chrome://constrained-test/"; const char kChromeUIContentSettingsURL[] = "chrome://settings/content"; -// TODO (crbug.com/1107816): Remove deprecated cookie URL redirection. +// TODO(crbug/1107816): Remove deprecated cookie URL redirection. const char kChromeUICookieSettingsDeprecatedURL[] = "chrome://settings/content/cookies"; const char kChromeUICookieSettingsURL[] = "chrome://settings/cookies"; @@ -283,6 +283,7 @@ const char kChromeUIPasswordChangeUrl[] = "chrome://password-change"; const char kChromeUIPrintManagementUrl[] = "chrome://print-management"; const char kChromeUIPowerHost[] = "power"; +const char kChromeUIProjectorHost[] = "projector"; const char kChromeUIScanningAppURL[] = "chrome://scanning"; const char kChromeUIScreenlockIconHost[] = "screenlock-icon"; const char kChromeUIScreenlockIconURL[] = "chrome://screenlock-icon/";
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h index feb6c71..0d664033 100644 --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h
@@ -272,6 +272,7 @@ extern const char kChromeUIPasswordChangeUrl[]; extern const char kChromeUIPrintManagementUrl[]; extern const char kChromeUIPowerHost[]; +extern const char kChromeUIProjectorHost[]; extern const char kChromeUIScanningAppURL[]; extern const char kChromeUIScreenlockIconHost[]; extern const char kChromeUIScreenlockIconURL[];
diff --git a/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js b/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js index 5e43e77db..6d169366 100644 --- a/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js +++ b/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js
@@ -231,7 +231,7 @@ }); apiFunctions.setHandleRequest('zipSelection', function( - parentEntry, entries, destName, callback) { + entries, parentEntry, destName, callback) { var parentUrl = getEntryURL(parentEntry); var urls = entries.map(function(entry) { return getEntryURL(entry);
diff --git a/chrome/services/file_util/BUILD.gn b/chrome/services/file_util/BUILD.gn index 2c450f5..4180985 100644 --- a/chrome/services/file_util/BUILD.gn +++ b/chrome/services/file_util/BUILD.gn
@@ -2,8 +2,10 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/buildflag_header.gni") import("//build/config/chromeos/ui_mode.gni") import("//build/config/features.gni") +import("//chrome/services/file_util/public/features.gni") import("//components/safe_browsing/buildflags.gni") source_set("file_util") { @@ -13,12 +15,11 @@ ] deps = [ + ":buildflags", "//base", "//build:chromeos_buildflags", - "//chrome/common/safe_browsing", - "//chrome/common/safe_browsing:archive_analyzer_results", - "//chrome/common/safe_browsing:rar_analyzer", "//components/safe_browsing:buildflags", + "//extensions/buildflags:buildflags", "//mojo/public/cpp/bindings", ] @@ -46,5 +47,41 @@ "safe_archive_analyzer.cc", "safe_archive_analyzer.h", ] + deps += [ + "//chrome/common/safe_browsing", + "//chrome/common/safe_browsing:archive_analyzer_results", + "//chrome/common/safe_browsing:rar_analyzer", + ] } + + if (enable_xz_extractor) { + sources += [ + "xz_file_extractor.cc", + "xz_file_extractor.h", + ] + deps += [ + "//third_party/lzma_sdk:lzma_sdk", + "//third_party/lzma_sdk:lzma_sdk_xz", + ] + } +} + +source_set("unit_tests") { + testonly = true + + if (enable_xz_extractor) { + sources = [ "xz_file_extractor_unittest.cc" ] + + deps = [ + ":file_util", + "//base/test:test_support", + "//testing/gmock", + "//testing/gtest", + ] + } +} + +buildflag_header("buildflags") { + header = "buildflags.h" + flags = [ "ENABLE_XZ_EXTRACTOR=$enable_xz_extractor" ] }
diff --git a/chrome/services/file_util/DEPS b/chrome/services/file_util/DEPS index 32919248..2de2b4a5 100644 --- a/chrome/services/file_util/DEPS +++ b/chrome/services/file_util/DEPS
@@ -2,5 +2,7 @@ "+components/services/filesystem", "+chrome/utility/safe_browsing", "+components/safe_browsing", + "+extensions/buildflags", + "+third_party/lzma_sdk", "+third_party/zlib/google", ]
diff --git a/chrome/services/file_util/file_util_service.cc b/chrome/services/file_util/file_util_service.cc index 8e4e3a08..e9cd0d6 100644 --- a/chrome/services/file_util/file_util_service.cc +++ b/chrome/services/file_util/file_util_service.cc
@@ -5,10 +5,12 @@ #include "chrome/services/file_util/file_util_service.h" #include <memory> +#include <utility> #include "base/bind.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "chrome/services/file_util/buildflags.h" #include "components/safe_browsing/buildflags.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" @@ -20,6 +22,10 @@ #include "chrome/services/file_util/zip_file_creator.h" #endif +#if BUILDFLAG(ENABLE_XZ_EXTRACTOR) +#include "chrome/services/file_util/xz_file_extractor.h" +#endif + FileUtilService::FileUtilService( mojo::PendingReceiver<chrome::mojom::FileUtilService> receiver) : receiver_(this, std::move(receiver)) {} @@ -41,3 +47,11 @@ std::move(receiver)); } #endif + +#if BUILDFLAG(ENABLE_XZ_EXTRACTOR) +void FileUtilService::BindXzFileExtractor( + mojo::PendingReceiver<chrome::mojom::XzFileExtractor> receiver) { + mojo::MakeSelfOwnedReceiver(std::make_unique<XzFileExtractor>(), + std::move(receiver)); +} +#endif
diff --git a/chrome/services/file_util/file_util_service.h b/chrome/services/file_util/file_util_service.h index ba01b01..b0be209a 100644 --- a/chrome/services/file_util/file_util_service.h +++ b/chrome/services/file_util/file_util_service.h
@@ -7,6 +7,7 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "chrome/services/file_util/buildflags.h" #include "chrome/services/file_util/public/mojom/file_util_service.mojom.h" #include "components/safe_browsing/buildflags.h" #include "mojo/public/cpp/bindings/pending_receiver.h" @@ -31,6 +32,11 @@ override; #endif +#if BUILDFLAG(ENABLE_XZ_EXTRACTOR) + void BindXzFileExtractor( + mojo::PendingReceiver<chrome::mojom::XzFileExtractor> receiver) override; +#endif + mojo::Receiver<chrome::mojom::FileUtilService> receiver_; DISALLOW_COPY_AND_ASSIGN(FileUtilService);
diff --git a/chrome/services/file_util/public/features.gni b/chrome/services/file_util/public/features.gni new file mode 100644 index 0000000..ffe00f1 --- /dev/null +++ b/chrome/services/file_util/public/features.gni
@@ -0,0 +1,12 @@ +# Copyright 2021 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. + +import("//extensions/buildflags/buildflags.gni") + +declare_args() { + # Whether the file_util service supports .xz file extraction. + # Currently only used by imageWriterPrivate extension API, so only enabled + # when Extensions are enabled. + enable_xz_extractor = enable_extensions +}
diff --git a/chrome/services/file_util/public/mojom/BUILD.gn b/chrome/services/file_util/public/mojom/BUILD.gn index 65468cf2..8f11a629 100644 --- a/chrome/services/file_util/public/mojom/BUILD.gn +++ b/chrome/services/file_util/public/mojom/BUILD.gn
@@ -4,15 +4,17 @@ import("//build/config/chromeos/ui_mode.gni") import("//build/config/features.gni") +import("//chrome/services/file_util/public/features.gni") import("//components/safe_browsing/buildflags.gni") import("//mojo/public/tools/bindings/mojom.gni") mojom("mojom") { sources = [ "file_util_service.mojom" ] + enabled_features = [] if (safe_browsing_mode == 1) { sources += [ "safe_archive_analyzer.mojom" ] - enabled_features = [ "full_safe_browsing" ] + enabled_features += [ "full_safe_browsing" ] } public_deps = [ "//mojo/public/mojom/base" ] @@ -22,6 +24,11 @@ public_deps += [ "//components/services/filesystem/public/mojom" ] } + if (enable_xz_extractor) { + sources += [ "xz_file_extractor.mojom" ] + enabled_features += [ "xz_extractor" ] + } + cpp_typemaps = [ { types = [
diff --git a/chrome/services/file_util/public/mojom/file_util_service.mojom b/chrome/services/file_util/public/mojom/file_util_service.mojom index d559220..269d8ed 100644 --- a/chrome/services/file_util/public/mojom/file_util_service.mojom +++ b/chrome/services/file_util/public/mojom/file_util_service.mojom
@@ -10,6 +10,9 @@ [EnableIf=is_chromeos_ash] import "chrome/services/file_util/public/mojom/zip_file_creator.mojom"; +[EnableIf=xz_extractor] +import "chrome/services/file_util/public/mojom/xz_file_extractor.mojom"; + // The main interface to the file utility service. Binds any of various // specific utility receivers. interface FileUtilService { @@ -20,4 +23,8 @@ // Binds an instance of the SafeArchiveAnalyzer interface. [EnableIf=full_safe_browsing] BindSafeArchiveAnalyzer(pending_receiver<SafeArchiveAnalyzer> receiver); + + // Binds an interface of the XzFileExtractor interface. + [EnableIf=xz_extractor] + BindXzFileExtractor(pending_receiver<XzFileExtractor> receiver); };
diff --git a/chrome/services/file_util/public/mojom/xz_file_extractor.mojom b/chrome/services/file_util/public/mojom/xz_file_extractor.mojom new file mode 100644 index 0000000..2dd2cbe --- /dev/null +++ b/chrome/services/file_util/public/mojom/xz_file_extractor.mojom
@@ -0,0 +1,14 @@ +// Copyright 2021 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. + +module chrome.mojom; + +// XzFileExtractor provides extraction of XZ stream. +interface XzFileExtractor { + // Extract XZ stream from the |xz_stream| consumer and writes back extracted + // data to the |extracted_stream| producer. Returns true when extraction is + // successful. + Extract(handle<data_pipe_consumer> xz_stream, + handle<data_pipe_producer> extracted_stream) => (bool success); +};
diff --git a/chrome/services/file_util/xz_file_extractor.cc b/chrome/services/file_util/xz_file_extractor.cc new file mode 100644 index 0000000..f7308917 --- /dev/null +++ b/chrome/services/file_util/xz_file_extractor.cc
@@ -0,0 +1,164 @@ +// Copyright 2021 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/services/file_util/xz_file_extractor.h" + +#include <stddef.h> +#include <stdint.h> +#include <stdlib.h> + +#include <algorithm> +#include <array> +#include <utility> + +#include "base/bind.h" +#include "base/compiler_specific.h" +#include "third_party/lzma_sdk/7zCrc.h" +#include "third_party/lzma_sdk/Xz.h" +#include "third_party/lzma_sdk/XzCrc64.h" + +namespace { + +constexpr int kXzBufferSize = 8192; + +// XzState takes XZ data from a consumer and writes back extracted data to a +// producer. The lifecycle is managed by itself. +class XzState { + public: + XzState(mojo::ScopedDataPipeConsumerHandle consumer, + mojo::ScopedDataPipeProducerHandle producer, + XzFileExtractor::ExtractCallback success_callback) + : consumer_(std::move(consumer)), + producer_(std::move(producer)), + success_callback_(std::move(success_callback)) { + alloc_.Alloc = [](void*, size_t size) { return malloc(size); }; + alloc_.Free = [](void*, void* ptr) { return free(ptr); }; + XzUnpacker_Construct(&state_, &alloc_); + + consumer_watcher_.Watch( + consumer_.get(), + MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, + base::BindRepeating(&XzState::OnReadable, base::Unretained(this))); + producer_watcher_.Watch( + producer_.get(), + MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, + base::BindRepeating(&XzState::OnWritable, base::Unretained(this))); + } + + private: + ~XzState() { XzUnpacker_Free(&state_); } + + void OnReadable(MojoResult result) { ExtractChunk(); } + + void OnWritable(MojoResult result) { ExtractChunk(); } + + void ExtractChunk() { + MojoResult result; + + // Try to fill the buffer if it is not full. + if (buffer_size_ < buffer_.size()) { + uint32_t bytes_read = buffer_.size() - buffer_size_; + result = consumer_->ReadData(buffer_.data() + buffer_size_, &bytes_read, + MOJO_READ_DATA_FLAG_NONE); + if (result == MOJO_RESULT_SHOULD_WAIT) { + return; + } + if (result == MOJO_RESULT_OK) { + buffer_size_ += bytes_read; + } else if (result == MOJO_RESULT_FAILED_PRECONDITION) { + // If it is the end of the input and the buffer is empty, return success + // depending on whether it is also the end of the XZ stream. + if (buffer_size_ == 0) { + RunCallbackAndDeleteThis(is_end_of_stream_); + return; + } + // Otherwise, process the remaining data first before finishing. + } else { + RunCallbackAndDeleteThis(false); + return; + } + } + + uint8_t* data = nullptr; + uint32_t size = 0; + result = producer_->BeginWriteData(reinterpret_cast<void**>(&data), &size, + MOJO_WRITE_DATA_FLAG_NONE); + if (result == MOJO_RESULT_SHOULD_WAIT) { + return; + } + if (result != MOJO_RESULT_OK) { + RunCallbackAndDeleteThis(false); + return; + } + + ECoderStatus status; + size_t in_remaining = buffer_size_; + size_t out_remaining = size; + int xz_result = + XzUnpacker_Code(&state_, data, &out_remaining, buffer_.data(), + &in_remaining, CODER_FINISH_ANY, &status); + if (xz_result != SZ_OK) { + producer_->EndWriteData(0); + RunCallbackAndDeleteThis(false); + return; + } + std::copy(buffer_.begin() + in_remaining, buffer_.begin() + buffer_size_, + buffer_.begin()); + buffer_size_ -= in_remaining; + + result = producer_->EndWriteData(out_remaining); + if (result != MOJO_RESULT_OK) { + RunCallbackAndDeleteThis(false); + return; + } + + is_end_of_stream_ = (status == CODER_STATUS_FINISHED_WITH_MARK || + XzUnpacker_IsStreamWasFinished(&state_)); + } + + void RunCallbackAndDeleteThis(bool success) { + auto success_callback = std::move(success_callback_); + delete this; + std::move(success_callback).Run(success); + } + + mojo::ScopedDataPipeConsumerHandle consumer_; + mojo::ScopedDataPipeProducerHandle producer_; + + mojo::SimpleWatcher consumer_watcher_{ + FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::AUTOMATIC}; + mojo::SimpleWatcher producer_watcher_{ + FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::AUTOMATIC}; + + XzFileExtractor::ExtractCallback success_callback_; + + CXzUnpacker state_; + ISzAlloc alloc_; + + size_t buffer_size_ = 0; + bool is_end_of_stream_ = false; + + std::array<uint8_t, kXzBufferSize> buffer_; +}; + +} // namespace + +XzFileExtractor::XzFileExtractor() { + static const bool initialized = []() { + CrcGenerateTable(); + Crc64GenerateTable(); + return true; + }(); + ANALYZER_ALLOW_UNUSED(initialized); +} + +XzFileExtractor::~XzFileExtractor() = default; + +void XzFileExtractor::Extract( + mojo::ScopedDataPipeConsumerHandle xz_stream, + mojo::ScopedDataPipeProducerHandle extracted_stream, + XzFileExtractor::ExtractCallback callback) { + new XzState(std::move(xz_stream), std::move(extracted_stream), + std::move(callback)); +}
diff --git a/chrome/services/file_util/xz_file_extractor.h b/chrome/services/file_util/xz_file_extractor.h new file mode 100644 index 0000000..b57cdb2b --- /dev/null +++ b/chrome/services/file_util/xz_file_extractor.h
@@ -0,0 +1,23 @@ +// Copyright 2021 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_SERVICES_FILE_UTIL_XZ_FILE_EXTRACTOR_H_ +#define CHROME_SERVICES_FILE_UTIL_XZ_FILE_EXTRACTOR_H_ + +#include "chrome/services/file_util/public/mojom/xz_file_extractor.mojom.h" + +class XzFileExtractor : public chrome::mojom::XzFileExtractor { + public: + XzFileExtractor(); + ~XzFileExtractor() override; + XzFileExtractor(const XzFileExtractor&) = delete; + XzFileExtractor& operator=(const XzFileExtractor&) = delete; + + // chrome::mojom::XzFileExtractor: + void Extract(mojo::ScopedDataPipeConsumerHandle xz_stream, + mojo::ScopedDataPipeProducerHandle extracted_stream, + ExtractCallback callback) override; +}; + +#endif // CHROME_SERVICES_FILE_UTIL_XZ_FILE_EXTRACTOR_H_
diff --git a/chrome/services/file_util/xz_file_extractor_unittest.cc b/chrome/services/file_util/xz_file_extractor_unittest.cc new file mode 100644 index 0000000..6f9ca03 --- /dev/null +++ b/chrome/services/file_util/xz_file_extractor_unittest.cc
@@ -0,0 +1,138 @@ +// Copyright 2021 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/services/file_util/xz_file_extractor.h" + +#include <stdint.h> + +#include <string> +#include <utility> + +#include "base/run_loop.h" +#include "base/test/gmock_callback_support.h" +#include "base/test/mock_callback.h" +#include "base/test/task_environment.h" +#include "mojo/public/c/system/types.h" +#include "mojo/public/cpp/system/data_pipe.h" +#include "mojo/public/cpp/system/data_pipe_utils.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace chrome { + +using ::testing::StrictMock; + +class XzFileExtractorTest : public testing::Test { + protected: + XzFileExtractorTest() = default; + ~XzFileExtractorTest() override = default; + + base::test::TaskEnvironment task_environment_; +}; + +TEST_F(XzFileExtractorTest, Extract) { + // Generated by echo test | xz | xxd --include + const uint8_t kTestData[] = { + 0xfd, 0x37, 0x7a, 0x58, 0x5a, 0x00, 0x00, 0x04, 0xe6, 0xd6, 0xb4, + 0x46, 0x02, 0x00, 0x21, 0x01, 0x16, 0x00, 0x00, 0x00, 0x74, 0x2f, + 0xe5, 0xa3, 0x01, 0x00, 0x04, 0x74, 0x65, 0x73, 0x74, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x9d, 0xed, 0x31, 0x1d, 0x0f, 0x9f, 0xd7, 0xe6, + 0x00, 0x01, 0x1d, 0x05, 0xb8, 0x2d, 0x80, 0xaf, 0x1f, 0xb6, 0xf3, + 0x7d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x59, 0x5a}; + + mojo::ScopedDataPipeProducerHandle xz_producer; + mojo::ScopedDataPipeConsumerHandle xz_consumer; + ASSERT_EQ(MOJO_RESULT_OK, + mojo::CreateDataPipe(nullptr, xz_producer, xz_consumer)); + + mojo::ScopedDataPipeProducerHandle extracted_producer; + mojo::ScopedDataPipeConsumerHandle extracted_consumer; + ASSERT_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(nullptr, extracted_producer, + extracted_consumer)); + + ASSERT_TRUE(mojo::BlockingCopyFromString( + std::string(kTestData, kTestData + sizeof(kTestData)), xz_producer)); + xz_producer.reset(); + + StrictMock<base::MockCallback<XzFileExtractor::ExtractCallback>> callback; + base::RunLoop run_loop; + EXPECT_CALL(callback, Run(true)) + .WillOnce(base::test::RunClosure(run_loop.QuitClosure())); + XzFileExtractor extractor; + extractor.Extract(std::move(xz_consumer), std::move(extracted_producer), + callback.Get()); + run_loop.Run(); + + std::string result; + ASSERT_TRUE( + mojo::BlockingCopyToString(std::move(extracted_consumer), &result)); + EXPECT_EQ("test\n", result); +} + +TEST_F(XzFileExtractorTest, ExtractInvalidData) { + // Generated by cat /dev/urandom | xxd -l 64 --include + const uint8_t kTestData[] = { + 0xb9, 0x57, 0xb8, 0xf7, 0x89, 0x06, 0xe5, 0xbc, 0x79, 0x5b, 0x29, + 0xb9, 0x20, 0x63, 0xba, 0xbd, 0x8b, 0x75, 0x6c, 0x61, 0xb7, 0xed, + 0xe8, 0x17, 0x65, 0x06, 0x8d, 0x6f, 0x25, 0x4b, 0x44, 0x7f, 0x07, + 0xe1, 0x19, 0x5a, 0x1d, 0xb5, 0x8a, 0xf2, 0x82, 0xad, 0xb3, 0xa4, + 0x0c, 0x65, 0xbd, 0x8f, 0x69, 0x4c, 0xa6, 0xc3, 0xb9, 0x4c, 0xcd, + 0x87, 0x5e, 0x3a, 0x2a, 0x36, 0x6d, 0xc9, 0xd1, 0x07}; + + mojo::ScopedDataPipeProducerHandle xz_producer; + mojo::ScopedDataPipeConsumerHandle xz_consumer; + ASSERT_EQ(MOJO_RESULT_OK, + mojo::CreateDataPipe(nullptr, xz_producer, xz_consumer)); + + mojo::ScopedDataPipeProducerHandle extracted_producer; + mojo::ScopedDataPipeConsumerHandle extracted_consumer; + ASSERT_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(nullptr, extracted_producer, + extracted_consumer)); + + ASSERT_TRUE(mojo::BlockingCopyFromString( + std::string(kTestData, kTestData + sizeof(kTestData)), xz_producer)); + xz_producer.reset(); + + StrictMock<base::MockCallback<XzFileExtractor::ExtractCallback>> callback; + base::RunLoop run_loop; + EXPECT_CALL(callback, Run(false)) + .WillOnce(base::test::RunClosure(run_loop.QuitClosure())); + XzFileExtractor extractor; + extractor.Extract(std::move(xz_consumer), std::move(extracted_producer), + callback.Get()); + run_loop.Run(); + + std::string result; + ASSERT_TRUE( + mojo::BlockingCopyToString(std::move(extracted_consumer), &result)); + EXPECT_TRUE(result.empty()); +} + +TEST_F(XzFileExtractorTest, ExtractEmptyData) { + mojo::ScopedDataPipeProducerHandle xz_producer; + mojo::ScopedDataPipeConsumerHandle xz_consumer; + ASSERT_EQ(MOJO_RESULT_OK, + mojo::CreateDataPipe(nullptr, xz_producer, xz_consumer)); + + mojo::ScopedDataPipeProducerHandle extracted_producer; + mojo::ScopedDataPipeConsumerHandle extracted_consumer; + ASSERT_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(nullptr, extracted_producer, + extracted_consumer)); + xz_producer.reset(); + + StrictMock<base::MockCallback<XzFileExtractor::ExtractCallback>> callback; + base::RunLoop run_loop; + EXPECT_CALL(callback, Run(false)) + .WillOnce(base::test::RunClosure(run_loop.QuitClosure())); + XzFileExtractor extractor; + extractor.Extract(std::move(xz_consumer), std::move(extracted_producer), + callback.Get()); + run_loop.Run(); + + std::string result; + ASSERT_TRUE( + mojo::BlockingCopyToString(std::move(extracted_consumer), &result)); + EXPECT_TRUE(result.empty()); +} + +} // namespace chrome
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 3acc14a..f5dc52c 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -2015,6 +2015,7 @@ "../browser/extensions/api/identity/identity_private_apitest.cc", "../browser/extensions/api/idle/idle_get_auto_lock_delay_apitest.cc", "../browser/extensions/api/idltest/idltest_apitest.cc", + "../browser/extensions/api/image_writer_private/extractor_browsertest.cc", "../browser/extensions/api/image_writer_private/image_writer_private_apitest.cc", "../browser/extensions/api/image_writer_private/test_utils.cc", "../browser/extensions/api/image_writer_private/test_utils.h", @@ -2519,6 +2520,7 @@ "../browser/ash/display/display_prefs_browsertest.cc", "../browser/ash/display/quirks_browsertest.cc", "../browser/ash/drive/drive_integration_service_browsertest.cc", + "../browser/ash/kerberos/kerberos_credentials_manager_factory_browsertest.cc", "../browser/ash/lock_screen_apps/note_taking_browsertest.cc", "../browser/ash/login/accessibility_browsertest.cc", "../browser/ash/login/active_directory_login_browsertest.cc", @@ -2737,7 +2739,6 @@ "../browser/chromeos/input_method/textinput_surroundingtext_browsertest.cc", "../browser/chromeos/input_method/textinput_test_helper.cc", "../browser/chromeos/input_method/textinput_test_helper.h", - "../browser/chromeos/kerberos/kerberos_credentials_manager_factory_browsertest.cc", "../browser/chromeos/logging_browsertest.cc", "../browser/chromeos/net/device_event_log_error_browsertest.cc", "../browser/chromeos/net/network_portal_detector_impl_browsertest.cc", @@ -4253,6 +4254,7 @@ "//chrome/common:test_support", "//chrome/common/privacy_budget:unit_tests", "//chrome/common/profiler:unit_tests", + "//chrome/services/file_util:unit_tests", "//components/account_id", "//components/autofill/content/renderer:test_support", "//components/browsing_data/content:test_support", @@ -4396,6 +4398,7 @@ "../browser/offline_pages/background_loader_offliner_unittest.cc", "../browser/offline_pages/download_archive_manager_unittest.cc", "../browser/offline_pages/offline_page_mhtml_archiver_unittest.cc", + "../browser/offline_pages/offline_page_navigation_throttle_unittest.cc", "../browser/offline_pages/offline_page_request_handler_unittest.cc", "../browser/offline_pages/offline_page_tab_helper_unittest.cc", "../browser/offline_pages/offline_page_utils_unittest.cc", @@ -5050,6 +5053,7 @@ "../browser/ui/window_sizer/window_sizer_unittest.cc", ] sources += [ + "../browser/apps/app_service/app_platform_metrics_service_unittest.cc", "../browser/apps/app_service/intent_util_unittest.cc", "../browser/component_updater/cros_component_installer_chromeos_unittest.cc", "../browser/component_updater/metadata_table_chromeos_unittest.cc", @@ -5866,6 +5870,7 @@ "../browser/enterprise/connectors/file_system/box_api_call_flow_unittest.cc", "../browser/enterprise/connectors/file_system/box_api_call_test_helper.cc", "../browser/enterprise/connectors/file_system/box_api_call_test_helper.h", + "../browser/enterprise/connectors/file_system/box_upload_file_chunks_handler_unittest.cc", "../browser/enterprise/connectors/file_system/box_uploader_test_helper.cc", "../browser/enterprise/connectors/file_system/box_uploader_test_helper.h", "../browser/enterprise/connectors/file_system/box_uploader_unittest.cc",
diff --git a/chrome/test/data/image_writer_private/test.tar.xz b/chrome/test/data/image_writer_private/test.tar.xz new file mode 100644 index 0000000..df8552d --- /dev/null +++ b/chrome/test/data/image_writer_private/test.tar.xz Binary files differ
diff --git a/chrome/test/data/webui/download_shelf/download_list_test.js b/chrome/test/data/webui/download_shelf/download_list_test.js index d5134485..c75fedd7 100644 --- a/chrome/test/data/webui/download_shelf/download_list_test.js +++ b/chrome/test/data/webui/download_shelf/download_list_test.js
@@ -85,7 +85,7 @@ }); test('onResize', async () => { - const listElement = downloadListElement.$('#downloadList'); + const listElement = downloadListElement.$('#download-list'); listElement.style.width = '847px'; await waitAfterNextRender(listElement); for (let i = 0; i < 10; ++i) {
diff --git a/chromecast/browser/BUILD.gn b/chromecast/browser/BUILD.gn index bb16120..40b68352 100644 --- a/chromecast/browser/BUILD.gn +++ b/chromecast/browser/BUILD.gn
@@ -229,6 +229,7 @@ "//components/metrics:content", "//components/metrics:net", "//components/on_load_script_injector/browser", + "//components/profile_metrics", "//components/variations/net", # TODO(gfhuang): Eliminate this dependency if ScreenInfoMetricsProvider
diff --git a/chromecast/browser/DEPS b/chromecast/browser/DEPS index d8e5365..f62f99e 100644 --- a/chromecast/browser/DEPS +++ b/chromecast/browser/DEPS
@@ -27,6 +27,7 @@ "+components/policy/core/browser", "+components/prefs", "+components/pref_registry", + "+components/profile_metrics", "+components/proxy_config", "+components/safe_search_api", "+components/services/heap_profiling/heap_profiling_service.h",
diff --git a/chromecast/browser/cast_browser_context.cc b/chromecast/browser/cast_browser_context.cc index ae2a026..205a340 100644 --- a/chromecast/browser/cast_browser_context.cc +++ b/chromecast/browser/cast_browser_context.cc
@@ -16,6 +16,7 @@ #include "chromecast/browser/cast_download_manager_delegate.h" #include "chromecast/browser/cast_permission_manager.h" #include "components/keyed_service/core/simple_key_map.h" +#include "components/profile_metrics/browser_profile_type.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/resource_context.h" @@ -41,6 +42,8 @@ CastBrowserContext::CastBrowserContext() : resource_context_(new CastResourceContext) { + profile_metrics::SetBrowserProfileType( + this, profile_metrics::BrowserProfileType::kRegular); InitWhileIOAllowed(); simple_factory_key_ = std::make_unique<SimpleFactoryKey>(GetPath(), IsOffTheRecord());
diff --git a/chromecast/browser/webview/BUILD.gn b/chromecast/browser/webview/BUILD.gn index 1a31e00..417dc2d 100644 --- a/chromecast/browser/webview/BUILD.gn +++ b/chromecast/browser/webview/BUILD.gn
@@ -16,6 +16,7 @@ "//chromecast/browser", "//chromecast/browser:public", "//chromecast/browser:test_support", + "//components/profile_metrics", "//content/public/common", ] }
diff --git a/chromecast/browser/webview/DEPS b/chromecast/browser/webview/DEPS index 8f9cbdc9..af1608c7 100644 --- a/chromecast/browser/webview/DEPS +++ b/chromecast/browser/webview/DEPS
@@ -1,5 +1,6 @@ include_rules = [ "+components/exo", + "+components/profile_metrics", "+content/public/browser", "+third_party/grpc", ]
diff --git a/chromecast/browser/webview/webview_browser_context.cc b/chromecast/browser/webview/webview_browser_context.cc index bb44ef4..616e1774 100644 --- a/chromecast/browser/webview/webview_browser_context.cc +++ b/chromecast/browser/webview/webview_browser_context.cc
@@ -5,6 +5,7 @@ #include "chromecast/browser/webview/webview_browser_context.h" #include "base/files/file_path.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "components/profile_metrics/browser_profile_type.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/resource_context.h" @@ -23,7 +24,10 @@ WebviewBrowserContext::WebviewBrowserContext( content::BrowserContext* main_browser_context) : main_browser_context_(main_browser_context), - resource_context_(std::make_unique<ResourceContext>()) {} + resource_context_(std::make_unique<ResourceContext>()) { + profile_metrics::SetBrowserProfileType( + this, profile_metrics::BrowserProfileType::kIncognito); +} WebviewBrowserContext::~WebviewBrowserContext() { BrowserContext::NotifyWillBeDestroyed(this);
diff --git a/chromeos/components/camera_app_ui/resources/css/css.gni b/chromeos/components/camera_app_ui/resources/css/css.gni index 52bb943..ef1a260 100644 --- a/chromeos/components/camera_app_ui/resources/css/css.gni +++ b/chromeos/components/camera_app_ui/resources/css/css.gni
@@ -3,6 +3,7 @@ # found in the LICENSE file. css_files = [ + "inkdrop.css", "main.css", "ptz_panel.css", "ptz_toast.css",
diff --git a/chromeos/components/camera_app_ui/resources/css/inkdrop.css b/chromeos/components/camera_app_ui/resources/css/inkdrop.css new file mode 100644 index 0000000..5f9098e --- /dev/null +++ b/chromeos/components/camera_app_ui/resources/css/inkdrop.css
@@ -0,0 +1,35 @@ +/* Copyright 2021 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. */ + +.inkdrop { + overflow: hidden; +} + +.inkdrop .inkdrop-ripple { + background: white; + border-radius: 50%; + height: 0; + left: var(--drop-x); + position: absolute; + top: var(--drop-y); + transform: translate(-50%, -50%); + width: 0; +} + +.inkdrop.animate .inkdrop-ripple { + animation: inkdrop var(--moderate1-duration) ease-out; +} + +@keyframes inkdrop { + 0% { + height: 0; + opacity: 0.6; + width: 0; + } + 100% { + height: calc(var(--drop-radius) * 2); + opacity: 0; + width: calc(var(--drop-radius) * 2); + } +}
diff --git a/chromeos/components/camera_app_ui/resources/css/main.css b/chromeos/components/camera_app_ui/resources/css/main.css index 0f840d9..197c23d 100644 --- a/chromeos/components/camera_app_ui/resources/css/main.css +++ b/chromeos/components/camera_app_ui/resources/css/main.css
@@ -1314,43 +1314,6 @@ background-color: var(--hover-color); } -/* Inkdrop effect. */ -button.menu-item, -label.menu-item { - overflow: hidden; -} - -button.menu-item::before, -label.menu-item::before { - background: white; - border-radius: 50%; - content: ''; - height: 0; - left: var(--drop-x); - position: absolute; - top: var(--drop-y); - transform: translate(-50%, -50%); - width: 0; -} - -button.menu-item.animate::before, -label.menu-item.animate::before { - animation: inkdrop var(--moderate1-duration) ease-out; -} - -@keyframes inkdrop { - 0% { - height: 0; - opacity: 0.6; - width: 0; - } - 100% { - height: calc(var(--drop-radius) * 2); - opacity: 0; - width: calc(var(--drop-radius) * 2); - } -} - .menu-item { padding-inline-start: 32px; }
diff --git a/chromeos/components/camera_app_ui/resources/js/animation.js b/chromeos/components/camera_app_ui/resources/js/animation.js index cc62cef..4f37519 100644 --- a/chromeos/components/camera_app_ui/resources/js/animation.js +++ b/chromeos/components/camera_app_ui/resources/js/animation.js
@@ -28,12 +28,25 @@ * TODO(b/176879728): Remove @suppress once we fix the getAnimations() extern * in upstream Closure compiler. * @suppress {checkTypes} - * @param {!HTMLElement} el + * @param {{el: !HTMLElement, onChild: boolean}} param * @return {!Array<!Animation>} */ -function getAnimations(el) { +function getAnimations({el, onChild}) { return el.getAnimations({subtree: true}) - .filter((a) => assertInstanceof(a.effect, KeyframeEffect).target === el); + .filter( + (a) => onChild || + assertInstanceof(a.effect, KeyframeEffect).target === el); +} + +/** + * @param {{el: !HTMLElement, onChild: boolean}} param |el| is the + * target element to cancel animation. |onChild| specifies whether the + * cancelled animation is applied to all subtree children, false by default. + * @return {!Promise} Promise resolved when the animation is cancelled. + */ +async function doCancel({el, onChild}) { + getAnimations({el, onChild}).forEach((a) => a.cancel()); + await getQueueFor(el).flush(); } /** @@ -42,18 +55,28 @@ * @return {!Promise} Promise resolved when the animation is cancelled. */ export async function cancel(el) { - getAnimations(el).forEach((a) => a.cancel()); - await getQueueFor(el).flush(); + return doCancel({el, onChild: false}); } /** - * Animates the element once by applying the "animate" class. If the animation - * is already running, the previous one would be cancelled first. + * Cancels all running animation on children of the element, if any. * @param {!HTMLElement} el + * @return {!Promise} Promise resolved when all animation is cancelled. + */ +export async function cancelOnChild(el) { + return doCancel({el, onChild: true}); +} + +/** + * Animates the target element once by applying the "animate" class. If the + * animation is already running, the previous one would be cancelled first. + * @param {{el: !HTMLElement, onChild: boolean}} param |el| is the + * target element to apply "animate" class. |onChild| specifies whether the + * animation is applied to all subtree children. * @return {!Promise} Promise resolved when the animation is settled. */ -export function play(el) { - cancel(el); +function doPlay({el, onChild}) { + doCancel({el, onChild}); const queue = getQueueFor(el); const job = async () => { /** @@ -62,8 +85,28 @@ */ el.offsetWidth; el.classList.add('animate'); - await Promise.allSettled(getAnimations(el).map((a) => a.finished)); + await Promise.allSettled( + getAnimations({el, onChild}).map((a) => a.finished)); el.classList.remove('animate'); }; return queue.push(job); } + +/** + * Sets "animate" class on the element and waits for its animation settled. + * @param {!HTMLElement} el + * @return {!Promise} Promise resolved when the animation is settled. + */ +export function play(el) { + return doPlay({el, onChild: false}); +} + +/** + * Sets "animate" class on the element and waits for its child's animation + * settled. + * @param {!HTMLElement} el + * @return {!Promise} Promise resolved when the child's animation is settled. + */ +export function playOnChild(el) { + return doPlay({el, onChild: true}); +}
diff --git a/chromeos/components/camera_app_ui/resources/js/main.js b/chromeos/components/camera_app_ui/resources/js/main.js index 2a2a655..67495440 100644 --- a/chromeos/components/camera_app_ui/resources/js/main.js +++ b/chromeos/components/camera_app_ui/resources/js/main.js
@@ -131,7 +131,7 @@ document.title = loadTimeData.getI18nMessage('name'); util.setupI18nElements(document.body); this.setupToggles_(); - this.setupSettingEffect_(); + this.setupEffect_(); const resolutionSettings = new ResolutionSettings( this.infoUpdater_, this.photoPreferrer_, this.videoPreferrer_); @@ -203,12 +203,33 @@ } /** - * Sets up inkdrop effect for settings view. + * Sets up visual effect for all applicable elements. * @private */ - setupSettingEffect_() { - dom.getAll('button.menu-item, label.menu-item', HTMLElement) + setupEffect_() { + dom.getAll('.inkdrop', HTMLElement) .forEach((el) => util.setInkdropEffect(el)); + + const observer = new MutationObserver((mutationList) => { + mutationList.forEach((mutation) => { + assert(mutation.type === 'childList'); + // Only the newly added nodes with inkdrop class are considered here. So + // simply adding class attribute on existing element will not work. + for (const node of mutation.addedNodes) { + if (!(node instanceof HTMLElement)) { + continue; + } + const el = assertInstanceof(node, HTMLElement); + if (el.classList.contains('inkdrop')) { + util.setInkdropEffect(el); + } + } + }); + }); + observer.observe(document.body, { + subtree: true, + childList: true, + }); } /**
diff --git a/chromeos/components/camera_app_ui/resources/js/util.js b/chromeos/components/camera_app_ui/resources/js/util.js index f287278..e8cc3e8 100644 --- a/chromeos/components/camera_app_ui/resources/js/util.js +++ b/chromeos/components/camera_app_ui/resources/js/util.js
@@ -158,6 +158,8 @@ * @param {!HTMLElement} el */ export function setInkdropEffect(el) { + const tpl = instantiateTemplate('#inkdrop-template'); + el.appendChild(tpl); el.addEventListener('click', (e) => { const tRect = assertInstanceof(e.target, HTMLElement).getBoundingClientRect(); @@ -170,7 +172,7 @@ el.style.setProperty('--drop-x', `${dropX}px`); el.style.setProperty('--drop-y', `${dropY}px`); el.style.setProperty('--drop-radius', `${radius}px`); - animate.play(el); + animate.playOnChild(el); }); }
diff --git a/chromeos/components/camera_app_ui/resources/js/views/settings.js b/chromeos/components/camera_app_ui/resources/js/views/settings.js index c3e367c..800148c3 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/settings.js +++ b/chromeos/components/camera_app_ui/resources/js/views/settings.js
@@ -641,8 +641,6 @@ resolutions.forEach((r) => { const item = util.instantiateTemplate('#resolution-item-template'); - const label = dom.getFrom(item, 'label', HTMLLabelElement); - util.setInkdropEffect(label); const input = dom.getFrom(item, 'input', HTMLInputElement); dom.getFrom(item, 'span', HTMLSpanElement).textContent = optTextTempl(r, resolutions);
diff --git a/chromeos/components/camera_app_ui/resources/views/main.html b/chromeos/components/camera_app_ui/resources/views/main.html index fae831d..4dc821d 100644 --- a/chromeos/components/camera_app_ui/resources/views/main.html +++ b/chromeos/components/camera_app_ui/resources/views/main.html
@@ -8,7 +8,9 @@ name by JavaScript --> <title></title> <meta charset="utf-8"> + <!-- main.css contains all :root styles require to be loaded first. --> <link rel="stylesheet" href="/css/main.css"> + <link rel="stylesheet" href="/css/inkdrop.css"> <link rel="stylesheet" href="/css/ptz_panel.css"> <link rel="stylesheet" href="/css/ripple.css"> <link rel="stylesheet" href="/css/ptz_toast.css"> @@ -272,7 +274,7 @@ <button class="icon" tabindex="0" i18n-aria="back_button"></button> <div i18n-text="settings_button"></div> </div> - <button id="settings-gridtype" class="menu-item" tabindex="0" + <button id="settings-gridtype" class="menu-item inkdrop" tabindex="0" aria-describedby="gridtype-desc"> <div class="icon"></div> <div> @@ -285,7 +287,7 @@ </div> <div class="icon end"></div> </button> - <button id="settings-timerdur" class="menu-item" tabindex="0" + <button id="settings-timerdur" class="menu-item inkdrop" tabindex="0" aria-describedby="timerdur-desc"> <div class="icon"></div> <div> @@ -297,23 +299,23 @@ </div> <div class="icon end"></div> </button> - <button id="settings-resolution" class="menu-item" tabindex="0"> + <button id="settings-resolution" class="menu-item inkdrop" tabindex="0"> <div class="icon"></div> <div i18n-text="camera_resolution_button"> </div> <div class="icon end"></div> </button> - <button id="settings-expert" class="menu-item" tabindex="0"> + <button id="settings-expert" class="menu-item inkdrop" tabindex="0"> <div class="icon"></div> <div i18n-text="expert_mode_button"> </div> <div class="icon end"></div> </button> - <button id="settings-feedback" class="menu-item" tabindex="0"> + <button id="settings-feedback" class="menu-item inkdrop" tabindex="0"> <div class="icon"></div> <div i18n-text="feedback_button"></div> </button> - <button id="settings-help" class="menu-item" tabindex="0"> + <button id="settings-help" class="menu-item inkdrop" tabindex="0"> <div class="icon"></div> <div i18n-text="help_button"></div> </button> @@ -325,18 +327,18 @@ <button class="icon" tabindex="0" i18n-aria="back_button"></button> <div i18n-text="grid_type_button"></div> </div> - <label class="menu-item circle"> + <label class="menu-item circle inkdrop"> <input id="grid-3x3" class="icon" type="radio" tabindex="0" name="gridtype" data-state="grid-3x3" data-key="toggle3x3" checked> <span i18n-text="label_grid_3x3" i18n-aria="aria_grid_3x3"></span> </label> - <label class="menu-item circle"> + <label class="menu-item circle inkdrop"> <input id="grid-4x4" class="icon" type="radio" tabindex="0" name="gridtype" data-state="grid-4x4" data-key="toggle4x4"> <span i18n-text="label_grid_4x4" i18n-aria="aria_grid_4x4"></span> </label> - <label class="menu-item circle"> + <label class="menu-item circle inkdrop"> <input id="grid-golden" class="icon" type="radio" tabindex="0" name="gridtype" data-state="grid-golden" data-key="toggleGolden"> @@ -350,13 +352,13 @@ <button class="icon" tabindex="0" i18n-aria="back_button"></button> <div i18n-text="timer_duration_button"></div> </div> - <label class="menu-item circle"> + <label class="menu-item circle inkdrop"> <input id="timer-3s" class="icon" type="radio" tabindex="0" name="timerdur" data-state="timer-3s" data-key="toggle3sec" checked> <span i18n-text="label_timer_3s"></span> </label> - <label class="menu-item circle"> + <label class="menu-item circle inkdrop"> <input id="timer-10s" class="icon" type="radio" tabindex="0" name="timerdur" data-state="timer-10s" data-key="toggle10sec"> <span i18n-text="label_timer_10s"></span> @@ -372,7 +374,7 @@ <div id="builtin-photo-header" class="menu-item" i18n-text="label_switch_take_photo_button"></div> <button id="settings-front-photores" - class="menu-item resol-item photo-item" tabindex="0" + class="menu-item resol-item photo-item inkdrop" tabindex="0" aria-describedby="front-photores-desc"> <div> <div i18n-text="label_front_camera"></div> @@ -384,7 +386,7 @@ <div class="icon end"></div> </button> <button id="settings-back-photores" - class="menu-item resol-item photo-item" tabindex="0" + class="menu-item resol-item photo-item inkdrop" tabindex="0" aria-describedby="back-photores-desc"> <div> <div i18n-text="label_back_camera"></div> @@ -397,7 +399,7 @@ <div id="builtin-video-header" class="menu-item" i18n-text="label_switch_record_video_button"></div> <button id="settings-front-videores" - class="menu-item resol-item video-item" tabindex="0" + class="menu-item resol-item video-item inkdrop" tabindex="0" aria-describedby="front-videores-desc"> <div> <div i18n-text="label_front_camera"></div> @@ -409,7 +411,7 @@ <div class="icon end"></div> </button> <button id="settings-back-videores" - class="menu-item resol-item video-item" tabindex="0" + class="menu-item resol-item video-item inkdrop" tabindex="0" aria-describedby="back-videores-desc"> <div> <div i18n-text="label_back_camera"></div> @@ -443,25 +445,25 @@ <button class="icon" tabindex="0" i18n-aria="back_button"></button> <div i18n-text="expert_mode_button"></div> </div> - <label class="menu-item"> + <label class="menu-item inkdrop"> <input id="expert-show-metadata" class="icon" type="checkbox" tabindex="0" data-state="show-metadata" data-key="showMetadata"> <span i18n-text="expert_preview_metadata"></span> </label> - <label class="menu-item"> + <label class="menu-item inkdrop"> <input id="expert-save-metadata" class="icon" type="checkbox" tabindex="0" data-state="save-metadata" data-key="saveMetadata"> <span i18n-text="expert_save_metadata"></span> </label> - <label class="menu-item"> + <label class="menu-item inkdrop"> <input id="expert-print-performance-logs" class="icon" type="checkbox" tabindex="0" data-state="print-performance-logs" data-key="printPerformanceLogs"> <span i18n-text="expert_print_performance_logs"></span> </label> - <label class="menu-item"> + <label class="menu-item inkdrop"> <input class="icon" id="custom-video-parameters" type="checkbox" tabindex="0" data-state="custom-video-parameters" @@ -500,7 +502,7 @@ muted></video> </template> <template id="resolution-item-template"> - <label class="menu-item circle resolution-option"> + <label class="menu-item circle resolution-option inkdrop"> <input class="icon" type="radio" tabindex="0"> <span></span> </label> @@ -508,7 +510,7 @@ <template id="extcam-resolution-item-template"> <div class="menu-item external-camera title-item" i18n-text="label_external_camera"></div> - <button class="menu-item external-camera resol-item photo-item" + <button class="menu-item external-camera resol-item photo-item inkdrop" tabindex="0"> <div> <div i18n-text="photo_resolution_button"></div> @@ -518,7 +520,7 @@ </div> <div class="icon end"></div> </button> - <button class="menu-item external-camera resol-item video-item" + <button class="menu-item external-camera resol-item video-item inkdrop" tabindex="0"> <div> <div i18n-text="video_resolution_button"></div> @@ -532,5 +534,8 @@ <template id="video-profile-option-template"> <option></option> </template> + <template id="inkdrop-template"> + <div class="inkdrop-ripple"></div> + </template> </body> </html>
diff --git a/chromeos/components/media_app_ui/resources/js/launch.js b/chromeos/components/media_app_ui/resources/js/launch.js index 1e439c5..fd92b72 100644 --- a/chromeos/components/media_app_ui/resources/js/launch.js +++ b/chromeos/components/media_app_ui/resources/js/launch.js
@@ -4,7 +4,7 @@ import * as error_reporter from './error_reporter.js'; import {assertCast, MessagePipe} from './message_pipe.m.js'; -import {DeleteFileMessage, DeleteResult, FileContext, LoadFilesMessage, Message, NavigateMessage, OverwriteFileMessage, OverwriteViaFilePickerResponse, RenameFileMessage, RenameResult, RequestSaveFileMessage, RequestSaveFileResponse, SaveAsMessage, SaveAsResponse} from './message_types.m.js'; +import {DeleteFileMessage, FileContext, LoadFilesMessage, Message, NavigateMessage, OverwriteFileMessage, OverwriteViaFilePickerResponse, RenameFileMessage, RenameResult, RequestSaveFileMessage, RequestSaveFileResponse, SaveAsMessage, SaveAsResponse} from './message_types.m.js'; import {mediaAppPageHandler} from './mojo_api_bootstrap.js'; /** @@ -157,7 +157,11 @@ assertFileAndDirectoryMutable(deleteMsg.token, 'Delete'); if (!(await isHandleInCurrentDirectory(handle))) { - return {deleteResult: DeleteResult.FILE_MOVED}; + // removeEntry() silently "succeeds" in this case, but that gives poor UX. + console.warn(`"${handle.name}" not found in the last opened folder.`); + const error = new Error('Ignoring delete request: file not found'); + error.name = 'NotFoundError'; + throw error; } await directory.removeEntry(handle.name); @@ -169,8 +173,6 @@ // `currentFiles[entryIndex]`, where `entryIndex` was previously the index of // the deleted file. await advance(0); - - return {deleteResult: DeleteResult.SUCCESS}; }); /** Handler to rename the currently focused file. */
diff --git a/chromeos/components/media_app_ui/resources/js/media_app.externs.js b/chromeos/components/media_app_ui/resources/js/media_app.externs.js index d0c0747..fc438d6e 100644 --- a/chromeos/components/media_app_ui/resources/js/media_app.externs.js +++ b/chromeos/components/media_app_ui/resources/js/media_app.externs.js
@@ -68,10 +68,9 @@ mediaApp.AbstractFile.prototype.overwriteOriginal; /** * A function that will delete the original file. Returns a promise that - * resolves to an enum value (see DeleteResult in chromium message_types) - * reflecting the result of the deletion. Errors encountered are thrown from the - * message pipe and handled by invoking functions in Google3. - * @type {function(): !Promise<number>|undefined} + * resolves on success. Errors encountered are thrown from the message pipe and + * handled by invoking functions in Google3. + * @type {function(): !Promise<undefined>|undefined} */ mediaApp.AbstractFile.prototype.deleteOriginalFile; /**
diff --git a/chromeos/components/media_app_ui/resources/js/message_types.js b/chromeos/components/media_app_ui/resources/js/message_types.js index 212cbb9..e55cf85 100644 --- a/chromeos/components/media_app_ui/resources/js/message_types.js +++ b/chromeos/components/media_app_ui/resources/js/message_types.js
@@ -26,15 +26,6 @@ }; /** - * Enum for results of deleting a file. - * @enum {number} - */ -/* #export */ const DeleteResult = { - SUCCESS: 0, - FILE_MOVED: 1, -}; - -/** * Message sent by the unprivileged context to request the privileged context to * delete the currently writable file. * If the supplied file `token` is invalid the request is rejected. @@ -43,13 +34,6 @@ /* #export */ let DeleteFileMessage; /** - * Response message sent by the privileged context indicating if a requested - * delete was successful. - * @typedef {{deleteResult: DeleteResult!}} - */ -/* #export */ let DeleteFileResponse; - -/** * Representation of a file passed in on the LoadFilesMessage. * @typedef {{ * token: number,
diff --git a/chromeos/components/media_app_ui/resources/js/receiver.js b/chromeos/components/media_app_ui/resources/js/receiver.js index 78354b2..b312232c 100644 --- a/chromeos/components/media_app_ui/resources/js/receiver.js +++ b/chromeos/components/media_app_ui/resources/js/receiver.js
@@ -5,7 +5,7 @@ import './sandboxed_load_time_data.js'; import {assertCast, MessagePipe} from './message_pipe.m.js'; -import {DeleteFileResponse, DeleteResult, FileContext, LoadFilesMessage, Message, OverwriteFileMessage, OverwriteViaFilePickerResponse, RenameFileResponse, RenameResult, RequestSaveFileMessage, RequestSaveFileResponse, SaveAsMessage, SaveAsResponse} from './message_types.m.js'; +import {FileContext, LoadFilesMessage, Message, OverwriteFileMessage, OverwriteViaFilePickerResponse, RenameFileResponse, RenameResult, RequestSaveFileMessage, RequestSaveFileResponse, SaveAsMessage, SaveAsResponse} from './message_types.m.js'; import {loadPiex} from './piex_module_loader.js'; /** A pipe through which we can send messages to the parent frame. */ @@ -69,10 +69,10 @@ * @return {!Promise<number>} */ async deleteOriginalFileImpl() { - const deleteResponse = - /** @type {!DeleteFileResponse} */ (await parentMessagePipe.sendMessage( - Message.DELETE_FILE, {token: this.token})); - return deleteResponse.deleteResult; + await parentMessagePipe.sendMessage( + Message.DELETE_FILE, {token: this.token}); + // TODO(b/156571159): Remove when app_main.js no longer needs this. + return 0; /* "SUCCESS" */ } /** @@ -333,7 +333,6 @@ window['showDirectoryPicker'] = null; export const TEST_ONLY = { - DeleteResult, RenameResult, DELEGATE, assertCast,
diff --git a/chromeos/components/media_app_ui/test/guest_query_receiver.js b/chromeos/components/media_app_ui/test/guest_query_receiver.js index d8cb79b..28223cc1 100644 --- a/chromeos/components/media_app_ui/test/guest_query_receiver.js +++ b/chromeos/components/media_app_ui/test/guest_query_receiver.js
@@ -6,7 +6,6 @@ // it, and already loaded. import {TEST_ONLY} from './receiver.js'; const { - DeleteResult, RenameResult, DELEGATE, assertCast, @@ -82,13 +81,8 @@ } else if (data.deleteLastFile) { // Simulate a user deleting the currently open file. try { - const deleteResult = await assertCast(currentFile().deleteOriginalFile) - .call(currentFile()); - if (deleteResult === DeleteResult.FILE_MOVED) { - result = 'deleteOriginalFile resolved file moved'; - } else { - result = 'deleteOriginalFile resolved success'; - } + await assertCast(currentFile().deleteOriginalFile).call(currentFile()); + result = 'deleteOriginalFile resolved success'; } catch (/** @type{!Error} */ error) { result = `deleteOriginalFile failed Error: ${error}`; }
diff --git a/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js b/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js index d55391c..5d81543 100644 --- a/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js +++ b/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js
@@ -672,7 +672,9 @@ testResponse = await sendTestMessage(messageDeleteMoved); assertEquals( - 'deleteOriginalFile resolved file moved', testResponse.testQueryResult); + 'deleteOriginalFile failed Error: NotFoundError: delete-file: ' + + 'Ignoring delete request: file not found', + testResponse.testQueryResult); // New file not removed from `DirectoryHandle` internal state. assertEquals(1, directory.files.length); @@ -765,7 +767,9 @@ const testResponse = await sendTestMessage(messageDelete); assertEquals( - 'deleteOriginalFile resolved file moved', testResponse.testQueryResult); + 'deleteOriginalFile failed Error: NotFoundError: delete-file: ' + + 'Ignoring delete request: file not found', + testResponse.testQueryResult); }; // Tests that the app gracefully handles a rename request on a file that's
diff --git a/chromeos/dbus/kerberos/OWNERS b/chromeos/dbus/kerberos/OWNERS index 73cad4b..03d86313 100644 --- a/chromeos/dbus/kerberos/OWNERS +++ b/chromeos/dbus/kerberos/OWNERS
@@ -1 +1 @@ -file://chrome/browser/chromeos/kerberos/OWNERS +file://chrome/browser/ash/kerberos/OWNERS
diff --git a/components/OWNERS b/components/OWNERS index 19d6657a..b815354 100644 --- a/components/OWNERS +++ b/components/OWNERS
@@ -20,6 +20,7 @@ per-file fullscreen_control_strings.grdp=file://components/fullscreen_control/OWNERS per-file heavy_ad_intervention_strings.grdp=file://components/heavy_ad_intervention/OWNERS per-file javascript_dialogs_strings.grdp=file://components/javascript_dialogs/OWNERS +per-file live_caption_strings.grdp=file://components/live_caption/OWNERS per-file management_mobile_strings.grdp=file://components/management/OWNERS per-file management_strings.grdp=file://docs/privacy/OWNERS per-file media_message_center_strings.grdp=file://components/media_message_center/OWNERS
diff --git a/components/arc/session/arc_client_adapter.h b/components/arc/session/arc_client_adapter.h index 359ac44..6a0fe22 100644 --- a/components/arc/session/arc_client_adapter.h +++ b/components/arc/session/arc_client_adapter.h
@@ -75,6 +75,12 @@ // apps path. virtual void SetDemoModeDelegate(DemoModeDelegate* delegate) = 0; + // Trims VM's memory by moving it to zram. |callback| is called when the + // operation is done. + using TrimVmMemoryCallback = + base::OnceCallback<void(bool success, const std::string& failure_reason)>; + virtual void TrimVmMemory(TrimVmMemoryCallback callback) = 0; + void AddObserver(Observer* observer); void RemoveObserver(Observer* observer);
diff --git a/components/arc/session/arc_container_client_adapter.cc b/components/arc/session/arc_container_client_adapter.cc index 53080846..93ab536 100644 --- a/components/arc/session/arc_container_client_adapter.cc +++ b/components/arc/session/arc_container_client_adapter.cc
@@ -10,6 +10,8 @@ #include "base/callback_helpers.h" #include "base/logging.h" #include "base/macros.h" +#include "base/notreached.h" +#include "base/threading/thread_task_runner_handle.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/dbus/dbus_method_call_status.h" #include "chromeos/dbus/login_manager/arc.pb.h" @@ -179,6 +181,15 @@ // UpgradeParams, so it does not use the DemoModeDelegate. void SetDemoModeDelegate(DemoModeDelegate* delegate) override {} + // The interface is only for ARCVM. + void TrimVmMemory(TrimVmMemoryCallback callback) override { + NOTREACHED(); + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(std::move(callback), /*success=*/true, + /*failure_reason=*/"ARC container is not supported.")); + } + // chromeos::SessionManagerClient::Observer overrides: void ArcInstanceStopped() override { for (auto& observer : observer_list_)
diff --git a/components/arc/session/arc_session.h b/components/arc/session/arc_session.h index bf365da2..5630fa0d 100644 --- a/components/arc/session/arc_session.h +++ b/components/arc/session/arc_session.h
@@ -8,6 +8,7 @@ #include <memory> #include <string> +#include "base/callback_forward.h" #include "base/macros.h" #include "base/observer_list.h" #include "components/arc/session/adb_sideloading_availability_delegate.h" @@ -102,6 +103,12 @@ virtual void SetDemoModeDelegate( ArcClientAdapter::DemoModeDelegate* delegate) = 0; + // Trims VM's memory by moving it to zram. |callback| is called when the + // operation is done. + using TrimVmMemoryCallback = + base::OnceCallback<void(bool success, const std::string& failure_reason)>; + virtual void TrimVmMemory(TrimVmMemoryCallback callback) = 0; + void AddObserver(Observer* observer); void RemoveObserver(Observer* observer);
diff --git a/components/arc/session/arc_session_impl.cc b/components/arc/session/arc_session_impl.cc index 38e54150..ae47b52d 100644 --- a/components/arc/session/arc_session_impl.cc +++ b/components/arc/session/arc_session_impl.cc
@@ -895,6 +895,11 @@ client_->SetDemoModeDelegate(delegate); } +void ArcSessionImpl::TrimVmMemory(TrimVmMemoryCallback callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + client_->TrimVmMemory(std::move(callback)); +} + void ArcSessionImpl::OnConfigurationSet(bool success, size_t num_cores_disabled) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
diff --git a/components/arc/session/arc_session_impl.h b/components/arc/session/arc_session_impl.h index 761d105..dd7f21d 100644 --- a/components/arc/session/arc_session_impl.h +++ b/components/arc/session/arc_session_impl.h
@@ -213,6 +213,7 @@ const std::string& serial_number) override; void SetDemoModeDelegate( ArcClientAdapter::DemoModeDelegate* delegate) override; + void TrimVmMemory(TrimVmMemoryCallback callback) override; // chromeos::SchedulerConfigurationManagerBase::Observer overrides: void OnConfigurationSet(bool success, size_t num_cores_disabled) override;
diff --git a/components/arc/session/arc_session_impl_unittest.cc b/components/arc/session/arc_session_impl_unittest.cc index da95b5e4..5c113d6 100644 --- a/components/arc/session/arc_session_impl_unittest.cc +++ b/components/arc/session/arc_session_impl_unittest.cc
@@ -87,6 +87,10 @@ const std::string& serial_number) override {} void SetDemoModeDelegate(DemoModeDelegate* delegate) override {} + void TrimVmMemory(TrimVmMemoryCallback callback) override { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), true, std::string())); + } // Notifies ArcSessionImpl of the ARC instance stop event. void NotifyArcInstanceStopped() {
diff --git a/components/arc/session/arc_session_runner.cc b/components/arc/session/arc_session_runner.cc index 7178fa13..539cc4c 100644 --- a/components/arc/session/arc_session_runner.cc +++ b/components/arc/session/arc_session_runner.cc
@@ -256,6 +256,13 @@ demo_mode_delegate_ = std::move(delegate); } +void ArcSessionRunner::TrimVmMemory(TrimVmMemoryCallback callback) { + if (arc_session_) + arc_session_->TrimVmMemory(std::move(callback)); + else + LOG(WARNING) << "TrimVmMemory is called when no ARC session is running"; +} + void ArcSessionRunner::SetRestartDelayForTesting( const base::TimeDelta& restart_delay) { DCHECK(!arc_session_);
diff --git a/components/arc/session/arc_session_runner.h b/components/arc/session/arc_session_runner.h index 8e7acd7..b51b087 100644 --- a/components/arc/session/arc_session_runner.h +++ b/components/arc/session/arc_session_runner.h
@@ -111,6 +111,12 @@ void SetDemoModeDelegate( std::unique_ptr<ArcClientAdapter::DemoModeDelegate> delegate); + // Trims VM's memory by moving it to zram. |callback| is called when the + // operation is done. + using TrimVmMemoryCallback = + base::OnceCallback<void(bool success, const std::string& failure_reason)>; + void TrimVmMemory(TrimVmMemoryCallback callback); + // Returns the current ArcSession instance for testing purpose. ArcSession* GetArcSessionForTesting() { return arc_session_.get(); }
diff --git a/components/arc/session/arc_vm_client_adapter.cc b/components/arc/session/arc_vm_client_adapter.cc index fea4f3a..b35015a7 100644 --- a/components/arc/session/arc_vm_client_adapter.cc +++ b/components/arc/session/arc_vm_client_adapter.cc
@@ -41,6 +41,7 @@ #include "base/task/thread_pool.h" #include "base/threading/platform_thread.h" #include "base/threading/scoped_blocking_call.h" +#include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "base/timer/elapsed_timer.h" #include "chromeos/components/sensors/buildflags.h" @@ -578,6 +579,12 @@ demo_mode_delegate_ = delegate; } + void TrimVmMemory(TrimVmMemoryCallback callback) override { + // TODO(yusukes): Implement this. + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), true, std::string())); + } + // chromeos::ConciergeClient::Observer overrides: void ConciergeServiceStopped() override { VLOG(1) << "vm_concierge stopped";
diff --git a/components/arc/session/arc_vm_client_adapter_unittest.cc b/components/arc/session/arc_vm_client_adapter_unittest.cc index d0385041..47eb3ef6 100644 --- a/components/arc/session/arc_vm_client_adapter_unittest.cc +++ b/components/arc/session/arc_vm_client_adapter_unittest.cc
@@ -1732,6 +1732,17 @@ "androidboot.disable_download_provider=1")); } +// TODO(yusukes): Improve the test once the real implementation is in. +TEST_F(ArcVmClientAdapterTest, TrimVmMemory) { + bool result = false; + adapter()->TrimVmMemory(base::BindLambdaForTesting( + [&result](bool success, const std::string& failure_reason) { + result = success; + })); + run_loop()->RunUntilIdle(); + EXPECT_TRUE(result); +} + struct DalvikMemoryProfileTestParam { // Requested profile. StartParams::DalvikMemoryProfile profile;
diff --git a/components/arc/test/fake_arc_session.cc b/components/arc/test/fake_arc_session.cc index f097b51..5295bd8 100644 --- a/components/arc/test/fake_arc_session.cc +++ b/components/arc/test/fake_arc_session.cc
@@ -48,6 +48,10 @@ void FakeArcSession::SetDemoModeDelegate( ArcClientAdapter::DemoModeDelegate* delegate) {} +void FakeArcSession::TrimVmMemory(TrimVmMemoryCallback callback) { + std::move(callback).Run(true, std::string()); +} + void FakeArcSession::StopWithReason(ArcStopReason reason) { bool was_mojo_connected = running_; running_ = false;
diff --git a/components/arc/test/fake_arc_session.h b/components/arc/test/fake_arc_session.h index cb0cf46..615ce38 100644 --- a/components/arc/test/fake_arc_session.h +++ b/components/arc/test/fake_arc_session.h
@@ -35,6 +35,7 @@ const std::string& serial_number) override; void SetDemoModeDelegate( ArcClientAdapter::DemoModeDelegate* delegate) override; + void TrimVmMemory(TrimVmMemoryCallback callback) override; // To emulate unexpected stop, such as crash. void StopWithReason(ArcStopReason reason);
diff --git a/components/chrome_cleaner/DIR_METADATA b/components/chrome_cleaner/DIR_METADATA index efa11fb..c5f6b73 100644 --- a/components/chrome_cleaner/DIR_METADATA +++ b/components/chrome_cleaner/DIR_METADATA
@@ -1,5 +1,5 @@ monorail { - component: "UI>Browser>Preferences>Protector" + component: "Services>Safebrowsing>ChromeCleanup" } team_email: "security-dev@chromium.org"
diff --git a/components/chrome_cleaner/public/proto/DIR_METADATA b/components/chrome_cleaner/public/proto/DIR_METADATA index efa11fb..c5f6b73 100644 --- a/components/chrome_cleaner/public/proto/DIR_METADATA +++ b/components/chrome_cleaner/public/proto/DIR_METADATA
@@ -1,5 +1,5 @@ monorail { - component: "UI>Browser>Preferences>Protector" + component: "Services>Safebrowsing>ChromeCleanup" } team_email: "security-dev@chromium.org"
diff --git a/components/history/core/browser/cluster_visit_database.cc b/components/history/core/browser/cluster_visit_database.cc index cd1ae8a..60915bc 100644 --- a/components/history/core/browser/cluster_visit_database.cc +++ b/components/history/core/browser/cluster_visit_database.cc
@@ -121,11 +121,11 @@ ClusterVisitDatabase::~ClusterVisitDatabase() = default; bool ClusterVisitDatabase::InitClusterVisitTable() { - if (!GetDB().DoesTableExist("cluster_visit")) { + if (!GetDB().DoesTableExist("cluster_visits")) { // See `ClusterVisitRow` and `ClusterVisitContextSignals` for details about // these fields. if (!GetDB().Execute( - "CREATE TABLE cluster_visit(" + "CREATE TABLE cluster_visits(" "cluster_visit_id INTEGER PRIMARY KEY," "url_id INTEGER NOT NULL," "visit_id INTEGER NOT NULL," @@ -140,13 +140,13 @@ } bool ClusterVisitDatabase::DropClusterVisitTable() { - return GetDB().Execute("DROP TABLE cluster_visit"); + return GetDB().Execute("DROP TABLE cluster_visits"); } void ClusterVisitDatabase::AddClusterVisit(const ClusterVisitRow& row) { sql::Statement statement(GetDB().GetCachedStatement( SQL_FROM_HERE, - "INSERT INTO cluster_visit (" HISTORY_CLUSTER_VISIT_ROW_FIELDS_WITHOUT_ID + "INSERT INTO cluster_visits (" HISTORY_CLUSTER_VISIT_ROW_FIELDS_WITHOUT_ID ") VALUES (?, ?, ?, ?, ?)")); statement.BindInt64(0, row.url_id); statement.BindInt64(1, row.visit_id); @@ -163,7 +163,7 @@ void ClusterVisitDatabase::DeleteClusterVisit(int64_t cluster_visit_id) { sql::Statement statement(GetDB().GetCachedStatement( - SQL_FROM_HERE, "DELETE FROM cluster_visit WHERE cluster_visit_id = ?")); + SQL_FROM_HERE, "DELETE FROM cluster_visits WHERE cluster_visit_id = ?")); statement.BindInt64(0, cluster_visit_id); if (!statement.Run()) { @@ -176,7 +176,7 @@ int max_results) { sql::Statement statement(GetDB().GetCachedStatement( SQL_FROM_HERE, "SELECT" HISTORY_CLUSTER_VISIT_ROW_FIELDS - "FROM cluster_visit " + "FROM cluster_visits " "JOIN visits ON visit_id = visits.id " "ORDER BY visits.visit_time DESC " "LIMIT ?"));
diff --git a/components/live_caption_strings_grdp/DIR_METADATA b/components/live_caption_strings_grdp/DIR_METADATA new file mode 100644 index 0000000..032b6e41 --- /dev/null +++ b/components/live_caption_strings_grdp/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Media>LiveCaption" +}
diff --git a/components/live_caption_strings_grdp/OWNERS b/components/live_caption_strings_grdp/OWNERS new file mode 100644 index 0000000..1a11b99 --- /dev/null +++ b/components/live_caption_strings_grdp/OWNERS
@@ -0,0 +1 @@ +file://components/live_caption/OWNERS
diff --git a/components/live_caption_strings_grdp/README.md b/components/live_caption_strings_grdp/README.md new file mode 100644 index 0000000..119d8b9 --- /dev/null +++ b/components/live_caption_strings_grdp/README.md
@@ -0,0 +1,5 @@ +This directory of image SHA-1 hashes is used to improve translations of UI +strings through context images for translators. + +See also: [Chrome Translation Screenshots - Instructions & FAQ +](https://docs.google.com/document/d/1nwYWDny20icMSpLUuV_LgrlbWKrYpbXOERUIZNH636o/edit#heading=h.2t7lc4cxo2au)
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc index fafd649..a2a9d3f8 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -83,17 +83,25 @@ // static void MetricsWebContentsObserver::RecordFeatureUsage( content::RenderFrameHost* render_frame_host, - std::vector<blink::mojom::WebFeature> features) { + const std::vector<blink::mojom::WebFeature>& web_features) { content::WebContents* web_contents = content::WebContents::FromRenderFrameHost(render_frame_host); MetricsWebContentsObserver* observer = MetricsWebContentsObserver::FromWebContents(web_contents); - if (observer) - observer->OnBrowserFeatureUsage( - render_frame_host, page_load_metrics::mojom::PageLoadFeatures( - std::move(features), /* css_properties= */ {}, - /* animated_css_properties= */ {})); + if (observer) { + std::vector<blink::UseCounterFeature> features; + for (auto web_feature : web_features) { + DCHECK_NE(web_feature, blink::mojom::WebFeature::kPageVisits) + << "WebFeature::kPageVisits is a reserved feature."; + if (web_feature == blink::mojom::WebFeature::kPageVisits) + continue; + + features.emplace_back(blink::mojom::UseCounterFeatureType::kWebFeature, + static_cast<uint32_t>(web_feature)); + } + observer->OnBrowserFeatureUsage(render_frame_host, features); + } } // static @@ -866,7 +874,7 @@ content::RenderFrameHost* render_frame_host, mojom::PageLoadTimingPtr timing, mojom::FrameMetadataPtr metadata, - mojom::PageLoadFeaturesPtr new_features, + const std::vector<blink::UseCounterFeature>& new_features, const std::vector<mojom::ResourceDataUpdatePtr>& resources, mojom::FrameRenderDataUpdatePtr render_data, mojom::CpuTimingPtr cpu_timing, @@ -923,7 +931,7 @@ void MetricsWebContentsObserver::UpdateTiming( mojom::PageLoadTimingPtr timing, mojom::FrameMetadataPtr metadata, - mojom::PageLoadFeaturesPtr new_features, + const std::vector<blink::UseCounterFeature>& new_features, std::vector<mojom::ResourceDataUpdatePtr> resources, mojom::FrameRenderDataUpdatePtr render_data, mojom::CpuTimingPtr cpu_timing, @@ -933,7 +941,7 @@ content::RenderFrameHost* render_frame_host = page_load_metrics_receiver_.GetCurrentTargetFrame(); OnTimingUpdated(render_frame_host, std::move(timing), std::move(metadata), - std::move(new_features), resources, std::move(render_data), + new_features, resources, std::move(render_data), std::move(cpu_timing), std::move(new_deferred_resource_data), std::move(input_timing_delta), std::move(mobile_friendliness)); @@ -994,7 +1002,7 @@ void MetricsWebContentsObserver::OnBrowserFeatureUsage( content::RenderFrameHost* render_frame_host, - const mojom::PageLoadFeatures& new_features) { + const std::vector<blink::UseCounterFeature>& new_features) { // Since this call is coming directly from the browser, it should not pass us // data from frames that have already been navigated away from. However, this // could be false if this is called for the page that is prerendering with
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.h b/components/page_load_metrics/browser/metrics_web_contents_observer.h index 5820638..2629f045 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer.h +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.h
@@ -94,7 +94,7 @@ // sources from the renderer should go via MetricsRenderFrameObserver. static void RecordFeatureUsage( content::RenderFrameHost* render_frame_host, - std::vector<blink::mojom::WebFeature> features); + const std::vector<blink::mojom::WebFeature>& features); static void RecordFeatureUsage(content::RenderFrameHost* render_frame_host, blink::mojom::WebFeature feature); @@ -171,7 +171,7 @@ content::RenderFrameHost* render_frame_host, mojom::PageLoadTimingPtr timing, mojom::FrameMetadataPtr metadata, - mojom::PageLoadFeaturesPtr new_features, + const std::vector<blink::UseCounterFeature>& new_features, const std::vector<mojom::ResourceDataUpdatePtr>& resources, mojom::FrameRenderDataUpdatePtr render_data, mojom::CpuTimingPtr cpu_timing, @@ -210,7 +210,7 @@ void UpdateTiming( mojom::PageLoadTimingPtr timing, mojom::FrameMetadataPtr metadata, - mojom::PageLoadFeaturesPtr new_features, + const std::vector<blink::UseCounterFeature>& new_features, std::vector<mojom::ResourceDataUpdatePtr> resources, mojom::FrameRenderDataUpdatePtr render_data, mojom::CpuTimingPtr cpu_timing, @@ -271,8 +271,9 @@ bool ShouldTrackMainFrameNavigation( content::NavigationHandle* navigation_handle) const; - void OnBrowserFeatureUsage(content::RenderFrameHost* render_frame_host, - const mojom::PageLoadFeatures& new_features); + void OnBrowserFeatureUsage( + content::RenderFrameHost* render_frame_host, + const std::vector<blink::UseCounterFeature>& new_features); // Before deleting PageLoadTracker, check if we need to keep it alive as the // page is stored in back-forward cache. The page can either be restored later
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc index a0ffba4..44c0cbc0 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
@@ -28,7 +28,9 @@ #include "services/network/public/mojom/fetch_api.mojom.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/use_counter/use_counter_feature.h" #include "third_party/blink/public/mojom/loader/resource_load_info.mojom.h" +#include "third_party/blink/public/mojom/use_counter/use_counter_feature.mojom-shared.h" #include "url/url_constants.h" using content::NavigationSimulator; @@ -110,7 +112,7 @@ observer()->OnTimingUpdated( render_frame_host, previous_timing_->Clone(), mojom::FrameMetadataPtr(base::in_place), - mojom::PageLoadFeaturesPtr(base::in_place), + std::vector<blink::UseCounterFeature>(), std::vector<mojom::ResourceDataUpdatePtr>(), mojom::FrameRenderDataUpdatePtr(base::in_place), timing.Clone(), mojom::DeferredResourceCountsPtr(base::in_place), @@ -135,7 +137,7 @@ observer()->OnTimingUpdated( render_frame_host, timing.Clone(), mojom::FrameMetadataPtr(base::in_place), - mojom::PageLoadFeaturesPtr(base::in_place), + std::vector<blink::UseCounterFeature>(), std::vector<mojom::ResourceDataUpdatePtr>(), mojom::FrameRenderDataUpdatePtr(base::in_place), mojom::CpuTimingPtr(base::in_place), @@ -214,7 +216,7 @@ return embedder_interface_->observed_aborted_urls(); } - const std::vector<mojom::PageLoadFeatures>& observed_features() const { + const std::vector<blink::UseCounterFeature>& observed_features() const { return embedder_interface_->observed_features(); } @@ -1454,12 +1456,19 @@ main_rfh(), {blink::mojom::WebFeature::kHTMLMarqueeElement, blink::mojom::WebFeature::kFormAttribute}); - ASSERT_EQ(observed_features().size(), 1ul); - ASSERT_EQ(observed_features()[0].features.size(), 2ul); - EXPECT_EQ(observed_features()[0].features[0], - blink::mojom::WebFeature::kHTMLMarqueeElement); - EXPECT_EQ(observed_features()[0].features[1], - blink::mojom::WebFeature::kFormAttribute); + blink::UseCounterFeature feature1 = { + blink::mojom::UseCounterFeatureType::kWebFeature, + static_cast<uint32_t>(blink::mojom::WebFeature::kHTMLMarqueeElement), + }; + + blink::UseCounterFeature feature2 = { + blink::mojom::UseCounterFeatureType::kWebFeature, + static_cast<uint32_t>(blink::mojom::WebFeature::kFormAttribute), + }; + + ASSERT_EQ(observed_features().size(), 2ul); + EXPECT_EQ(observed_features()[0], feature1); + EXPECT_EQ(observed_features()[1], feature2); } TEST_F(MetricsWebContentsObserverTest, RecordFeatureUsageNoObserver) { @@ -1541,16 +1550,13 @@ MetricsWebContentsObserver::RecordFeatureUsage( main_rfh(), blink::mojom::WebFeature::kFormAttribute); - std::vector<std::vector<blink::mojom::WebFeature>> features; - for (const auto& observation : observed_features()) { - features.push_back(observation.features); - } - // For now back-forward cached navigations are not tracked and the events // after the history navigation are not tracked. - EXPECT_THAT(features, - testing::ElementsAre(std::vector<blink::mojom::WebFeature>{ - blink::mojom::WebFeature::kHTMLMarqueeElement})); + blink::UseCounterFeature feature = { + blink::mojom::UseCounterFeatureType::kWebFeature, + static_cast<uint32_t>(blink::mojom::WebFeature::kHTMLMarqueeElement), + }; + EXPECT_THAT(observed_features(), testing::ElementsAre(feature)); } // Checks OnEnterBackForwardCache is called appropriately with back-forward
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc index 71471ea..5dd3a5b 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
@@ -205,7 +205,7 @@ observer->OnTimingUpdated( navigation_handle()->GetRenderFrameHost(), std::move(timing), mojom::FrameMetadataPtr(base::in_place), - mojom::PageLoadFeaturesPtr(base::in_place), resources, + std::vector<blink::UseCounterFeature>(), resources, mojom::FrameRenderDataUpdatePtr(base::in_place), mojom::CpuTimingPtr(base::in_place), mojom::DeferredResourceCountsPtr(base::in_place),
diff --git a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc index dd82dad..18a7408 100644 --- a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc +++ b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc
@@ -123,7 +123,7 @@ const mojom::PageLoadTiming& timing, content::RenderFrameHost* rfh) { SimulatePageLoadTimingUpdate( - timing, mojom::FrameMetadata(), mojom::PageLoadFeatures(), + timing, mojom::FrameMetadata(), /* new_features= */ {}, mojom::FrameRenderDataUpdate(), mojom::CpuTiming(), mojom::DeferredResourceCounts(), mojom::InputTiming(), blink::MobileFriendliness(), rfh); @@ -140,7 +140,7 @@ auto timing = page_load_metrics::mojom::PageLoadTimingPtr(base::in_place); page_load_metrics::InitPageLoadTimingForTest(timing.get()); SimulatePageLoadTimingUpdate( - *timing, mojom::FrameMetadata(), mojom::PageLoadFeatures(), + *timing, mojom::FrameMetadata(), /* new_features= */ {}, mojom::FrameRenderDataUpdate(), cpu_timing, mojom::DeferredResourceCounts(), mojom::InputTiming(), blink::MobileFriendliness(), rfh); @@ -157,7 +157,7 @@ auto timing = page_load_metrics::mojom::PageLoadTimingPtr(base::in_place); page_load_metrics::InitPageLoadTimingForTest(timing.get()); SimulatePageLoadTimingUpdate( - *timing, mojom::FrameMetadata(), mojom::PageLoadFeatures(), + *timing, mojom::FrameMetadata(), /* new_features= */ {}, mojom::FrameRenderDataUpdate(), mojom::CpuTiming(), mojom::DeferredResourceCounts(), input_timing, blink::MobileFriendliness(), rfh); @@ -167,9 +167,8 @@ const mojom::PageLoadTiming& timing, const mojom::FrameMetadata& metadata) { SimulatePageLoadTimingUpdate( - timing, metadata, mojom::PageLoadFeatures(), - mojom::FrameRenderDataUpdate(), mojom::CpuTiming(), - mojom::DeferredResourceCounts(), mojom::InputTiming(), + timing, metadata, /* new_features= */ {}, mojom::FrameRenderDataUpdate(), + mojom::CpuTiming(), mojom::DeferredResourceCounts(), mojom::InputTiming(), blink::MobileFriendliness(), web_contents()->GetMainFrame()); } @@ -179,14 +178,13 @@ mojom::PageLoadTiming timing; InitPageLoadTimingForTest(&timing); SimulatePageLoadTimingUpdate( - timing, metadata, mojom::PageLoadFeatures(), - mojom::FrameRenderDataUpdate(), mojom::CpuTiming(), - mojom::DeferredResourceCounts(), mojom::InputTiming(), + timing, metadata, /* new_features= */ {}, mojom::FrameRenderDataUpdate(), + mojom::CpuTiming(), mojom::DeferredResourceCounts(), mojom::InputTiming(), blink::MobileFriendliness(), rfh); } void PageLoadMetricsObserverTester::SimulateFeaturesUpdate( - const mojom::PageLoadFeatures& new_features) { + const std::vector<blink::UseCounterFeature>& new_features) { SimulatePageLoadTimingUpdate( mojom::PageLoadTiming(), mojom::FrameMetadata(), new_features, mojom::FrameRenderDataUpdate(), mojom::CpuTiming(), @@ -205,7 +203,7 @@ mojom::PageLoadTiming timing; InitPageLoadTimingForTest(&timing); SimulatePageLoadTimingUpdate( - timing, mojom::FrameMetadata(), mojom::PageLoadFeatures(), render_data, + timing, mojom::FrameMetadata(), /* new_features= */ {}, render_data, mojom::CpuTiming(), mojom::DeferredResourceCounts(), mojom::InputTiming(), blink::MobileFriendliness(), rfh); } @@ -213,7 +211,7 @@ void PageLoadMetricsObserverTester::SimulatePageLoadTimingUpdate( const mojom::PageLoadTiming& timing, const mojom::FrameMetadata& metadata, - const mojom::PageLoadFeatures& new_features, + const std::vector<blink::UseCounterFeature>& new_features, const mojom::FrameRenderDataUpdate& render_data, const mojom::CpuTiming& cpu_timing, const mojom::DeferredResourceCounts& new_deferred_resource_data, @@ -221,7 +219,7 @@ const blink::MobileFriendliness& mobile_friendliness, content::RenderFrameHost* rfh) { metrics_web_contents_observer_->OnTimingUpdated( - rfh, timing.Clone(), metadata.Clone(), new_features.Clone(), + rfh, timing.Clone(), metadata.Clone(), new_features, std::vector<mojom::ResourceDataUpdatePtr>(), render_data.Clone(), cpu_timing.Clone(), new_deferred_resource_data.Clone(), input_timing.Clone(), mobile_friendliness); @@ -246,7 +244,7 @@ metrics_web_contents_observer_->OnTimingUpdated( render_frame_host, std::move(timing), mojom::FrameMetadataPtr(base::in_place), - mojom::PageLoadFeaturesPtr(base::in_place), resources, + std::vector<blink::UseCounterFeature>(), resources, mojom::FrameRenderDataUpdatePtr(base::in_place), mojom::CpuTimingPtr(base::in_place), mojom::DeferredResourceCountsPtr(base::in_place), @@ -328,9 +326,9 @@ void PageLoadMetricsObserverTester::SimulateMobileFriendlinessUpdate( blink::MobileFriendliness& mobile_friendliness) { SimulatePageLoadTimingUpdate( - mojom::PageLoadTiming(), mojom::FrameMetadata(), - mojom::PageLoadFeatures(), mojom::FrameRenderDataUpdate(), - mojom::CpuTiming(), mojom::DeferredResourceCounts(), mojom::InputTiming(), + mojom::PageLoadTiming(), mojom::FrameMetadata(), /* new_features= */ {}, + mojom::FrameRenderDataUpdate(), mojom::CpuTiming(), + mojom::DeferredResourceCounts(), mojom::InputTiming(), mobile_friendliness, web_contents()->GetMainFrame()); }
diff --git a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.h b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.h index 8491d69..ef07776 100644 --- a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.h +++ b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.h
@@ -36,7 +36,6 @@ namespace mojom { class FrameRenderDataUpdate; -class PageLoadFeatures; class FrameMetadata; class PageLoadTiming; } // namespace mojom @@ -99,7 +98,8 @@ const mojom::FrameMetadata& metadata); void SimulateMetadataUpdate(const mojom::FrameMetadata& metadata, content::RenderFrameHost* rfh); - void SimulateFeaturesUpdate(const mojom::PageLoadFeatures& new_features); + void SimulateFeaturesUpdate( + const std::vector<blink::UseCounterFeature>& new_features); void SimulateResourceDataUseUpdate( const std::vector<mojom::ResourceDataUpdatePtr>& resources); void SimulateResourceDataUseUpdate( @@ -164,7 +164,7 @@ void SimulatePageLoadTimingUpdate( const mojom::PageLoadTiming& timing, const mojom::FrameMetadata& metadata, - const mojom::PageLoadFeatures& new_features, + const std::vector<blink::UseCounterFeature>& new_features, const mojom::FrameRenderDataUpdate& render_data, const mojom::CpuTiming& cpu_timing, const mojom::DeferredResourceCounts& new_deferred_resource_data,
diff --git a/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc index 68e21d1..5c12763 100644 --- a/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc +++ b/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc
@@ -9,7 +9,6 @@ #include "content/public/browser/render_frame_host.h" #include "services/metrics/public/cpp/ukm_builders.h" -using Features = page_load_metrics::mojom::PageLoadFeatures; using UkmFeatureList = UseCounterPageLoadMetricsObserver::UkmFeatureList; using WebFeature = blink::mojom::WebFeature; using WebFeatureBitSet = @@ -98,89 +97,62 @@ void UseCounterPageLoadMetricsObserver::OnFeaturesUsageObserved( content::RenderFrameHost* rfh, - const Features& features) { - for (WebFeature feature : features.features) { - // Verify that kPageVisits is observed at most once per observer. - if (feature == WebFeature::kPageVisits) { - mojo::ReportBadMessage( - "kPageVisits should not be passed to " - "PageLoadMetricsObserver::OnFeaturesUsageObserved"); - return; - } + const std::vector<blink::UseCounterFeature>& features) { + using FeatureType = blink::mojom::UseCounterFeatureType; + for (const blink::UseCounterFeature& feature : features) { + switch (feature.type()) { + case FeatureType::kWebFeature: { + WebFeature web_feature = static_cast<WebFeature>(feature.value()); + // Record feature usage in main frame. + // If a feature is already recorded in the main frame, it is also + // recorded on the page. + if (main_frame_features_recorded_.test(feature.value())) + continue; + if (rfh->GetParent() == nullptr) { + RecordMainFrameFeature(web_feature); + main_frame_features_recorded_.set(feature.value()); + } - // Record feature usage in main frame. - // If a feature is already recorded in the main frame, it is also recorded - // on the page. - if (main_frame_features_recorded_.test(static_cast<size_t>(feature))) - continue; - if (rfh->GetParent() == nullptr) { - RecordMainFrameFeature(feature); - main_frame_features_recorded_.set(static_cast<size_t>(feature)); + if (features_recorded_.test(feature.value())) + continue; + PossiblyWarnFeatureDeprecation(rfh, web_feature); + RecordFeature(web_feature); + features_recorded_.set(feature.value()); + break; + } + case FeatureType::kCssProperty: { + CSSSampleId css_property = static_cast<CSSSampleId>(feature.value()); + // Same as above, the usage of each CSS property should be only measured + // once. + if (css_properties_recorded_.test(feature.value())) + continue; + // There are about 600 enums, so the memory required for a vector + // histogram is about 600 * 8 byes = 5KB 50% of the time there are about + // 100 CSS properties recorded per page load. Storage in sparce + // histogram entries are 48 bytes instead of 8 bytes so the memory + // required for a sparse histogram is about 100 * 48 bytes = 5KB. On top + // there will be std::map overhead and the acquire/release of a + // base::Lock to protect the map during each update. Overal it is still + // better to use a vector histogram here since it is faster to access + // and merge and uses about same amount of memory. + RecordCssProperty(css_property); + css_properties_recorded_.set(feature.value()); + break; + } + case FeatureType::kAnimatedCssProperty: { + CSSSampleId animated_css_property = + static_cast<CSSSampleId>(feature.value()); + // Same as above, the usage of each animated CSS property should be only + // measured once. + if (animated_css_properties_recorded_.test(feature.value())) + continue; + // See comments above (in the css property section) for reasoning of + // using a vector histogram here instead of a sparse histogram. + RecordAnimatedCssProperty(animated_css_property); + animated_css_properties_recorded_.set(feature.value()); + break; + } } - - if (features_recorded_.test(static_cast<size_t>(feature))) - continue; - PossiblyWarnFeatureDeprecation(rfh, feature); - RecordFeature(feature); - features_recorded_.set(static_cast<size_t>(feature)); - } - - for (CSSSampleId css_property : features.css_properties) { - // Verify that page visit is observed at most once per observer. - if (css_property == CSSSampleId::kTotalPagesMeasured) { - mojo::ReportBadMessage( - "CSSSampleId::kTotalPagesMeasured should not be passed to " - "PageLoadMetricsObserver::OnFeaturesUsageObserved"); - return; - } - if (css_property > CSSSampleId::kMaxValue) { - mojo::ReportBadMessage( - "Invalid CSS property passed to " - "PageLoadMetricsObserver::OnFeaturesUsageObserved"); - return; - } - // Same as above, the usage of each CSS property should be only measured - // once. - if (css_properties_recorded_.test(static_cast<size_t>(css_property))) - continue; - // There are about 600 enums, so the memory required for a vector histogram - // is about 600 * 8 byes = 5KB - // 50% of the time there are about 100 CSS properties recorded per page - // load. Storage in sparce histogram entries are 48 bytes instead of 8 - // bytes so the memory required for a sparse histogram is about - // 100 * 48 bytes = 5KB. On top there will be std::map overhead and the - // acquire/release of a base::Lock to protect the map during each update. - // Overal it is still better to use a vector histogram here since it is - // faster to access and merge and uses about same amount of memory. - RecordCssProperty(css_property); - css_properties_recorded_.set(static_cast<size_t>(css_property)); - } - - for (CSSSampleId animated_css_property : features.animated_css_properties) { - // Verify that page visit is observed at most once per observer. - if (animated_css_property == - blink::mojom::CSSSampleId::kTotalPagesMeasured) { - mojo::ReportBadMessage( - "CSSSampleId::kTotalPagesMeasured should not be passed to " - "PageLoadMetricsObserver::OnFeaturesUsageObserved"); - return; - } - if (animated_css_property > blink::mojom::CSSSampleId::kMaxValue) { - mojo::ReportBadMessage( - "Invalid animated CSS property passed to " - "PageLoadMetricsObserver::OnFeaturesUsageObserved"); - return; - } - // Same as above, the usage of each animated CSS property should be only - // measured once. - if (animated_css_properties_recorded_.test( - static_cast<size_t>(animated_css_property))) - continue; - // See comments above (in the css property section) for reasoning of using - // a vector histogram here instead of a sparse histogram. - RecordAnimatedCssProperty(animated_css_property); - animated_css_properties_recorded_.set( - static_cast<size_t>(animated_css_property)); } }
diff --git a/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.h index 8186776d..04c16f2a 100644 --- a/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.h
@@ -34,7 +34,7 @@ ukm::SourceId source_id) override; void OnFeaturesUsageObserved( content::RenderFrameHost* rfh, - const page_load_metrics::mojom::PageLoadFeatures&) override; + const std::vector<blink::UseCounterFeature>&) override; void OnComplete( const page_load_metrics::mojom::PageLoadTiming& timing) override; void OnFailedProvisionalLoad(
diff --git a/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer_unittest.cc index fb5bda54..15654ee9 100644 --- a/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer_unittest.cc +++ b/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer_unittest.cc
@@ -29,9 +29,8 @@ UseCounterPageLoadMetricsObserverTest() {} void HistogramBasicTest( - const page_load_metrics::mojom::PageLoadFeatures& first_features, - const page_load_metrics::mojom::PageLoadFeatures& second_features = - page_load_metrics::mojom::PageLoadFeatures()) { + const std::vector<blink::UseCounterFeature>& first_features, + const std::vector<blink::UseCounterFeature>& second_features = {}) { NavigateAndCommit(GURL(kTestUrl)); tester()->SimulateFeaturesUpdate(first_features); // Verify that kPageVisits is observed on commit. @@ -49,85 +48,33 @@ internal::kAnimatedCssPropertiesHistogramName, blink::mojom::CSSSampleId::kTotalPagesMeasured, 1); - for (auto feature : first_features.features) { + // TODO (crbug.com/1194678): Make test compatible with features other than + // WebFeature. + for (const auto& feature : first_features) { tester()->histogram_tester().ExpectBucketCount( internal::kFeaturesHistogramName, - static_cast<base::Histogram::Sample>(feature), 1); + static_cast<base::Histogram::Sample>(feature.value()), 1); tester()->histogram_tester().ExpectBucketCount( internal::kFeaturesHistogramMainFrameName, - static_cast<base::Histogram::Sample>(feature), 1); + static_cast<base::Histogram::Sample>(feature.value()), 1); } tester()->SimulateFeaturesUpdate(second_features); - for (auto feature : first_features.features) { + for (const auto& feature : first_features) { tester()->histogram_tester().ExpectBucketCount( internal::kFeaturesHistogramName, - static_cast<base::Histogram::Sample>(feature), 1); + static_cast<base::Histogram::Sample>(feature.value()), 1); tester()->histogram_tester().ExpectBucketCount( internal::kFeaturesHistogramMainFrameName, - static_cast<base::Histogram::Sample>(feature), 1); + static_cast<base::Histogram::Sample>(feature.value()), 1); } - for (auto feature : second_features.features) { + for (const auto& feature : second_features) { tester()->histogram_tester().ExpectBucketCount( internal::kFeaturesHistogramName, - static_cast<base::Histogram::Sample>(feature), 1); + static_cast<base::Histogram::Sample>(feature.value()), 1); tester()->histogram_tester().ExpectBucketCount( internal::kFeaturesHistogramMainFrameName, - static_cast<base::Histogram::Sample>(feature), 1); - } - } - - void CssHistogramBasicTest( - const page_load_metrics::mojom::PageLoadFeatures& first_features, - const page_load_metrics::mojom::PageLoadFeatures& second_features = - page_load_metrics::mojom::PageLoadFeatures()) { - NavigateAndCommit(GURL(kTestUrl)); - tester()->SimulateFeaturesUpdate(first_features); - // Verify that page visit is recorded for CSS histograms. - tester()->histogram_tester().ExpectBucketCount( - internal::kCssPropertiesHistogramName, - blink::mojom::CSSSampleId::kTotalPagesMeasured, 1); - - for (auto feature : first_features.css_properties) { - tester()->histogram_tester().ExpectBucketCount( - internal::kCssPropertiesHistogramName, feature, 1); - } - - tester()->SimulateFeaturesUpdate(second_features); - for (auto feature : first_features.css_properties) { - tester()->histogram_tester().ExpectBucketCount( - internal::kCssPropertiesHistogramName, feature, 1); - } - for (auto feature : second_features.css_properties) { - tester()->histogram_tester().ExpectBucketCount( - internal::kCssPropertiesHistogramName, feature, 1); - } - } - - void AnimatedCssHistogramBasicTest( - const page_load_metrics::mojom::PageLoadFeatures& first_features, - const page_load_metrics::mojom::PageLoadFeatures& second_features = - page_load_metrics::mojom::PageLoadFeatures()) { - NavigateAndCommit(GURL(kTestUrl)); - tester()->SimulateFeaturesUpdate(first_features); - // Verify that page visit is recorded for CSS histograms. - tester()->histogram_tester().ExpectBucketCount( - internal::kAnimatedCssPropertiesHistogramName, - blink::mojom::CSSSampleId::kTotalPagesMeasured, 1); - - for (auto feature : first_features.animated_css_properties) { - tester()->histogram_tester().ExpectBucketCount( - internal::kAnimatedCssPropertiesHistogramName, feature, 1); - } - - tester()->SimulateFeaturesUpdate(second_features); - for (auto feature : first_features.animated_css_properties) { - tester()->histogram_tester().ExpectBucketCount( - internal::kAnimatedCssPropertiesHistogramName, feature, 1); - } - for (auto feature : second_features.animated_css_properties) { - tester()->histogram_tester().ExpectBucketCount( - internal::kAnimatedCssPropertiesHistogramName, feature, 1); + static_cast<base::Histogram::Sample>(feature.value()), 1); } } @@ -141,57 +88,27 @@ }; TEST_F(UseCounterPageLoadMetricsObserverTest, CountOneFeature) { - std::vector<WebFeature> features({WebFeature::kFetch}); - page_load_metrics::mojom::PageLoadFeatures page_load_features; - page_load_features.features = features; - HistogramBasicTest(page_load_features); + HistogramBasicTest({{blink::mojom::UseCounterFeatureType::kWebFeature, 0}}); } TEST_F(UseCounterPageLoadMetricsObserverTest, CountFeatures) { - std::vector<WebFeature> features_0( - {WebFeature::kFetch, WebFeature::kFetchBodyStream}); - std::vector<WebFeature> features_1({WebFeature::kWindowFind}); - page_load_metrics::mojom::PageLoadFeatures page_load_features_0; - page_load_metrics::mojom::PageLoadFeatures page_load_features_1; - page_load_features_0.features = features_0; - page_load_features_1.features = features_1; - HistogramBasicTest(page_load_features_0, page_load_features_1); + HistogramBasicTest( + { + {blink::mojom::UseCounterFeatureType::kWebFeature, 0}, + {blink::mojom::UseCounterFeatureType::kWebFeature, 1}, + }, + {{blink::mojom::UseCounterFeatureType::kWebFeature, 2}}); } TEST_F(UseCounterPageLoadMetricsObserverTest, CountDuplicatedFeatures) { - std::vector<WebFeature> features_0( - {WebFeature::kFetch, WebFeature::kFetch, WebFeature::kFetchBodyStream}); - std::vector<WebFeature> features_1( - {WebFeature::kFetch, WebFeature::kWindowFind}); - page_load_metrics::mojom::PageLoadFeatures page_load_features_0; - page_load_metrics::mojom::PageLoadFeatures page_load_features_1; - page_load_features_0.features = features_0; - page_load_features_1.features = features_1; - HistogramBasicTest(page_load_features_0, page_load_features_1); -} - -TEST_F(UseCounterPageLoadMetricsObserverTest, RecordCSSProperties) { - // CSSPropertyID::kFont (5), CSSPropertyID::kZoom (19) - page_load_metrics::mojom::PageLoadFeatures page_load_features_0; - page_load_metrics::mojom::PageLoadFeatures page_load_features_1; - page_load_features_0.css_properties = {CSSSampleId::kFont, - CSSSampleId::kZoom}; - page_load_features_1.css_properties = {CSSSampleId::kZoom}; - CssHistogramBasicTest(page_load_features_0, page_load_features_1); -} - -TEST_F(UseCounterPageLoadMetricsObserverTest, RecordAnimatedCSSProperties) { - page_load_metrics::mojom::PageLoadFeatures page_load_features_0; - page_load_metrics::mojom::PageLoadFeatures page_load_features_1; - page_load_features_0.css_properties = {CSSSampleId::kFont, - CSSSampleId::kZoom}; - page_load_features_1.css_properties = {CSSSampleId::kZoom}; - AnimatedCssHistogramBasicTest(page_load_features_0, page_load_features_1); -} - -TEST_F(UseCounterPageLoadMetricsObserverTest, RecordCSSPropertiesInRange) { - page_load_metrics::mojom::PageLoadFeatures page_load_features; - page_load_features.css_properties = {CSSSampleId::kColor, - CSSSampleId::kMaxValue}; - CssHistogramBasicTest(page_load_features); + HistogramBasicTest( + { + {blink::mojom::UseCounterFeatureType::kWebFeature, 0}, + {blink::mojom::UseCounterFeatureType::kWebFeature, 0}, + {blink::mojom::UseCounterFeatureType::kWebFeature, 1}, + }, + { + {blink::mojom::UseCounterFeatureType::kWebFeature, 0}, + {blink::mojom::UseCounterFeatureType::kWebFeature, 2}, + }); }
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer.h b/components/page_load_metrics/browser/page_load_metrics_observer.h index ab086a5..f80181d9 100644 --- a/components/page_load_metrics/browser/page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/page_load_metrics_observer.h
@@ -23,6 +23,7 @@ #include "services/metrics/public/cpp/ukm_source.h" #include "services/network/public/mojom/fetch_api.mojom.h" #include "third_party/blink/public/common/input/web_input_event.h" +#include "third_party/blink/public/common/use_counter/use_counter_feature.h" #include "url/gurl.h" namespace content { @@ -438,7 +439,7 @@ // Invoked when new use counter features are observed across all frames. virtual void OnFeaturesUsageObserved( content::RenderFrameHost* rfh, - const mojom::PageLoadFeatures& features) {} + const std::vector<blink::UseCounterFeature>& features) {} // The smoothness metrics is shared over shared-memory. The observer should // create a mapping (by calling |shared_memory.Map()|) so that they are able
diff --git a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc index 88ce01e..b6ab690f 100644 --- a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc +++ b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc
@@ -204,12 +204,13 @@ void PageLoadMetricsTestWaiter::OnFeaturesUsageObserved( content::RenderFrameHost* rfh, - const mojom::PageLoadFeatures& features) { - for (blink::mojom::WebFeature feature : features.features) { - size_t feature_idx = static_cast<size_t>(feature); - if (observed_.web_features_.test(feature_idx)) + const std::vector<blink::UseCounterFeature>& features) { + for (const auto& feature : features) { + // TODO(crbug.com/1194678): Expand test converage to other feature types. + if (feature.type() != blink::mojom::UseCounterFeatureType::kWebFeature) continue; - observed_.web_features_.set(feature_idx); + + observed_.web_features_.set(feature.value()); } if (ExpectationsSatisfied() && run_loop_) @@ -475,7 +476,7 @@ void PageLoadMetricsTestWaiter::WaiterMetricsObserver::OnFeaturesUsageObserved( content::RenderFrameHost* rfh, - const mojom::PageLoadFeatures& features) { + const std::vector<blink::UseCounterFeature>& features) { if (waiter_) waiter_->OnFeaturesUsageObserved(nullptr, features); }
diff --git a/components/page_load_metrics/browser/page_load_metrics_test_waiter.h b/components/page_load_metrics/browser/page_load_metrics_test_waiter.h index 0c9096fb..ec4b3d6f 100644 --- a/components/page_load_metrics/browser/page_load_metrics_test_waiter.h +++ b/components/page_load_metrics/browser/page_load_metrics_test_waiter.h
@@ -153,7 +153,7 @@ void OnFeaturesUsageObserved( content::RenderFrameHost* rfh, - const page_load_metrics::mojom::PageLoadFeatures&) override; + const std::vector<blink::UseCounterFeature>&) override; void OnDidFinishSubFrameNavigation( content::NavigationHandle* navigation_handle) override; @@ -248,8 +248,9 @@ // Updates |observed_.web_features_| to record any new feature observed. // Stops waiting if expectations are satisfied after update. - void OnFeaturesUsageObserved(content::RenderFrameHost* rfh, - const mojom::PageLoadFeatures& features); + void OnFeaturesUsageObserved( + content::RenderFrameHost* rfh, + const std::vector<blink::UseCounterFeature>& features); void FrameSizeChanged(content::RenderFrameHost* render_frame_host, const gfx::Size& frame_size);
diff --git a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc index ed804ef..14d5cf9 100644 --- a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc +++ b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc
@@ -464,7 +464,7 @@ content::RenderFrameHost* render_frame_host, mojom::PageLoadTimingPtr new_timing, mojom::FrameMetadataPtr new_metadata, - mojom::PageLoadFeaturesPtr new_features, + const std::vector<blink::UseCounterFeature>& new_features, const std::vector<mojom::ResourceDataUpdatePtr>& resources, mojom::FrameRenderDataUpdatePtr render_data, mojom::CpuTimingPtr new_cpu_timing, @@ -506,7 +506,7 @@ OnSubFrameRenderDataChanged(render_frame_host, *render_data); } - client_->UpdateFeaturesUsage(render_frame_host, *new_features); + client_->UpdateFeaturesUsage(render_frame_host, new_features); } void PageLoadMetricsUpdateDispatcher::UpdateHasSeenInputOrScroll( @@ -525,7 +525,7 @@ void PageLoadMetricsUpdateDispatcher::UpdateFeatures( content::RenderFrameHost* render_frame_host, - const mojom::PageLoadFeatures& new_features) { + const std::vector<blink::UseCounterFeature>& new_features) { if (embedder_interface_->IsExtensionUrl( render_frame_host->GetLastCommittedURL())) { // Extensions can inject child frames into a page. We don't want to track
diff --git a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h index 8f619d1..fdb9e2fb 100644 --- a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h +++ b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h
@@ -126,7 +126,7 @@ const mojom::FrameRenderDataUpdate& render_data) = 0; virtual void UpdateFeaturesUsage( content::RenderFrameHost* rfh, - const mojom::PageLoadFeatures& new_features) = 0; + const std::vector<blink::UseCounterFeature>& new_features) = 0; virtual void UpdateResourceDataUse( content::RenderFrameHost* rfh, const std::vector<mojom::ResourceDataUpdatePtr>& resources) = 0; @@ -152,7 +152,7 @@ content::RenderFrameHost* render_frame_host, mojom::PageLoadTimingPtr new_timing, mojom::FrameMetadataPtr new_metadata, - mojom::PageLoadFeaturesPtr new_features, + const std::vector<blink::UseCounterFeature>& new_features, const std::vector<mojom::ResourceDataUpdatePtr>& resources, mojom::FrameRenderDataUpdatePtr render_data, mojom::CpuTimingPtr new_cpu_timing, @@ -167,8 +167,9 @@ // This method is only intended to be called for PageLoadFeatures being // recorded directly from the browser process. Features coming from the // renderer process should use the main flow into |UpdateMetrics|. - void UpdateFeatures(content::RenderFrameHost* render_frame_host, - const mojom::PageLoadFeatures& new_features); + void UpdateFeatures( + content::RenderFrameHost* render_frame_host, + const std::vector<blink::UseCounterFeature>& new_features); void DidFinishSubFrameNavigation( content::NavigationHandle* navigation_handle);
diff --git a/components/page_load_metrics/browser/page_load_tracker.cc b/components/page_load_metrics/browser/page_load_tracker.cc index 3d319b6..08ef383f 100644 --- a/components/page_load_metrics/browser/page_load_tracker.cc +++ b/components/page_load_metrics/browser/page_load_tracker.cc
@@ -799,7 +799,7 @@ void PageLoadTracker::UpdateFeaturesUsage( content::RenderFrameHost* rfh, - const mojom::PageLoadFeatures& new_features) { + const std::vector<blink::UseCounterFeature>& new_features) { for (const auto& observer : observers_) { observer->OnFeaturesUsageObserved(rfh, new_features); }
diff --git a/components/page_load_metrics/browser/page_load_tracker.h b/components/page_load_metrics/browser/page_load_tracker.h index a40df44..49e0468 100644 --- a/components/page_load_metrics/browser/page_load_tracker.h +++ b/components/page_load_metrics/browser/page_load_tracker.h
@@ -195,7 +195,7 @@ const mojom::FrameMetadata& metadata) override; void UpdateFeaturesUsage( content::RenderFrameHost* rfh, - const mojom::PageLoadFeatures& new_features) override; + const std::vector<blink::UseCounterFeature>& new_features) override; void UpdateResourceDataUse( content::RenderFrameHost* rfh, const std::vector<mojom::ResourceDataUpdatePtr>& resources) override;
diff --git a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc index 26c6571..51f0105 100644 --- a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc +++ b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc
@@ -25,7 +25,7 @@ std::vector<ExtraRequestCompleteInfo>* loaded_resources, std::vector<GURL>* observed_committed_urls, std::vector<GURL>* observed_aborted_urls, - std::vector<mojom::PageLoadFeatures>* observed_features, + std::vector<blink::UseCounterFeature>* observed_features, base::Optional<bool>* is_first_navigation_in_web_contents, int* count_on_enter_back_forward_cache) : updated_timings_(updated_timings), @@ -80,8 +80,9 @@ void OnFeaturesUsageObserved( content::RenderFrameHost* rfh, - const mojom::PageLoadFeatures& features) override { - observed_features_->push_back(features); + const std::vector<blink::UseCounterFeature>& features) override { + observed_features_->insert(observed_features_->end(), features.begin(), + features.end()); } void OnDidInternalNavigationAbort( @@ -101,7 +102,7 @@ std::vector<mojom::PageLoadTimingPtr>* const complete_timings_; std::vector<mojom::CpuTimingPtr>* const updated_cpu_timings_; std::vector<ExtraRequestCompleteInfo>* const loaded_resources_; - std::vector<mojom::PageLoadFeatures>* const observed_features_; + std::vector<blink::UseCounterFeature>* const observed_features_; std::vector<GURL>* const observed_committed_urls_; std::vector<GURL>* const observed_aborted_urls_; base::Optional<bool>* is_first_navigation_in_web_contents_;
diff --git a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h index ee48b812..18c7f00 100644 --- a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h +++ b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h
@@ -59,7 +59,7 @@ return observed_aborted_urls_; } - const std::vector<mojom::PageLoadFeatures>& observed_features() const { + const std::vector<blink::UseCounterFeature>& observed_features() const { return observed_features_; } @@ -89,7 +89,7 @@ std::vector<GURL> observed_aborted_urls_; std::vector<ExtraRequestCompleteInfo> loaded_resources_; std::vector<GURL> completed_filtered_urls_; - std::vector<mojom::PageLoadFeatures> observed_features_; + std::vector<blink::UseCounterFeature> observed_features_; base::Optional<bool> is_first_navigation_in_web_contents_; bool is_ntp_ = false; int count_on_enter_back_forward_cache_ = 0;
diff --git a/components/page_load_metrics/common/BUILD.gn b/components/page_load_metrics/common/BUILD.gn index 3067a47..0979dbc 100644 --- a/components/page_load_metrics/common/BUILD.gn +++ b/components/page_load_metrics/common/BUILD.gn
@@ -46,8 +46,10 @@ public_deps = [ "//mojo/public/mojom/base", "//third_party/blink/public/mojom:mobile_metrics", - "//third_party/blink/public/mojom:web_feature_mojo_bindings", + "//third_party/blink/public/mojom:mojom_platform", "//ui/gfx/geometry/mojom", "//url/mojom:url_mojom_origin", ] + overridden_deps = [ "//third_party/blink/public/mojom:mojom_platform" ] + component_deps = [ "//third_party/blink/public/common" ] }
diff --git a/components/page_load_metrics/common/page_load_metrics.mojom b/components/page_load_metrics/common/page_load_metrics.mojom index 1d8c2b9d..0d22e5e 100644 --- a/components/page_load_metrics/common/page_load_metrics.mojom +++ b/components/page_load_metrics/common/page_load_metrics.mojom
@@ -10,7 +10,7 @@ import "third_party/blink/public/mojom/web_feature/web_feature.mojom"; import "third_party/blink/public/mojom/mobile_metrics/mobile_friendliness.mojom"; -import "third_party/blink/public/mojom/use_counter/css_property_id.mojom"; +import "third_party/blink/public/mojom/use_counter/use_counter_feature.mojom"; import "url/mojom/origin.mojom"; // TimeDeltas below relative to navigation start. @@ -185,17 +185,6 @@ FrameIntersectionUpdate? intersection_update; }; -// PageLoadFeatures contains a list of features newly observed by use counter. -// In a given page load, no PageLoadFeatures sent will contain previously seen -// values. -struct PageLoadFeatures { - // These features are defined as blink::mojom::WebFeature enums. - array<blink.mojom.WebFeature> features; - // CSS properties are defined as blink::mojom::CSSSampleId enums. - array<blink.mojom.CSSSampleId> css_properties; - array<blink.mojom.CSSSampleId> animated_css_properties; -}; - // Enumeration of distinct cache types. enum CacheType { kNotCached, // Resource came from network. @@ -343,7 +332,8 @@ // Only called when at least one change has been observed within the frame. UpdateTiming(PageLoadTiming page_load_timing, FrameMetadata frame_metadata, - PageLoadFeatures new_features, + // `new_features` will not contain any previously seen values. + array<blink.mojom.UseCounterFeature> new_features, array<ResourceDataUpdate> resources, FrameRenderDataUpdate render_data, CpuTiming cpu_load_timing,
diff --git a/components/page_load_metrics/renderer/fake_page_timing_sender.cc b/components/page_load_metrics/renderer/fake_page_timing_sender.cc index 10249c0..23e52f6 100644 --- a/components/page_load_metrics/renderer/fake_page_timing_sender.cc +++ b/components/page_load_metrics/renderer/fake_page_timing_sender.cc
@@ -20,7 +20,7 @@ void FakePageTimingSender::SendTiming( const mojom::PageLoadTimingPtr& timing, const mojom::FrameMetadataPtr& metadata, - mojom::PageLoadFeaturesPtr new_features, + const std::vector<blink::UseCounterFeature>& new_features, std::vector<mojom::ResourceDataUpdatePtr> resources, const mojom::FrameRenderDataUpdate& render_data, const mojom::CpuTimingPtr& cpu_timing, @@ -137,7 +137,7 @@ void FakePageTimingSender::PageTimingValidator::UpdateTiming( const mojom::PageLoadTimingPtr& timing, const mojom::FrameMetadataPtr& metadata, - const mojom::PageLoadFeaturesPtr& new_features, + const std::vector<blink::UseCounterFeature>& new_features, const std::vector<mojom::ResourceDataUpdatePtr>& resources, const mojom::FrameRenderDataUpdate& render_data, const mojom::CpuTimingPtr& cpu_timing, @@ -148,36 +148,10 @@ if (!cpu_timing->task_time.is_zero()) { actual_cpu_timings_.push_back(cpu_timing.Clone()); } - for (const blink::mojom::WebFeature web_feature : new_features->features) { - blink::UseCounterFeature feature = { - blink::mojom::UseCounterFeatureType::kWebFeature, - static_cast<uint32_t>(web_feature)}; - + for (const blink::UseCounterFeature& feature : new_features) { EXPECT_EQ(actual_features_.find(feature), actual_features_.end()) - << "Feature " << web_feature << "has been sent more than once"; - actual_features_.insert(feature); - } - - for (const blink::mojom::CSSSampleId css_property : - new_features->css_properties) { - blink::UseCounterFeature feature = { - blink::mojom::UseCounterFeatureType::kCssProperty, - static_cast<uint32_t>(css_property)}; - - EXPECT_EQ(actual_features_.find(feature), actual_features_.end()) - << "Feature " << css_property << "has been sent more than once"; - actual_features_.insert(feature); - } - - for (const blink::mojom::CSSSampleId animated_css_property : - new_features->animated_css_properties) { - blink::UseCounterFeature feature = { - blink::mojom::UseCounterFeatureType::kAnimatedCssProperty, - static_cast<uint32_t>(animated_css_property)}; - - EXPECT_EQ(actual_features_.find(feature), actual_features_.end()) - << "Feature " << animated_css_property - << "has been sent more than once"; + << "Feature " << feature.type() << ": " << feature.value() + << " has been sent more than once"; actual_features_.insert(feature); }
diff --git a/components/page_load_metrics/renderer/fake_page_timing_sender.h b/components/page_load_metrics/renderer/fake_page_timing_sender.h index c9095f47..51eb8ec 100644 --- a/components/page_load_metrics/renderer/fake_page_timing_sender.h +++ b/components/page_load_metrics/renderer/fake_page_timing_sender.h
@@ -96,7 +96,7 @@ void UpdateTiming( const mojom::PageLoadTimingPtr& timing, const mojom::FrameMetadataPtr& metadata, - const mojom::PageLoadFeaturesPtr& new_features, + const std::vector<blink::UseCounterFeature>& new_features, const std::vector<mojom::ResourceDataUpdatePtr>& resources, const mojom::FrameRenderDataUpdate& render_data, const mojom::CpuTimingPtr& cpu_timing, @@ -127,7 +127,7 @@ void SendTiming( const mojom::PageLoadTimingPtr& timing, const mojom::FrameMetadataPtr& metadata, - mojom::PageLoadFeaturesPtr new_features, + const std::vector<blink::UseCounterFeature>& new_features, std::vector<mojom::ResourceDataUpdatePtr> resources, const mojom::FrameRenderDataUpdate& render_data, const mojom::CpuTimingPtr& cpu_timing,
diff --git a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc index 17feba7..c22e3a8ca 100644 --- a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc +++ b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc
@@ -52,7 +52,7 @@ void SendTiming( const mojom::PageLoadTimingPtr& timing, const mojom::FrameMetadataPtr& metadata, - mojom::PageLoadFeaturesPtr new_features, + const std::vector<blink::UseCounterFeature>& new_features, std::vector<mojom::ResourceDataUpdatePtr> resources, const mojom::FrameRenderDataUpdate& render_data, const mojom::CpuTimingPtr& cpu_timing, @@ -62,7 +62,7 @@ DCHECK(page_load_metrics_); page_load_metrics_->UpdateTiming( limited_sending_mode_ ? CreatePageLoadTiming() : timing->Clone(), - metadata->Clone(), std::move(new_features), std::move(resources), + metadata->Clone(), new_features, std::move(resources), render_data.Clone(), cpu_timing->Clone(), std::move(new_deferred_resource_data), std::move(input_timing_delta), std::move(mobile_friendliness));
diff --git a/components/page_load_metrics/renderer/page_timing_metrics_sender.cc b/components/page_load_metrics/renderer/page_timing_metrics_sender.cc index a8b85fc0..df81919 100644 --- a/components/page_load_metrics/renderer/page_timing_metrics_sender.cc +++ b/components/page_load_metrics/renderer/page_timing_metrics_sender.cc
@@ -45,7 +45,6 @@ last_cpu_timing_(mojom::CpuTiming::New()), input_timing_delta_(mojom::InputTiming::New()), metadata_(mojom::FrameMetadata::New()), - new_features_(mojom::PageLoadFeatures::New()), new_deferred_resource_data_(mojom::DeferredResourceCounts::New()), buffer_timer_delay_ms_(GetBufferTimerDelayMillis(TimerType::kRenderer)), metadata_recorder_(initial_monotonic_timing) { @@ -79,21 +78,7 @@ if (feature_tracker_.TestAndSet(feature)) return; - switch (feature.type()) { - case blink::mojom::UseCounterFeatureType::kWebFeature: - new_features_->features.push_back( - static_cast<blink::mojom::WebFeature>(feature.value())); - break; - case blink::mojom::UseCounterFeatureType::kCssProperty: - new_features_->css_properties.push_back( - static_cast<blink::mojom::CSSSampleId>(feature.value())); - break; - case blink::mojom::UseCounterFeatureType::kAnimatedCssProperty: - new_features_->animated_css_properties.push_back( - static_cast<blink::mojom::CSSSampleId>(feature.value())); - break; - } - + new_features_.push_back(feature); EnsureSendTimer(); } @@ -350,7 +335,7 @@ std::move(input_timing_delta_), mobile_friendliness_); input_timing_delta_ = mojom::InputTiming::New(); new_deferred_resource_data_ = mojom::DeferredResourceCounts::New(); - new_features_ = mojom::PageLoadFeatures::New(); + new_features_.clear(); metadata_->intersection_update.reset(); last_cpu_timing_->task_time = base::TimeDelta(); modified_resources_.clear();
diff --git a/components/page_load_metrics/renderer/page_timing_metrics_sender.h b/components/page_load_metrics/renderer/page_timing_metrics_sender.h index d0ce58d..0dc53c1 100644 --- a/components/page_load_metrics/renderer/page_timing_metrics_sender.h +++ b/components/page_load_metrics/renderer/page_timing_metrics_sender.h
@@ -111,7 +111,7 @@ mojom::FrameMetadataPtr metadata_; // A list of newly observed features during page load, to be sent to the // browser. - mojom::PageLoadFeaturesPtr new_features_; + std::vector<blink::UseCounterFeature> new_features_; mojom::FrameRenderDataUpdate render_data_; mojom::DeferredResourceCountsPtr new_deferred_resource_data_;
diff --git a/components/page_load_metrics/renderer/page_timing_sender.h b/components/page_load_metrics/renderer/page_timing_sender.h index ca7cfa29..124af2e 100644 --- a/components/page_load_metrics/renderer/page_timing_sender.h +++ b/components/page_load_metrics/renderer/page_timing_sender.h
@@ -17,7 +17,7 @@ virtual void SendTiming( const mojom::PageLoadTimingPtr& timing, const mojom::FrameMetadataPtr& metadata, - mojom::PageLoadFeaturesPtr new_features, + const std::vector<blink::UseCounterFeature>& new_features, std::vector<mojom::ResourceDataUpdatePtr> resources, const mojom::FrameRenderDataUpdate& render_data, const mojom::CpuTimingPtr& cpu_timing,
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 953f00f..2531072 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -21745,7 +21745,7 @@ }, { 'name': 'KerberosEnabled', - 'owners': ['file://chrome/browser/chromeos/kerberos/OWNERS', 'fsandrade@chromium.org'], + 'owners': ['file://chrome/browser/ash/kerberos/OWNERS', 'fsandrade@chromium.org'], 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:87-'], @@ -21766,7 +21766,7 @@ }, { 'name': 'KerberosRememberPasswordEnabled', - 'owners': ['file://chrome/browser/chromeos/kerberos/OWNERS', 'tomdobro@chromium.org'], + 'owners': ['file://chrome/browser/ash/kerberos/OWNERS', 'tomdobro@chromium.org'], 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:87-'], @@ -21787,7 +21787,7 @@ }, { 'name': 'KerberosAddAccountsAllowed', - 'owners': ['file://chrome/browser/chromeos/kerberos/OWNERS', 'tomdobro@chromium.org'], + 'owners': ['file://chrome/browser/ash/kerberos/OWNERS', 'tomdobro@chromium.org'], 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:87-'], @@ -21808,7 +21808,7 @@ }, { 'name': 'KerberosAccounts', - 'owners': ['file://chrome/browser/chromeos/kerberos/OWNERS', 'tomdobro@chromium.org'], + 'owners': ['file://chrome/browser/ash/kerberos/OWNERS', 'tomdobro@chromium.org'], 'type': 'dict', 'schema': { 'type': 'array',
diff --git a/components/pref_registry/DIR_METADATA b/components/pref_registry/DIR_METADATA index 1b859d6..e9153b0 100644 --- a/components/pref_registry/DIR_METADATA +++ b/components/pref_registry/DIR_METADATA
@@ -1,5 +1,5 @@ monorail { - component: "UI>Browser>Preferences" + component: "Internals>Preferences" } team_email: "chromium-dev@chromium.org"
diff --git a/components/prefs/DIR_METADATA b/components/prefs/DIR_METADATA index 1b859d6..e9153b0 100644 --- a/components/prefs/DIR_METADATA +++ b/components/prefs/DIR_METADATA
@@ -1,5 +1,5 @@ monorail { - component: "UI>Browser>Preferences" + component: "Internals>Preferences" } team_email: "chromium-dev@chromium.org"
diff --git a/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm b/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm index cf88f696..6958088 100644 --- a/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm +++ b/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm
@@ -65,6 +65,23 @@ @implementation BrowserNativeWidgetWindow +// Prevent detached tabs from glitching when the window is partially offscreen. +// See https://crbug.com/1095717 for details. +// This is easy to get wrong so scope very tightly to only disallow large +// vertical jumps. +- (NSRect)constrainFrameRect:(NSRect)rect toScreen:(NSScreen*)screen { + NSRect proposed = [super constrainFrameRect:rect toScreen:screen]; + // This boils down to: use the small threshold when we're not avoiding a + // Dock on the bottom, and the big threshold otherwise. + static constexpr CGFloat kBigThreshold = 200; + static constexpr CGFloat kSmallThreshold = 50; + const CGFloat yDelta = NSMaxY(proposed) - NSMaxY(rect); + if (yDelta > kBigThreshold || + (yDelta > kSmallThreshold && NSMinY(proposed) == 0)) + return rect; + return proposed; +} + // NSWindow (PrivateAPI) overrides. + (Class)frameViewClassForStyleMask:(NSUInteger)windowStyle {
diff --git a/components/remote_cocoa/app_shim/window_move_loop.h b/components/remote_cocoa/app_shim/window_move_loop.h index cb92808c..1a3f6c6 100644 --- a/components/remote_cocoa/app_shim/window_move_loop.h +++ b/components/remote_cocoa/app_shim/window_move_loop.h
@@ -9,7 +9,6 @@ #include "base/callback.h" #include "base/memory/weak_ptr.h" -#include "ui/gfx/mac/scoped_cocoa_disable_screen_updates.h" namespace remote_cocoa { class NativeWidgetNSWindowBridge; @@ -43,8 +42,6 @@ LoopExitReason* exit_reason_ref_ = nullptr; base::OnceClosure quit_closure_; - std::unique_ptr<gfx::ScopedCocoaDisableScreenUpdates> screen_disabler_; - // WeakPtrFactory for event monitor safety. base::WeakPtrFactory<CocoaWindowMoveLoop> weak_factory_;
diff --git a/components/remote_cocoa/app_shim/window_move_loop.mm b/components/remote_cocoa/app_shim/window_move_loop.mm index ff510a4..dea9ab6 100644 --- a/components/remote_cocoa/app_shim/window_move_loop.mm +++ b/components/remote_cocoa/app_shim/window_move_loop.mm
@@ -3,7 +3,6 @@ // found in the LICENSE file. #include "components/remote_cocoa/app_shim/window_move_loop.h" -#include <memory> #include "base/debug/stack_trace.h" #include "base/run_loop.h" @@ -81,9 +80,6 @@ [[[WeakCocoaWindowMoveLoop alloc] initWithWeakPtr:weak_factory_.GetWeakPtr()] autorelease]; - __block BOOL has_moved = NO; - screen_disabler_ = std::make_unique<gfx::ScopedCocoaDisableScreenUpdates>(); - // Esc keypress is handled by EscapeTracker, which is installed by // TabDragController. NSEventMask mask = @@ -108,11 +104,8 @@ NSRect ns_frame = NSOffsetRect( initial_frame, mouse_in_screen.x - initial_mouse_in_screen_.x, mouse_in_screen.y - initial_mouse_in_screen_.y); + ns_frame = [window constrainFrameRect:ns_frame toScreen:window.screen]; [window setFrame:ns_frame display:NO animate:NO]; - if (!has_moved) { - has_moved = YES; - strong->screen_disabler_.reset(); - } return event; } @@ -143,7 +136,6 @@ } void CocoaWindowMoveLoop::End() { - screen_disabler_.reset(); if (exit_reason_ref_) { DCHECK_EQ(*exit_reason_ref_, ENDED_EXTERNALLY); // Ensure the destructor doesn't replace the reason.
diff --git a/components/services/app_service/app_service_impl.cc b/components/services/app_service/app_service_impl.cc index e719df4..57cb52e 100644 --- a/components/services/app_service/app_service_impl.cc +++ b/components/services/app_service/app_service_impl.cc
@@ -376,11 +376,11 @@ return; } - preferred_apps_.DeleteAppId(app_id); + if (preferred_apps_.DeleteAppId(app_id)) { + WriteToJSON(profile_dir_, preferred_apps_); + } LogPreferredAppUpdateAction(PreferredAppsUpdateAction::kDeleteForAppId); - - WriteToJSON(profile_dir_, preferred_apps_); } void AppServiceImpl::RemovePreferredAppForFilter( @@ -396,12 +396,12 @@ return; } - preferred_apps_.DeletePreferredApp(app_id, intent_filter); + if (preferred_apps_.DeletePreferredApp(app_id, intent_filter)) { + WriteToJSON(profile_dir_, preferred_apps_); - WriteToJSON(profile_dir_, preferred_apps_); - - for (auto& subscriber : subscribers_) { - subscriber->OnPreferredAppRemoved(app_id, intent_filter->Clone()); + for (auto& subscriber : subscribers_) { + subscriber->OnPreferredAppRemoved(app_id, intent_filter->Clone()); + } } LogPreferredAppUpdateAction(PreferredAppsUpdateAction::kDeleteForFilter);
diff --git a/components/services/app_service/public/cpp/preferred_apps_list.cc b/components/services/app_service/public/cpp/preferred_apps_list.cc index 8c6eb10..131daaa 100644 --- a/components/services/app_service/public/cpp/preferred_apps_list.cc +++ b/components/services/app_service/public/cpp/preferred_apps_list.cc
@@ -68,32 +68,38 @@ return replaced_app_preferences; } -void PreferredAppsList::DeletePreferredApp( +bool PreferredAppsList::DeletePreferredApp( const std::string& app_id, const apps::mojom::IntentFilterPtr& intent_filter) { // Go through the list and see if there are overlapped intent filters with the // same app id in the list. If there are, delete the entry. + bool found = false; auto iter = preferred_apps_.begin(); while (iter != preferred_apps_.end()) { if ((*iter)->app_id == app_id && apps_util::FiltersHaveOverlap((*iter)->intent_filter, intent_filter)) { + found = true; iter = preferred_apps_.erase(iter); } else { iter++; } } + return found; } -void PreferredAppsList::DeleteAppId(const std::string& app_id) { +bool PreferredAppsList::DeleteAppId(const std::string& app_id) { + bool found = false; auto iter = preferred_apps_.begin(); // Go through the list and delete the entry with requested app_id. while (iter != preferred_apps_.end()) { if ((*iter)->app_id == app_id) { + found = true; iter = preferred_apps_.erase(iter); } else { iter++; } } + return found; } void PreferredAppsList::Init() {
diff --git a/components/services/app_service/public/cpp/preferred_apps_list.h b/components/services/app_service/public/cpp/preferred_apps_list.h index b3989e8..7961ea75 100644 --- a/components/services/app_service/public/cpp/preferred_apps_list.h +++ b/components/services/app_service/public/cpp/preferred_apps_list.h
@@ -43,11 +43,13 @@ const apps::mojom::IntentFilterPtr& intent_filter); // Delete a preferred app for an |intent_filter| with the same |app_id|. - void DeletePreferredApp(const std::string& app_id, + // Returns |true| if |app_id| was found in the list of preferred apps. + bool DeletePreferredApp(const std::string& app_id, const apps::mojom::IntentFilterPtr& intent_filter); // Delete all settings for an |app_id|. - void DeleteAppId(const std::string& app_id); + // Returns |true| if |app_id| was found in the list of preferred apps. + bool DeleteAppId(const std::string& app_id); // Initialize the preferred app with empty list or existing |preferred_apps|; void Init();
diff --git a/components/sync_preferences/DIR_METADATA b/components/sync_preferences/DIR_METADATA index 8c96537a..ce059d2 100644 --- a/components/sync_preferences/DIR_METADATA +++ b/components/sync_preferences/DIR_METADATA
@@ -1,5 +1,5 @@ monorail { - component: "UI>Browser>Preferences" + component: "Internals>Preferences" } team_email: "chromium-reviews@chromium.org"
diff --git a/components/user_prefs/DIR_METADATA b/components/user_prefs/DIR_METADATA index 1b859d6..e9153b0 100644 --- a/components/user_prefs/DIR_METADATA +++ b/components/user_prefs/DIR_METADATA
@@ -1,5 +1,5 @@ monorail { - component: "UI>Browser>Preferences" + component: "Internals>Preferences" } team_email: "chromium-dev@chromium.org"
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index 221851be..397567a 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -1086,6 +1086,11 @@ RunAriaTest(FILE_PATH_LITERAL("aria-owns-list.html")); } +IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, + AccessibilityAriaOwnsWithRoleChange) { + RunAriaTest(FILE_PATH_LITERAL("aria-owns-with-role-change.html")); +} + IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilityAriaMath) { RunAriaTest(FILE_PATH_LITERAL("aria-math.html")); }
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc index db9bd93c..bfd6e8d 100644 --- a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc +++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
@@ -34,7 +34,7 @@ RenderFrameHost* render_frame_host = RenderFrameHost::FromID(render_process_id, render_frame_id); - if (render_frame_host) + if (render_frame_host && render_frame_host->IsRenderFrameCreated()) render_frame_host->GetRemoteInterfaces()->GetInterface(std::move(receiver)); }
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index 286a23e..775e9bd 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -4317,6 +4317,9 @@ // happen even if `this` RenderFrameHostImpl has not pushed any NetworkService // factories to the renderer process (DevTools is agnostic to this). void RenderFrameHostImpl::UpdateSubresourceLoaderFactories() { + // Disregard this if frame is being destroyed. + if (!frame_) + return; NavigationRequest* latest_nav_request_still_committing = FindLatestNavigationRequestThatIsStillCommitting(); mojo::PendingRemote<network::mojom::URLLoaderFactory> default_factory_remote;
diff --git a/content/browser/screen_orientation/screen_orientation_browsertest.cc b/content/browser/screen_orientation/screen_orientation_browsertest.cc index bc6f576..a04b859 100644 --- a/content/browser/screen_orientation/screen_orientation_browsertest.cc +++ b/content/browser/screen_orientation/screen_orientation_browsertest.cc
@@ -7,11 +7,13 @@ #include "base/command_line.h" #include "base/macros.h" #include "base/strings/stringprintf.h" +#include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "content/browser/renderer_host/frame_tree.h" #include "content/browser/renderer_host/render_frame_host_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" +#include "content/browser/screen_orientation/screen_orientation_provider.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_view.h" @@ -21,11 +23,13 @@ #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" +#include "content/public/test/prerender_test_util.h" #include "content/public/test/test_navigation_observer.h" #include "content/public/test/test_utils.h" #include "content/shell/browser/shell.h" #include "content/shell/common/shell_switches.h" #include "net/dns/mock_host_resolver.h" +#include "third_party/blink/public/common/features.h" #include "ui/compositor/compositor_switches.h" #include "ui/display/screen.h" @@ -416,4 +420,88 @@ } #endif // OS_ANDROID +class ScreenOrientationLockForPrerenderBrowserTest + : public ScreenOrientationBrowserTest { + public: + ScreenOrientationLockForPrerenderBrowserTest() + : prerender_helper_(base::BindRepeating( + &ScreenOrientationLockForPrerenderBrowserTest::web_contents, + base::Unretained(this))) { + feature_list_.InitAndEnableFeature(blink::features::kPrerender2); + } + void SetUpOnMainThread() override { + prerender_helper_.SetUpOnMainThread(embedded_test_server()); + ScreenOrientationBrowserTest::SetUpOnMainThread(); + } + + content::WebContents* web_contents() { return shell()->web_contents(); } + + protected: + test::PrerenderTestHelper prerender_helper_; + base::test::ScopedFeatureList feature_list_; +}; + +class FakeScreenOrientationDelegate : public ScreenOrientationDelegate { + public: + FakeScreenOrientationDelegate() { + ScreenOrientationProvider::SetDelegate(this); + } + + ~FakeScreenOrientationDelegate() override = default; + + bool FullScreenRequired(WebContents* web_contents) override { return false; } + + bool ScreenOrientationProviderSupported() override { return true; } + + void Lock( + WebContents* web_contents, + device::mojom::ScreenOrientationLockType lock_orientation) override { + lock_count_++; + } + + void Unlock(WebContents* web_contents) override { unlock_count_++; } + + int lock_count() const { return lock_count_; } + int unlock_count() const { return unlock_count_; } + + private: + int lock_count_ = 0; + int unlock_count_ = 0; +}; + +// Unlock should not triggered the orientation upon the completion of a +// non-primary navigation. +IN_PROC_BROWSER_TEST_F(ScreenOrientationLockForPrerenderBrowserTest, + ShouldNotUnlockWhenPrerenderNavigation) { + FakeScreenOrientationDelegate delegate; + + ASSERT_TRUE(embedded_test_server()->Start()); + + // Navigate to a site. + GURL initial_url = + embedded_test_server()->GetURL("/prerender/add_prerender.html"); + NavigateToURLBlockUntilNavigationsComplete(shell(), initial_url, 1); + + EXPECT_TRUE(ExecuteScript(web_contents()->GetMainFrame(), + "screen.orientation.lock('portrait')")); + + // Delegate did apply lock once. + EXPECT_EQ(1, delegate.lock_count()); + EXPECT_EQ(0, delegate.unlock_count()); + + GURL prerender_url = embedded_test_server()->GetURL("/title2.html"); + + // Prerender to another site. + prerender_helper_.AddPrerender(prerender_url); + + // Delegate should not apply unlock. + EXPECT_EQ(0, delegate.unlock_count()); + + // Navigate to the prerendered site. + prerender_helper_.NavigatePrimaryPage(prerender_url); + + // Delegate did apply unlock once. + EXPECT_EQ(1, delegate.unlock_count()); +} + } // namespace content
diff --git a/content/browser/screen_orientation/screen_orientation_provider.cc b/content/browser/screen_orientation/screen_orientation_provider.cc index 5931de5c..7ce9170 100644 --- a/content/browser/screen_orientation/screen_orientation_provider.cc +++ b/content/browser/screen_orientation/screen_orientation_provider.cc
@@ -139,7 +139,7 @@ void ScreenOrientationProvider::DidFinishNavigation( NavigationHandle* navigation_handle) { - if (!navigation_handle->IsInMainFrame() || + if (!navigation_handle->IsInPrimaryMainFrame() || !navigation_handle->HasCommitted() || navigation_handle->IsSameDocument()) { return;
diff --git a/content/test/data/accessibility/aria/aria-owns-with-role-change-expected-blink.txt b/content/test/data/accessibility/aria/aria-owns-with-role-change-expected-blink.txt new file mode 100644 index 0000000..7e34101 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-owns-with-role-change-expected-blink.txt
@@ -0,0 +1,9 @@ +rootWebArea +++genericContainer ignored +++++genericContainer ignored +++++++region name='Stuff' +++++++++staticText name='Text' +++++++++++inlineTextBox name='Text' +++++++++button name='Button' +++++++++++staticText name='Button' +++++++++++++inlineTextBox name='Button'
diff --git a/content/test/data/accessibility/aria/aria-owns-with-role-change.html b/content/test/data/accessibility/aria/aria-owns-with-role-change.html new file mode 100644 index 0000000..339bacb --- /dev/null +++ b/content/test/data/accessibility/aria/aria-owns-with-role-change.html
@@ -0,0 +1,16 @@ +<!-- +@WAIT-FOR:region +--> +<div id="owner" role="doc-glossary" aria-owns="owned" aria-label="Stuff"> + Text +</div> +<div id="owned" role="button">Button</div> + +<script> +document.addEventListener('DOMContentLoaded', () => { + setTimeout(() => { + document.getElementById('owner').role = 'doc-toc'; + document.getElementById('owner').role = 'region'; + }, 50); +}); +</script>
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index e1f705e..f6d5805 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1614,6 +1614,7 @@ ENTERPRISEREPORTINGPRIVATE_GETCERTIFICATE = 1551, AUTOTESTPRIVATE_ISSYSTEMWEBAPPOPENFUNCTION = 1552, TTSENGINE_SENDTTSAUDIO = 1553, + AUTOTESTPRIVATE_ACTIVATEAPPWINDOW = 1554, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/infra/config/generated/commit-queue.cfg b/infra/config/generated/commit-queue.cfg index 16251c5..7b86e12 100644 --- a/infra/config/generated/commit-queue.cfg +++ b/infra/config/generated/commit-queue.cfg
@@ -1327,7 +1327,7 @@ } builders { name: "chromium/try/linux_chromium_tsan_rel_ng_bionic" - experiment_percentage: 10 + experiment_percentage: 40 location_regexp: ".*" location_regexp_exclude: ".+/[+]/docs/.+" location_regexp_exclude: ".+/[+]/infra/config/.+"
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md index 5a3b9ee..9da134f 100644 --- a/infra/config/generated/cq-builders.md +++ b/infra/config/generated/cq-builders.md
@@ -450,5 +450,5 @@ * Experiment percentage: 5.0 * [linux_chromium_tsan_rel_ng_bionic](https://ci.chromium.org/p/chromium/builders/try/linux_chromium_tsan_rel_ng_bionic) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+linux_chromium_tsan_rel_ng_bionic)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+linux_chromium_tsan_rel_ng_bionic)) - * Experiment percentage: 10.0 + * Experiment percentage: 40.0
diff --git a/infra/config/subprojects/chromium/try.star b/infra/config/subprojects/chromium/try.star index 25f69a4b..150a5ed 100644 --- a/infra/config/subprojects/chromium/try.star +++ b/infra/config/subprojects/chromium/try.star
@@ -1428,7 +1428,7 @@ os = os.LINUX_BIONIC, main_list_view = "try", tryjob = try_.job( - experiment_percentage = 10, + experiment_percentage = 40, ), )
diff --git a/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm b/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm index 3198580..fa8769e 100644 --- a/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm +++ b/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm
@@ -167,7 +167,7 @@ ios::FakeChromeIdentityService::GetInstanceFromChromeProvider(); identity_service->AddManagedIdentities(@[ @"Name" ]); ChromeIdentity* identity = - identity_service->GetAllIdentitiesSortedForDisplay().firstObject; + identity_service->GetAllIdentitiesSortedForDisplay(nullptr).firstObject; auth_service_->SignIn(identity); ASSERT_TRUE(auth_service_->GetAuthenticatedIdentity());
diff --git a/ios/chrome/browser/infobars/infobar_utils.h b/ios/chrome/browser/infobars/infobar_utils.h index b91430b..af4824f 100644 --- a/ios/chrome/browser/infobars/infobar_utils.h +++ b/ios/chrome/browser/infobars/infobar_utils.h
@@ -14,7 +14,6 @@ } // Returns a confirm infobar that owns |delegate|. -// Visible for testing. std::unique_ptr<infobars::InfoBar> CreateConfirmInfoBar( std::unique_ptr<ConfirmInfoBarDelegate> delegate);
diff --git a/ios/chrome/browser/policy/reporting/profile_report_generator_ios_unittest.mm b/ios/chrome/browser/policy/reporting/profile_report_generator_ios_unittest.mm index 6909f0c..8c988dc 100644 --- a/ios/chrome/browser/policy/reporting/profile_report_generator_ios_unittest.mm +++ b/ios/chrome/browser/policy/reporting/profile_report_generator_ios_unittest.mm
@@ -94,7 +94,8 @@ ios::FakeChromeIdentityService::GetInstanceFromChromeProvider(); identityService->AddIdentities(@[ base::SysUTF8ToNSString(kAccount) ]); ChromeIdentity* identity = - [identityService->GetAllIdentitiesSortedForDisplay() objectAtIndex:0]; + [identityService->GetAllIdentitiesSortedForDisplay(nullptr) + objectAtIndex:0]; authentication_service_->SignIn(identity); }
diff --git a/ios/chrome/browser/signin/authentication_service_unittest.mm b/ios/chrome/browser/signin/authentication_service_unittest.mm index 210455d..c9d390c 100644 --- a/ios/chrome/browser/signin/authentication_service_unittest.mm +++ b/ios/chrome/browser/signin/authentication_service_unittest.mm
@@ -167,7 +167,7 @@ } ChromeIdentity* identity(NSUInteger index) { - return [identity_service()->GetAllIdentitiesSortedForDisplay() + return [identity_service()->GetAllIdentitiesSortedForDisplay(nullptr) objectAtIndex:index]; } @@ -688,4 +688,4 @@ // Attempt to sign in, and verify there is a crash. EXPECT_CHECK_DEATH(authentication_service()->SignIn(identity(0))); -} \ No newline at end of file +}
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm b/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm index 617e82ef..8732644 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm +++ b/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm
@@ -51,10 +51,10 @@ ios::FakeChromeIdentityService* identityService = ios::FakeChromeIdentityService::GetInstanceFromChromeProvider(); identityService->AddIdentities(@[ @"identity1", @"identity2" ]); - identity1_ = - [identityService->GetAllIdentitiesSortedForDisplay() objectAtIndex:0]; - identity2_ = - [identityService->GetAllIdentitiesSortedForDisplay() objectAtIndex:1]; + identity1_ = [identityService->GetAllIdentitiesSortedForDisplay(nullptr) + objectAtIndex:0]; + identity2_ = [identityService->GetAllIdentitiesSortedForDisplay(nullptr) + objectAtIndex:1]; sign_in_completion_ = ^(BOOL success) { finished_ = true; signed_in_success_ = success;
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm index 5b3da17..513cd7e 100644 --- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm +++ b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm
@@ -16,6 +16,7 @@ #import "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/infobars/infobar_ios.h" #include "ios/chrome/browser/infobars/infobar_manager_impl.h" +#include "ios/chrome/browser/infobars/infobar_utils.h" #include "ios/chrome/browser/signin/authentication_service.h" #include "ios/chrome/browser/signin/authentication_service_factory.h" #import "ios/chrome/browser/ui/commands/show_signin_command.h" @@ -54,7 +55,7 @@ ReSignInInfoBarDelegate::CreateInfoBarDelegate(browser_state, presenter); if (!delegate) return nullptr; - return infobar_manager->CreateConfirmInfoBar(std::move(delegate)); + return CreateConfirmInfoBar(std::move(delegate)); } // static
diff --git a/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller_unittest.mm b/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller_unittest.mm index 6138c7e..393a014 100644 --- a/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller_unittest.mm
@@ -39,8 +39,8 @@ ios::FakeChromeIdentityService::GetInstanceFromChromeProvider(); identity_service->AddIdentities( @[ @"identity1", @"identity2", @"identity3" ]); - auth_service_->SignIn( - [identity_service->GetAllIdentitiesSortedForDisplay() objectAtIndex:0]); + auth_service_->SignIn([identity_service->GetAllIdentitiesSortedForDisplay( + nullptr) objectAtIndex:0]); } protected:
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm b/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm index 2ef4246f4..220416c 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm +++ b/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm
@@ -190,7 +190,7 @@ signin::SetCurrentVersionForTesting(&version_5_0); NSArray* allIdentities = ios::FakeChromeIdentityService::GetInstanceFromChromeProvider() - ->GetAllIdentities(); + ->GetAllIdentities(nullptr); ChromeIdentity* foo1Identity = nil; for (ChromeIdentity* identity in allIdentities) { if ([identity.userFullName isEqualToString:newAccountGaiaId]) {
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn index 1ac5a84e..b41af2fa0 100644 --- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -132,6 +132,7 @@ "content_suggestions_consumer.h", "content_suggestions_data_sink.h", "content_suggestions_data_source.h", + "content_suggestions_header_commands.h", "content_suggestions_header_controlling.h", "content_suggestions_header_provider.h", "content_suggestions_header_synchronizer.h",
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm index 1a8c00a..7f0ad22a 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm
@@ -49,6 +49,7 @@ #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_action_handler.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_data_sink.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_commands.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.h" @@ -98,6 +99,7 @@ @interface ContentSuggestionsCoordinator () < ContentSuggestionsActionHandler, + ContentSuggestionsHeaderCommands, ContentSuggestionsMenuProvider, ContentSuggestionsViewControllerAudience, DiscoverFeedDelegate, @@ -201,6 +203,7 @@ static_cast<id<ApplicationCommands, BrowserCommands, OmniboxCommands, FakeboxFocuser>>(self.browser->GetCommandDispatcher()); self.headerController.commandHandler = self.ntpMediator; + self.headerController.headerCommandHandler = self; self.headerController.delegate = self.ntpMediator; self.headerController.readingListModel = @@ -606,6 +609,12 @@ } } +#pragma mark - ContentSuggestionsHeaderCommands + +- (void)updateForHeaderSizeChange { + [self.ntpCommandHandler updateDiscoverFeedLayout]; +} + #pragma mark - ContentSuggestionsActionHandler - (void)loadMoreFeedArticles {
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_commands.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_commands.h new file mode 100644 index 0000000..75c3f04 --- /dev/null +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_commands.h
@@ -0,0 +1,18 @@ +// Copyright 2021 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 IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_COMMANDS_H_ +#define IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_COMMANDS_H_ + +// Commands protocol allowing the ContentSuggestionsHeaderViewController to +// interact with the coordinator layer. +@protocol ContentSuggestionsHeaderCommands + +// Informs the receiver that the ContentSuggestionsHeaderViewController's size +// has changed. +- (void)updateForHeaderSizeChange; + +@end + +#endif // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_COMMANDS_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h index 29e93cbb..9cf8f62 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h
@@ -16,6 +16,7 @@ @protocol BrowserCommands; @protocol ContentSuggestionsCollectionSynchronizing; @protocol ContentSuggestionsCommands; +@protocol ContentSuggestionsHeaderCommands; @protocol ContentSuggestionsHeaderViewControllerDelegate; @protocol FakeboxFocuser; @protocol NewTabPageControllerDelegate; @@ -42,7 +43,11 @@ dispatcher; @property(nonatomic, weak) id<ContentSuggestionsHeaderViewControllerDelegate> delegate; +// TODO(crbug.com/1200303): Remove this and use instead +// ContentSuggestionsHeaderCommands. @property(nonatomic, weak) id<ContentSuggestionsCommands> commandHandler; +@property(nonatomic, weak) id<ContentSuggestionsHeaderCommands> + headerCommandHandler; @property(nonatomic, assign) ReadingListModel* readingListModel; @property(nonatomic, weak) id<NewTabPageControllerDelegate> toolbarDelegate;
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm index 5ab52126..45288ce 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
@@ -18,6 +18,7 @@ #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_synchronizing.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_commands.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller_delegate.h" #import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h" @@ -693,6 +694,7 @@ setConstant:content_suggestions::doodleHeight(self.logoVendor.showingLogo, doodleShowing, self.traitCollection)]; + [self.headerCommandHandler updateForHeaderSizeChange]; } #pragma mark - NTPHomeConsumer
diff --git a/ios/chrome/browser/ui/infobars/BUILD.gn b/ios/chrome/browser/ui/infobars/BUILD.gn index 79b1f58..1b8108b 100644 --- a/ios/chrome/browser/ui/infobars/BUILD.gn +++ b/ios/chrome/browser/ui/infobars/BUILD.gn
@@ -194,6 +194,7 @@ deps = [ "//base", "//components/infobars/core", + "//ios/chrome/browser/infobars", ] }
diff --git a/ios/chrome/browser/ui/infobars/test/BUILD.gn b/ios/chrome/browser/ui/infobars/test/BUILD.gn index 9c522b51..8d5b36e 100644 --- a/ios/chrome/browser/ui/infobars/test/BUILD.gn +++ b/ios/chrome/browser/ui/infobars/test/BUILD.gn
@@ -16,6 +16,7 @@ "//components/autofill/core/common", "//components/infobars/core", "//components/password_manager/core/browser:test_support", + "//ios/chrome/browser/infobars", "//ios/chrome/browser/passwords:infobar_delegates", "//ios/chrome/browser/passwords:public", "//ios/chrome/browser/ui/infobars:infobars_ui",
diff --git a/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm b/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm index a3ba65da..cde8f78e 100644 --- a/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm +++ b/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm
@@ -12,6 +12,7 @@ #include "components/password_manager/core/browser/password_form_manager_for_ui.h" #include "components/password_manager/core/browser/stub_form_saver.h" #include "components/password_manager/core/browser/stub_password_manager_client.h" +#include "ios/chrome/browser/infobars/infobar_utils.h" #include "testing/gmock/include/gmock/gmock.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -86,8 +87,8 @@ bool TestInfobarPasswordDelegate::Create( infobars::InfoBarManager* infobar_manager) { DCHECK(infobar_manager); - return !!infobar_manager->AddInfoBar(infobar_manager->CreateConfirmInfoBar( - std::unique_ptr<ConfirmInfoBarDelegate>(this))); + return !!infobar_manager->AddInfoBar( + CreateConfirmInfoBar(std::unique_ptr<ConfirmInfoBarDelegate>(this))); } TestInfobarPasswordDelegate::InfoBarIdentifier
diff --git a/ios/chrome/browser/ui/infobars/test_infobar_delegate.mm b/ios/chrome/browser/ui/infobars/test_infobar_delegate.mm index 53abf60..cc9be26 100644 --- a/ios/chrome/browser/ui/infobars/test_infobar_delegate.mm +++ b/ios/chrome/browser/ui/infobars/test_infobar_delegate.mm
@@ -6,6 +6,7 @@ #include "base/strings/sys_string_conversions.h" #include "components/infobars/core/infobar.h" +#include "ios/chrome/browser/infobars/infobar_utils.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -16,8 +17,8 @@ bool TestInfoBarDelegate::Create(infobars::InfoBarManager* infobar_manager) { DCHECK(infobar_manager); - return !!infobar_manager->AddInfoBar(infobar_manager->CreateConfirmInfoBar( - std::unique_ptr<ConfirmInfoBarDelegate>(this))); + return !!infobar_manager->AddInfoBar( + CreateConfirmInfoBar(std::unique_ptr<ConfirmInfoBarDelegate>(this))); } TestInfoBarDelegate::InfoBarIdentifier TestInfoBarDelegate::GetIdentifier()
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm index 52e474dd..b9ff4a3 100644 --- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm +++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm
@@ -90,7 +90,7 @@ ChromeIdentity* fake_identity() { return [ios::FakeChromeIdentityService::GetInstanceFromChromeProvider() - ->GetAllIdentities() firstObject]; + ->GetAllIdentities(nullptr) firstObject]; } protected:
diff --git a/ios/chrome/browser/ui/settings/passphrase_table_view_controller_test.mm b/ios/chrome/browser/ui/settings/passphrase_table_view_controller_test.mm index 5664dee..7301bd4 100644 --- a/ios/chrome/browser/ui/settings/passphrase_table_view_controller_test.mm +++ b/ios/chrome/browser/ui/settings/passphrase_table_view_controller_test.mm
@@ -100,7 +100,8 @@ ios::FakeChromeIdentityService::GetInstanceFromChromeProvider(); identityService->AddIdentities(@[ @"identity1" ]); ChromeIdentity* identity = - [identityService->GetAllIdentitiesSortedForDisplay() objectAtIndex:0]; + [identityService->GetAllIdentitiesSortedForDisplay(nullptr) + objectAtIndex:0]; AuthenticationServiceFactory::GetForBrowserState(chrome_browser_state_.get()) ->SignIn(identity); }
diff --git a/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm b/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm index b8eae71..9fef0f33 100644 --- a/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm +++ b/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm
@@ -18,6 +18,7 @@ #include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_service_utils.h" #import "ios/chrome/browser/browser_state/chrome_browser_state.h" +#include "ios/chrome/browser/infobars/infobar_utils.h" #include "ios/chrome/browser/sync/profile_sync_service_factory.h" #include "ios/chrome/browser/sync/sync_setup_service.h" #include "ios/chrome/browser/sync/sync_setup_service_factory.h" @@ -36,7 +37,7 @@ std::unique_ptr<ConfirmInfoBarDelegate> delegate( new SyncErrorInfoBarDelegate(browser_state, presenter)); return !!infobar_manager->AddInfoBar( - infobar_manager->CreateConfirmInfoBar(std::move(delegate))); + CreateConfirmInfoBar(std::move(delegate))); } SyncErrorInfoBarDelegate::SyncErrorInfoBarDelegate( @@ -128,9 +129,8 @@ if (infobar_manager) { std::unique_ptr<ConfirmInfoBarDelegate> new_infobar_delegate( new SyncErrorInfoBarDelegate(browser_state_, presenter_)); - infobar_manager->ReplaceInfoBar(infobar, - infobar_manager->CreateConfirmInfoBar( - std::move(new_infobar_delegate))); + infobar_manager->ReplaceInfoBar( + infobar, CreateConfirmInfoBar(std::move(new_infobar_delegate))); } } }
diff --git a/ios/chrome/browser/upgrade/BUILD.gn b/ios/chrome/browser/upgrade/BUILD.gn index 78c57b32..e7f8af95 100644 --- a/ios/chrome/browser/upgrade/BUILD.gn +++ b/ios/chrome/browser/upgrade/BUILD.gn
@@ -16,6 +16,7 @@ "//components/infobars/core", "//components/version_info", "//ios/chrome/app/strings", + "//ios/chrome/browser/infobars", "//ios/chrome/browser/ui/commands", "//ios/web/common", "//net",
diff --git a/ios/chrome/browser/upgrade/upgrade_center.mm b/ios/chrome/browser/upgrade/upgrade_center.mm index f1466da..2a374b7 100644 --- a/ios/chrome/browser/upgrade/upgrade_center.mm +++ b/ios/chrome/browser/upgrade/upgrade_center.mm
@@ -16,6 +16,7 @@ #include "components/infobars/core/infobar.h" #include "components/infobars/core/infobar_manager.h" #include "components/version_info/version_info.h" +#include "ios/chrome/browser/infobars/infobar_utils.h" #import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/open_new_tab_command.h" #import "ios/chrome/browser/upgrade/upgrade_constants.h" @@ -312,8 +313,7 @@ tabId:tabId]; [_upgradeInfoBarDelegates setObject:delegateHolder forKey:tabId]; - infoBarManager->AddInfoBar( - infoBarManager->CreateConfirmInfoBar(std::move(infobarDelegate))); + infoBarManager->AddInfoBar(CreateConfirmInfoBar(std::move(infobarDelegate))); } - (void)tabWillClose:(NSString*)tabId {
diff --git a/ios/public/provider/chrome/browser/signin/chrome_identity_service.h b/ios/public/provider/chrome/browser/signin/chrome_identity_service.h index c274341..52691bb 100644 --- a/ios/public/provider/chrome/browser/signin/chrome_identity_service.h +++ b/ios/public/provider/chrome/browser/signin/chrome_identity_service.h
@@ -23,6 +23,7 @@ @class NSError; @class NSString; @class NSURL; +class PrefService; @class UIApplication; @class UIImage; @class UINavigationController; @@ -165,13 +166,25 @@ virtual bool HasIdentities(); // Returns all ChromeIdentity objects in an array. + // Deprecated. See GetAllIdentities(prefService). virtual NSArray* GetAllIdentities(); + // Returns all ChromeIdentity objects in an array.It uses PrefService to + // filter ChromeIdentities according to enterprise policies. + virtual NSArray* GetAllIdentities(PrefService* pref_service); + // Returns all ChromeIdentity objects sorted by the ordering used in the // account manager, which is typically based on the keychain ordering of // accounts. + // Deprecated. See GetAllIdentitiesSortedForDisplay(prefService). virtual NSArray* GetAllIdentitiesSortedForDisplay(); + // Returns all ChromeIdentity objects sorted by the ordering used in the + // account manager, which is typically based on the keychain ordering of + // accounts.It uses PrefService to filter ChromeIdentities according to + // enterprise policies. + virtual NSArray* GetAllIdentitiesSortedForDisplay(PrefService* pref_service); + // Forgets the given identity on the device. This method logs the user out. // It is asynchronous because it needs to contact the server to revoke the // authentication token.
diff --git a/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm b/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm index 9a7f8dd..193c21c 100644 --- a/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm +++ b/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm
@@ -74,10 +74,19 @@ } NSArray* ChromeIdentityService::GetAllIdentities() { + return GetAllIdentities(nullptr); +} + +NSArray* ChromeIdentityService::GetAllIdentities(PrefService* pref_service) { return nil; } NSArray* ChromeIdentityService::GetAllIdentitiesSortedForDisplay() { + return GetAllIdentitiesSortedForDisplay(nullptr); +} + +NSArray* ChromeIdentityService::GetAllIdentitiesSortedForDisplay( + PrefService* pref_service) { return nil; }
diff --git a/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h b/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h index c9f40ec..118b83c1 100644 --- a/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h +++ b/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h
@@ -38,8 +38,8 @@ bool IsValidIdentity(ChromeIdentity* identity) override; ChromeIdentity* GetIdentityWithGaiaID(const std::string& gaia_id) override; bool HasIdentities() override; - NSArray* GetAllIdentities() override; - NSArray* GetAllIdentitiesSortedForDisplay() override; + NSArray* GetAllIdentities(PrefService* pref_service) override; + NSArray* GetAllIdentitiesSortedForDisplay(PrefService* pref_service) override; void ForgetIdentity(ChromeIdentity* identity, ForgetIdentityCallback callback) override;
diff --git a/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm b/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm index 739c73c..f378512 100644 --- a/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm +++ b/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm
@@ -194,11 +194,13 @@ return [identities_ count] > 0; } -NSArray* FakeChromeIdentityService::GetAllIdentities() { +NSArray* FakeChromeIdentityService::GetAllIdentities( + PrefService* pref_service) { return identities_; } -NSArray* FakeChromeIdentityService::GetAllIdentitiesSortedForDisplay() { +NSArray* FakeChromeIdentityService::GetAllIdentitiesSortedForDisplay( + PrefService* prefService) { return identities_; }
diff --git a/media/gpu/v4l2/BUILD.gn b/media/gpu/v4l2/BUILD.gn index 32cc30e..2a4df79 100644 --- a/media/gpu/v4l2/BUILD.gn +++ b/media/gpu/v4l2/BUILD.gn
@@ -37,8 +37,6 @@ "v4l2_device_poller.h", "v4l2_h264_accelerator.cc", "v4l2_h264_accelerator.h", - "v4l2_h264_accelerator_chromium.cc", - "v4l2_h264_accelerator_chromium.h", "v4l2_h264_accelerator_legacy.cc", "v4l2_h264_accelerator_legacy.h", "v4l2_image_processor_backend.cc",
diff --git a/media/gpu/v4l2/v4l2_h264_accelerator.cc b/media/gpu/v4l2/v4l2_h264_accelerator.cc index 5afa0cd..7c97840 100644 --- a/media/gpu/v4l2/v4l2_h264_accelerator.cc +++ b/media/gpu/v4l2/v4l2_h264_accelerator.cc
@@ -44,32 +44,6 @@ DISALLOW_COPY_AND_ASSIGN(V4L2H264Picture); }; -// static -bool V4L2H264Accelerator::SupportsUpstreamABI(V4L2Device* device) { - struct v4l2_querymenu qmenu; - - // This accelerator currently supports frame-based decoding only. Print an - // error at runtime if we try to use it with a slice-based decoder. - memset(&qmenu, 0, sizeof(qmenu)); - qmenu.id = V4L2_CID_STATELESS_H264_DECODE_MODE; - qmenu.index = V4L2_STATELESS_H264_DECODE_MODE_FRAME_BASED; - - if (device->Ioctl(VIDIOC_QUERYMENU, &qmenu) < 0) { - switch (errno) { - case EINVAL: - VLOGF(1) - << "This decoder does not support the frame-based stateless API"; - return false; - default: - VPLOGF(1) << "Error while checking for H264_DECODE_MODE control"; - return false; - } - } - - VLOGF(1) << "This decoder supports the frame-based stateless API"; - return true; -} - V4L2H264Accelerator::V4L2H264Accelerator( V4L2DecodeSurfaceHandler* surface_handler, V4L2Device* device)
diff --git a/media/gpu/v4l2/v4l2_h264_accelerator.h b/media/gpu/v4l2/v4l2_h264_accelerator.h index beb0940a..38b90b1 100644 --- a/media/gpu/v4l2/v4l2_h264_accelerator.h +++ b/media/gpu/v4l2/v4l2_h264_accelerator.h
@@ -24,10 +24,6 @@ public: using Status = H264Decoder::H264Accelerator::Status; - // Checks whether drivers support the upstream ABI or whether we should - // fallback to the V4L2ChromeH264Accelerator. - static bool SupportsUpstreamABI(V4L2Device* device); - explicit V4L2H264Accelerator(V4L2DecodeSurfaceHandler* surface_handler, V4L2Device* device); ~V4L2H264Accelerator() override;
diff --git a/media/gpu/v4l2/v4l2_h264_accelerator_chromium.cc b/media/gpu/v4l2/v4l2_h264_accelerator_chromium.cc deleted file mode 100644 index 672cc7f..0000000 --- a/media/gpu/v4l2/v4l2_h264_accelerator_chromium.cc +++ /dev/null
@@ -1,491 +0,0 @@ -// 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. - -#include "media/gpu/v4l2/v4l2_h264_accelerator_chromium.h" - -// TODO(987856): prevent legacy headers being included from videodev2.h until -// v4.14 -// support is deprecated. -#define _H264_CTRLS_LEGACY_H_ - -#include <linux/media/h264-ctrls.h> -#include <linux/videodev2.h> -#include <type_traits> - -#include "base/logging.h" -#include "base/stl_util.h" -#include "media/gpu/macros.h" -#include "media/gpu/v4l2/v4l2_decode_surface.h" -#include "media/gpu/v4l2/v4l2_decode_surface_handler.h" -#include "media/gpu/v4l2/v4l2_device.h" - -namespace media { - -// This struct contains the kernel-specific parts of the H264 acceleration, -// that we don't want to expose in the .h file since they may differ from -// upstream. -struct V4L2H264AcceleratorPrivate { - // TODO(posciak): This should be queried from hardware once supported. - static constexpr size_t kMaxSlices = 16; - - struct v4l2_ctrl_h264_slice_params v4l2_slice_params[kMaxSlices]; - struct v4l2_ctrl_h264_decode_params v4l2_decode_param; -}; - -class V4L2H264Picture : public H264Picture { - public: - explicit V4L2H264Picture(scoped_refptr<V4L2DecodeSurface> dec_surface) - : dec_surface_(std::move(dec_surface)) {} - - V4L2H264Picture* AsV4L2H264Picture() override { return this; } - scoped_refptr<V4L2DecodeSurface> dec_surface() { return dec_surface_; } - - private: - ~V4L2H264Picture() override {} - - scoped_refptr<V4L2DecodeSurface> dec_surface_; - - DISALLOW_COPY_AND_ASSIGN(V4L2H264Picture); -}; - -V4L2ChromiumH264Accelerator::V4L2ChromiumH264Accelerator( - V4L2DecodeSurfaceHandler* surface_handler, - V4L2Device* device) - : num_slices_(0), - surface_handler_(surface_handler), - device_(device), - priv_(std::make_unique<V4L2H264AcceleratorPrivate>()) { - DCHECK(surface_handler_); -} - -V4L2ChromiumH264Accelerator::~V4L2ChromiumH264Accelerator() {} - -scoped_refptr<H264Picture> V4L2ChromiumH264Accelerator::CreateH264Picture() { - scoped_refptr<V4L2DecodeSurface> dec_surface = - surface_handler_->CreateSurface(); - if (!dec_surface) - return nullptr; - - return new V4L2H264Picture(dec_surface); -} - -void V4L2ChromiumH264Accelerator::H264PictureListToDPBIndicesList( - const H264Picture::Vector& src_pic_list, - uint8_t dst_list[kDPBIndicesListSize]) { - size_t i; - for (i = 0; i < src_pic_list.size() && i < kDPBIndicesListSize; ++i) { - const H264Picture* pic = (src_pic_list[i]).get(); - dst_list[i] = pic ? pic->dpb_position : VIDEO_MAX_FRAME; - } - - while (i < kDPBIndicesListSize) - dst_list[i++] = VIDEO_MAX_FRAME; -} - -void V4L2ChromiumH264Accelerator::H264DPBToV4L2DPB( - const H264DPB& dpb, - std::vector<scoped_refptr<V4L2DecodeSurface>>* ref_surfaces) { - memset(priv_->v4l2_decode_param.dpb, 0, sizeof(priv_->v4l2_decode_param.dpb)); - size_t i = 0; - for (const auto& pic : dpb) { - if (i >= base::size(priv_->v4l2_decode_param.dpb)) { - VLOGF(1) << "Invalid DPB size"; - break; - } - - int index = VIDEO_MAX_FRAME; - if (!pic->nonexisting) { - scoped_refptr<V4L2DecodeSurface> dec_surface = - H264PictureToV4L2DecodeSurface(pic.get()); - index = dec_surface->GetReferenceID(); - ref_surfaces->push_back(dec_surface); - } - - struct v4l2_h264_dpb_entry& entry = priv_->v4l2_decode_param.dpb[i++]; - entry.reference_ts = index; - entry.frame_num = pic->frame_num; - entry.pic_num = pic->pic_num; - entry.top_field_order_cnt = pic->top_field_order_cnt; - entry.bottom_field_order_cnt = pic->bottom_field_order_cnt; - entry.flags = (pic->ref ? V4L2_H264_DPB_ENTRY_FLAG_ACTIVE : 0) | - (pic->long_term ? V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM : 0); - } -} - -H264Decoder::H264Accelerator::Status V4L2ChromiumH264Accelerator::SubmitFrameMetadata( - const H264SPS* sps, - const H264PPS* pps, - const H264DPB& dpb, - const H264Picture::Vector& ref_pic_listp0, - const H264Picture::Vector& ref_pic_listb0, - const H264Picture::Vector& ref_pic_listb1, - scoped_refptr<H264Picture> pic) { - struct v4l2_ext_control ctrl; - std::vector<struct v4l2_ext_control> ctrls; - - struct v4l2_ctrl_h264_sps v4l2_sps; - memset(&v4l2_sps, 0, sizeof(v4l2_sps)); - v4l2_sps.constraint_set_flags = - (sps->constraint_set0_flag ? V4L2_H264_SPS_CONSTRAINT_SET0_FLAG : 0) | - (sps->constraint_set1_flag ? V4L2_H264_SPS_CONSTRAINT_SET1_FLAG : 0) | - (sps->constraint_set2_flag ? V4L2_H264_SPS_CONSTRAINT_SET2_FLAG : 0) | - (sps->constraint_set3_flag ? V4L2_H264_SPS_CONSTRAINT_SET3_FLAG : 0) | - (sps->constraint_set4_flag ? V4L2_H264_SPS_CONSTRAINT_SET4_FLAG : 0) | - (sps->constraint_set5_flag ? V4L2_H264_SPS_CONSTRAINT_SET5_FLAG : 0); -#define SPS_TO_V4L2SPS(a) v4l2_sps.a = sps->a - SPS_TO_V4L2SPS(profile_idc); - SPS_TO_V4L2SPS(level_idc); - SPS_TO_V4L2SPS(seq_parameter_set_id); - SPS_TO_V4L2SPS(chroma_format_idc); - SPS_TO_V4L2SPS(bit_depth_luma_minus8); - SPS_TO_V4L2SPS(bit_depth_chroma_minus8); - SPS_TO_V4L2SPS(log2_max_frame_num_minus4); - SPS_TO_V4L2SPS(pic_order_cnt_type); - SPS_TO_V4L2SPS(log2_max_pic_order_cnt_lsb_minus4); - SPS_TO_V4L2SPS(offset_for_non_ref_pic); - SPS_TO_V4L2SPS(offset_for_top_to_bottom_field); - SPS_TO_V4L2SPS(num_ref_frames_in_pic_order_cnt_cycle); - - static_assert(std::extent<decltype(v4l2_sps.offset_for_ref_frame)>() == - std::extent<decltype(sps->offset_for_ref_frame)>(), - "offset_for_ref_frame arrays must be same size"); - for (size_t i = 0; i < base::size(v4l2_sps.offset_for_ref_frame); ++i) - v4l2_sps.offset_for_ref_frame[i] = sps->offset_for_ref_frame[i]; - SPS_TO_V4L2SPS(max_num_ref_frames); - SPS_TO_V4L2SPS(pic_width_in_mbs_minus1); - SPS_TO_V4L2SPS(pic_height_in_map_units_minus1); -#undef SPS_TO_V4L2SPS - -#define SET_V4L2_SPS_FLAG_IF(cond, flag) \ - v4l2_sps.flags |= ((sps->cond) ? (flag) : 0) - SET_V4L2_SPS_FLAG_IF(separate_colour_plane_flag, - V4L2_H264_SPS_FLAG_SEPARATE_COLOUR_PLANE); - SET_V4L2_SPS_FLAG_IF(qpprime_y_zero_transform_bypass_flag, - V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS); - SET_V4L2_SPS_FLAG_IF(delta_pic_order_always_zero_flag, - V4L2_H264_SPS_FLAG_DELTA_PIC_ORDER_ALWAYS_ZERO); - SET_V4L2_SPS_FLAG_IF(gaps_in_frame_num_value_allowed_flag, - V4L2_H264_SPS_FLAG_GAPS_IN_FRAME_NUM_VALUE_ALLOWED); - SET_V4L2_SPS_FLAG_IF(frame_mbs_only_flag, V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY); - SET_V4L2_SPS_FLAG_IF(mb_adaptive_frame_field_flag, - V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD); - SET_V4L2_SPS_FLAG_IF(direct_8x8_inference_flag, - V4L2_H264_SPS_FLAG_DIRECT_8X8_INFERENCE); -#undef SET_V4L2_SPS_FLAG_IF - memset(&ctrl, 0, sizeof(ctrl)); - ctrl.id = V4L2_CID_MPEG_VIDEO_H264_SPS; - ctrl.size = sizeof(v4l2_sps); - ctrl.ptr = &v4l2_sps; - ctrls.push_back(ctrl); - - struct v4l2_ctrl_h264_pps v4l2_pps; - memset(&v4l2_pps, 0, sizeof(v4l2_pps)); -#define PPS_TO_V4L2PPS(a) v4l2_pps.a = pps->a - PPS_TO_V4L2PPS(pic_parameter_set_id); - PPS_TO_V4L2PPS(seq_parameter_set_id); - PPS_TO_V4L2PPS(num_slice_groups_minus1); - PPS_TO_V4L2PPS(num_ref_idx_l0_default_active_minus1); - PPS_TO_V4L2PPS(num_ref_idx_l1_default_active_minus1); - PPS_TO_V4L2PPS(weighted_bipred_idc); - PPS_TO_V4L2PPS(pic_init_qp_minus26); - PPS_TO_V4L2PPS(pic_init_qs_minus26); - PPS_TO_V4L2PPS(chroma_qp_index_offset); - PPS_TO_V4L2PPS(second_chroma_qp_index_offset); -#undef PPS_TO_V4L2PPS - -#define SET_V4L2_PPS_FLAG_IF(cond, flag) \ - v4l2_pps.flags |= ((pps->cond) ? (flag) : 0) - SET_V4L2_PPS_FLAG_IF(entropy_coding_mode_flag, - V4L2_H264_PPS_FLAG_ENTROPY_CODING_MODE); - SET_V4L2_PPS_FLAG_IF( - bottom_field_pic_order_in_frame_present_flag, - V4L2_H264_PPS_FLAG_BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT); - SET_V4L2_PPS_FLAG_IF(weighted_pred_flag, V4L2_H264_PPS_FLAG_WEIGHTED_PRED); - SET_V4L2_PPS_FLAG_IF(deblocking_filter_control_present_flag, - V4L2_H264_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT); - SET_V4L2_PPS_FLAG_IF(constrained_intra_pred_flag, - V4L2_H264_PPS_FLAG_CONSTRAINED_INTRA_PRED); - SET_V4L2_PPS_FLAG_IF(redundant_pic_cnt_present_flag, - V4L2_H264_PPS_FLAG_REDUNDANT_PIC_CNT_PRESENT); - SET_V4L2_PPS_FLAG_IF(transform_8x8_mode_flag, - V4L2_H264_PPS_FLAG_TRANSFORM_8X8_MODE); - SET_V4L2_PPS_FLAG_IF(pic_scaling_matrix_present_flag, - V4L2_H264_PPS_FLAG_PIC_SCALING_MATRIX_PRESENT); -#undef SET_V4L2_PPS_FLAG_IF - memset(&ctrl, 0, sizeof(ctrl)); - ctrl.id = V4L2_CID_MPEG_VIDEO_H264_PPS; - ctrl.size = sizeof(v4l2_pps); - ctrl.ptr = &v4l2_pps; - ctrls.push_back(ctrl); - - struct v4l2_ctrl_h264_scaling_matrix v4l2_scaling_matrix; - memset(&v4l2_scaling_matrix, 0, sizeof(v4l2_scaling_matrix)); - - static_assert( - std::extent<decltype(v4l2_scaling_matrix.scaling_list_4x4)>() <= - std::extent<decltype(pps->scaling_list4x4)>() && - std::extent<decltype(v4l2_scaling_matrix.scaling_list_4x4[0])>() <= - std::extent<decltype(pps->scaling_list4x4[0])>() && - std::extent<decltype(v4l2_scaling_matrix.scaling_list_8x8)>() <= - std::extent<decltype(pps->scaling_list8x8)>() && - std::extent<decltype(v4l2_scaling_matrix.scaling_list_8x8[0])>() <= - std::extent<decltype(pps->scaling_list8x8[0])>(), - "scaling_lists must be of correct size"); - static_assert( - std::extent<decltype(v4l2_scaling_matrix.scaling_list_4x4)>() <= - std::extent<decltype(sps->scaling_list4x4)>() && - std::extent<decltype(v4l2_scaling_matrix.scaling_list_4x4[0])>() <= - std::extent<decltype(sps->scaling_list4x4[0])>() && - std::extent<decltype(v4l2_scaling_matrix.scaling_list_8x8)>() <= - std::extent<decltype(sps->scaling_list8x8)>() && - std::extent<decltype(v4l2_scaling_matrix.scaling_list_8x8[0])>() <= - std::extent<decltype(sps->scaling_list8x8[0])>(), - "scaling_lists must be of correct size"); - - const auto* scaling_list4x4 = &sps->scaling_list4x4[0]; - const auto* scaling_list8x8 = &sps->scaling_list8x8[0]; - if (pps->pic_scaling_matrix_present_flag) { - scaling_list4x4 = &pps->scaling_list4x4[0]; - scaling_list8x8 = &pps->scaling_list8x8[0]; - } - - for (size_t i = 0; i < base::size(v4l2_scaling_matrix.scaling_list_4x4); - ++i) { - for (size_t j = 0; j < base::size(v4l2_scaling_matrix.scaling_list_4x4[i]); - ++j) { - v4l2_scaling_matrix.scaling_list_4x4[i][j] = scaling_list4x4[i][j]; - } - } - for (size_t i = 0; i < base::size(v4l2_scaling_matrix.scaling_list_8x8); - ++i) { - for (size_t j = 0; j < base::size(v4l2_scaling_matrix.scaling_list_8x8[i]); - ++j) { - v4l2_scaling_matrix.scaling_list_8x8[i][j] = scaling_list8x8[i][j]; - } - } - - memset(&ctrl, 0, sizeof(ctrl)); - ctrl.id = V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX; - ctrl.size = sizeof(v4l2_scaling_matrix); - ctrl.ptr = &v4l2_scaling_matrix; - ctrls.push_back(ctrl); - - scoped_refptr<V4L2DecodeSurface> dec_surface = - H264PictureToV4L2DecodeSurface(pic.get()); - - struct v4l2_ext_controls ext_ctrls; - memset(&ext_ctrls, 0, sizeof(ext_ctrls)); - ext_ctrls.count = ctrls.size(); - ext_ctrls.controls = &ctrls[0]; - dec_surface->PrepareSetCtrls(&ext_ctrls); - if (device_->Ioctl(VIDIOC_S_EXT_CTRLS, &ext_ctrls) != 0) { - VPLOGF(1) << "ioctl() failed: VIDIOC_S_EXT_CTRLS"; - return Status::kFail; - } - - H264PictureListToDPBIndicesList(ref_pic_listp0, - priv_->v4l2_decode_param.ref_pic_list_p0); - H264PictureListToDPBIndicesList(ref_pic_listb0, - priv_->v4l2_decode_param.ref_pic_list_b0); - H264PictureListToDPBIndicesList(ref_pic_listb1, - priv_->v4l2_decode_param.ref_pic_list_b1); - - std::vector<scoped_refptr<V4L2DecodeSurface>> ref_surfaces; - H264DPBToV4L2DPB(dpb, &ref_surfaces); - dec_surface->SetReferenceSurfaces(ref_surfaces); - - return Status::kOk; -} - -H264Decoder::H264Accelerator::Status V4L2ChromiumH264Accelerator::SubmitSlice( - const H264PPS* pps, - const H264SliceHeader* slice_hdr, - const H264Picture::Vector& ref_pic_list0, - const H264Picture::Vector& ref_pic_list1, - scoped_refptr<H264Picture> pic, - const uint8_t* data, - size_t size, - const std::vector<SubsampleEntry>& subsamples) { - if (num_slices_ == priv_->kMaxSlices) { - VLOGF(1) << "Over limit of supported slices per frame"; - return Status::kFail; - } - - struct v4l2_ctrl_h264_slice_params& v4l2_slice_param = - priv_->v4l2_slice_params[num_slices_++]; - memset(&v4l2_slice_param, 0, sizeof(v4l2_slice_param)); - - v4l2_slice_param.size = size; -#define SHDR_TO_V4L2SPARM(a) v4l2_slice_param.a = slice_hdr->a - SHDR_TO_V4L2SPARM(header_bit_size); - SHDR_TO_V4L2SPARM(first_mb_in_slice); - SHDR_TO_V4L2SPARM(slice_type); - SHDR_TO_V4L2SPARM(pic_parameter_set_id); - SHDR_TO_V4L2SPARM(colour_plane_id); - SHDR_TO_V4L2SPARM(frame_num); - SHDR_TO_V4L2SPARM(idr_pic_id); - SHDR_TO_V4L2SPARM(pic_order_cnt_lsb); - SHDR_TO_V4L2SPARM(delta_pic_order_cnt_bottom); - SHDR_TO_V4L2SPARM(delta_pic_order_cnt0); - SHDR_TO_V4L2SPARM(delta_pic_order_cnt1); - SHDR_TO_V4L2SPARM(redundant_pic_cnt); - SHDR_TO_V4L2SPARM(dec_ref_pic_marking_bit_size); - SHDR_TO_V4L2SPARM(cabac_init_idc); - SHDR_TO_V4L2SPARM(slice_qp_delta); - SHDR_TO_V4L2SPARM(slice_qs_delta); - SHDR_TO_V4L2SPARM(disable_deblocking_filter_idc); - SHDR_TO_V4L2SPARM(slice_alpha_c0_offset_div2); - SHDR_TO_V4L2SPARM(slice_beta_offset_div2); - SHDR_TO_V4L2SPARM(num_ref_idx_l0_active_minus1); - SHDR_TO_V4L2SPARM(num_ref_idx_l1_active_minus1); - SHDR_TO_V4L2SPARM(pic_order_cnt_bit_size); -#undef SHDR_TO_V4L2SPARM - -#define SET_V4L2_SPARM_FLAG_IF(cond, flag) \ - v4l2_slice_param.flags |= ((slice_hdr->cond) ? (flag) : 0) - SET_V4L2_SPARM_FLAG_IF(field_pic_flag, V4L2_H264_SLICE_FLAG_FIELD_PIC); - SET_V4L2_SPARM_FLAG_IF(bottom_field_flag, V4L2_H264_SLICE_FLAG_BOTTOM_FIELD); - SET_V4L2_SPARM_FLAG_IF(direct_spatial_mv_pred_flag, - V4L2_H264_SLICE_FLAG_DIRECT_SPATIAL_MV_PRED); - SET_V4L2_SPARM_FLAG_IF(sp_for_switch_flag, - V4L2_H264_SLICE_FLAG_SP_FOR_SWITCH); -#undef SET_V4L2_SPARM_FLAG_IF - - struct v4l2_h264_pred_weight_table* pred_weight_table = - &v4l2_slice_param.pred_weight_table; - - if (((slice_hdr->IsPSlice() || slice_hdr->IsSPSlice()) && - pps->weighted_pred_flag) || - (slice_hdr->IsBSlice() && pps->weighted_bipred_idc == 1)) { - pred_weight_table->luma_log2_weight_denom = - slice_hdr->luma_log2_weight_denom; - pred_weight_table->chroma_log2_weight_denom = - slice_hdr->chroma_log2_weight_denom; - - struct v4l2_h264_weight_factors* factorsl0 = - &pred_weight_table->weight_factors[0]; - - for (int i = 0; i < 32; ++i) { - factorsl0->luma_weight[i] = - slice_hdr->pred_weight_table_l0.luma_weight[i]; - factorsl0->luma_offset[i] = - slice_hdr->pred_weight_table_l0.luma_offset[i]; - - for (int j = 0; j < 2; ++j) { - factorsl0->chroma_weight[i][j] = - slice_hdr->pred_weight_table_l0.chroma_weight[i][j]; - factorsl0->chroma_offset[i][j] = - slice_hdr->pred_weight_table_l0.chroma_offset[i][j]; - } - } - - if (slice_hdr->IsBSlice()) { - struct v4l2_h264_weight_factors* factorsl1 = - &pred_weight_table->weight_factors[1]; - - for (int i = 0; i < 32; ++i) { - factorsl1->luma_weight[i] = - slice_hdr->pred_weight_table_l1.luma_weight[i]; - factorsl1->luma_offset[i] = - slice_hdr->pred_weight_table_l1.luma_offset[i]; - - for (int j = 0; j < 2; ++j) { - factorsl1->chroma_weight[i][j] = - slice_hdr->pred_weight_table_l1.chroma_weight[i][j]; - factorsl1->chroma_offset[i][j] = - slice_hdr->pred_weight_table_l1.chroma_offset[i][j]; - } - } - } - } - - H264PictureListToDPBIndicesList(ref_pic_list0, - v4l2_slice_param.ref_pic_list0); - H264PictureListToDPBIndicesList(ref_pic_list1, - v4l2_slice_param.ref_pic_list1); - - scoped_refptr<V4L2DecodeSurface> dec_surface = - H264PictureToV4L2DecodeSurface(pic.get()); - - priv_->v4l2_decode_param.nal_ref_idc = slice_hdr->nal_ref_idc; - - // TODO(posciak): Don't add start code back here, but have it passed from - // the parser. - size_t data_copy_size = size + 3; - std::unique_ptr<uint8_t[]> data_copy(new uint8_t[data_copy_size]); - memset(data_copy.get(), 0, data_copy_size); - data_copy[2] = 0x01; - memcpy(data_copy.get() + 3, data, size); - return surface_handler_->SubmitSlice(dec_surface.get(), data_copy.get(), - data_copy_size) - ? Status::kOk - : Status::kFail; -} - -H264Decoder::H264Accelerator::Status V4L2ChromiumH264Accelerator::SubmitDecode( - scoped_refptr<H264Picture> pic) { - scoped_refptr<V4L2DecodeSurface> dec_surface = - H264PictureToV4L2DecodeSurface(pic.get()); - - priv_->v4l2_decode_param.num_slices = num_slices_; - if (pic->idr) { - priv_->v4l2_decode_param.flags |= 1; - } - priv_->v4l2_decode_param.top_field_order_cnt = pic->top_field_order_cnt; - priv_->v4l2_decode_param.bottom_field_order_cnt = pic->bottom_field_order_cnt; - - struct v4l2_ext_control ctrl; - std::vector<struct v4l2_ext_control> ctrls; - - memset(&ctrl, 0, sizeof(ctrl)); - ctrl.id = V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS; - ctrl.size = sizeof(priv_->v4l2_slice_params); - ctrl.ptr = priv_->v4l2_slice_params; - ctrls.push_back(ctrl); - - memset(&ctrl, 0, sizeof(ctrl)); - ctrl.id = V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS; - ctrl.size = sizeof(priv_->v4l2_decode_param); - ctrl.ptr = &priv_->v4l2_decode_param; - ctrls.push_back(ctrl); - - struct v4l2_ext_controls ext_ctrls; - memset(&ext_ctrls, 0, sizeof(ext_ctrls)); - ext_ctrls.count = ctrls.size(); - ext_ctrls.controls = &ctrls[0]; - dec_surface->PrepareSetCtrls(&ext_ctrls); - if (device_->Ioctl(VIDIOC_S_EXT_CTRLS, &ext_ctrls) != 0) { - VPLOGF(1) << "ioctl() failed: VIDIOC_S_EXT_CTRLS"; - return Status::kFail; - } - - Reset(); - - DVLOGF(4) << "Submitting decode for surface: " << dec_surface->ToString(); - surface_handler_->DecodeSurface(dec_surface); - return Status::kOk; -} - -bool V4L2ChromiumH264Accelerator::OutputPicture(scoped_refptr<H264Picture> pic) { - // TODO(crbug.com/647725): Insert correct color space. - surface_handler_->SurfaceReady(H264PictureToV4L2DecodeSurface(pic.get()), - pic->bitstream_id(), pic->visible_rect(), - VideoColorSpace()); - return true; -} - -void V4L2ChromiumH264Accelerator::Reset() { - num_slices_ = 0; - memset(&priv_->v4l2_decode_param, 0, sizeof(priv_->v4l2_decode_param)); - memset(&priv_->v4l2_slice_params, 0, sizeof(priv_->v4l2_slice_params)); -} - -scoped_refptr<V4L2DecodeSurface> -V4L2ChromiumH264Accelerator::H264PictureToV4L2DecodeSurface(H264Picture* pic) { - V4L2H264Picture* v4l2_pic = pic->AsV4L2H264Picture(); - CHECK(v4l2_pic); - return v4l2_pic->dec_surface(); -} - -} // namespace media
diff --git a/media/gpu/v4l2/v4l2_h264_accelerator_chromium.h b/media/gpu/v4l2/v4l2_h264_accelerator_chromium.h deleted file mode 100644 index 0e0171f..0000000 --- a/media/gpu/v4l2/v4l2_h264_accelerator_chromium.h +++ /dev/null
@@ -1,78 +0,0 @@ -// 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. - -#ifndef MEDIA_GPU_V4L2_V4L2_H264_ACCELERATOR_CHROMIUM_H_ -#define MEDIA_GPU_V4L2_V4L2_H264_ACCELERATOR_CHROMIUM_H_ - -#include <memory> -#include <vector> - -#include "base/macros.h" -#include "base/memory/scoped_refptr.h" -#include "media/gpu/h264_decoder.h" -#include "media/gpu/h264_dpb.h" - -namespace media { - -class V4L2Device; -class V4L2DecodeSurface; -class V4L2DecodeSurfaceHandler; -struct V4L2H264AcceleratorPrivate; - -// H.264 accelerator supported the old Chromium-only ABI with the kernel. -class V4L2ChromiumH264Accelerator : public H264Decoder::H264Accelerator { - public: - using Status = H264Decoder::H264Accelerator::Status; - - explicit V4L2ChromiumH264Accelerator(V4L2DecodeSurfaceHandler* surface_handler, - V4L2Device* device); - ~V4L2ChromiumH264Accelerator() override; - - // H264Decoder::H264Accelerator implementation. - scoped_refptr<H264Picture> CreateH264Picture() override; - Status SubmitFrameMetadata(const H264SPS* sps, - const H264PPS* pps, - const H264DPB& dpb, - const H264Picture::Vector& ref_pic_listp0, - const H264Picture::Vector& ref_pic_listb0, - const H264Picture::Vector& ref_pic_listb1, - scoped_refptr<H264Picture> pic) override; - Status SubmitSlice(const H264PPS* pps, - const H264SliceHeader* slice_hdr, - const H264Picture::Vector& ref_pic_list0, - const H264Picture::Vector& ref_pic_list1, - scoped_refptr<H264Picture> pic, - const uint8_t* data, - size_t size, - const std::vector<SubsampleEntry>& subsamples) override; - Status SubmitDecode(scoped_refptr<H264Picture> pic) override; - bool OutputPicture(scoped_refptr<H264Picture> pic) override; - void Reset() override; - - private: - // Max size of reference list. - static constexpr size_t kDPBIndicesListSize = 32; - - void H264PictureListToDPBIndicesList(const H264Picture::Vector& src_pic_list, - uint8_t dst_list[kDPBIndicesListSize]); - void H264DPBToV4L2DPB( - const H264DPB& dpb, - std::vector<scoped_refptr<V4L2DecodeSurface>>* ref_surfaces); - scoped_refptr<V4L2DecodeSurface> H264PictureToV4L2DecodeSurface( - H264Picture* pic); - - size_t num_slices_; - V4L2DecodeSurfaceHandler* const surface_handler_; - V4L2Device* const device_; - - // Contains the kernel-specific structures that we don't want to expose - // outside of the compilation unit. - const std::unique_ptr<V4L2H264AcceleratorPrivate> priv_; - - DISALLOW_COPY_AND_ASSIGN(V4L2ChromiumH264Accelerator); -}; - -} // namespace media - -#endif // MEDIA_GPU_V4L2_V4L2_H264_ACCELERATOR_CHROMIUM_H_
diff --git a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc index 4698cd9..2c300b33 100644 --- a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc +++ b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
@@ -41,7 +41,6 @@ #include "media/gpu/macros.h" #include "media/gpu/v4l2/v4l2_decode_surface.h" #include "media/gpu/v4l2/v4l2_h264_accelerator.h" -#include "media/gpu/v4l2/v4l2_h264_accelerator_chromium.h" #include "media/gpu/v4l2/v4l2_h264_accelerator_legacy.h" #include "media/gpu/v4l2/v4l2_image_processor_backend.h" #include "media/gpu/v4l2/v4l2_utils.h" @@ -297,14 +296,9 @@ if (video_profile_ >= H264PROFILE_MIN && video_profile_ <= H264PROFILE_MAX) { if (supports_requests_) { - if (V4L2H264Accelerator::SupportsUpstreamABI(device_.get())) - decoder_ = std::make_unique<H264Decoder>( - std::make_unique<V4L2H264Accelerator>(this, device_.get()), - video_profile_); - else - decoder_ = std::make_unique<H264Decoder>( - std::make_unique<V4L2ChromiumH264Accelerator>(this, device_.get()), - video_profile_); + decoder_ = std::make_unique<H264Decoder>( + std::make_unique<V4L2H264Accelerator>(this, device_.get()), + video_profile_); } else { decoder_ = std::make_unique<H264Decoder>( std::make_unique<V4L2LegacyH264Accelerator>(this, device_.get()),
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc b/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc index f65f9ea..81b55ff3 100644 --- a/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc +++ b/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc
@@ -23,7 +23,6 @@ #include "media/gpu/macros.h" #include "media/gpu/v4l2/v4l2_device.h" #include "media/gpu/v4l2/v4l2_h264_accelerator.h" -#include "media/gpu/v4l2/v4l2_h264_accelerator_chromium.h" #include "media/gpu/v4l2/v4l2_h264_accelerator_legacy.h" #include "media/gpu/v4l2/v4l2_vp8_accelerator.h" #include "media/gpu/v4l2/v4l2_vp8_accelerator_legacy.h" @@ -647,14 +646,8 @@ if (profile_ >= H264PROFILE_MIN && profile_ <= H264PROFILE_MAX) { if (input_queue_->SupportsRequests()) { - std::unique_ptr<H264Decoder::H264Accelerator> accelerator; - if (V4L2H264Accelerator::SupportsUpstreamABI(device_.get())) - accelerator = - std::make_unique<V4L2H264Accelerator>(this, device_.get()); - else - accelerator = - std::make_unique<V4L2ChromiumH264Accelerator>(this, device_.get()); - avd_ = std::make_unique<H264Decoder>(std::move(accelerator), profile_); + avd_ = std::make_unique<H264Decoder>( + std::make_unique<V4L2H264Accelerator>(this, device_.get()), profile_); } else { avd_ = std::make_unique<H264Decoder>( std::make_unique<V4L2LegacyH264Accelerator>(this, device_.get()),
diff --git a/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc b/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc index 2042890..311da8e 100644 --- a/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc +++ b/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
@@ -80,7 +80,6 @@ SyncResponseInfo() = default; Message message; - bool cancelled = false; bool received = false; base::WaitableEvent event{base::WaitableEvent::ResetPolicy::MANUAL, base::WaitableEvent::InitialState::NOT_SIGNALED}; @@ -101,10 +100,8 @@ ~SyncResponseSignaler() override { // If Accept() was not called we must still notify the waiter that the // sync call is finished. - if (response_) { - response_->cancelled = true; + if (response_) response_->event.Signal(); - } } bool Accept(Message* message) override { @@ -388,14 +385,16 @@ // In the common case where interrupts are allowed, we watch cooperatively // with other potential endpoints on the same thread. SyncCallRestrictions::AssertSyncCallAllowed(); - SyncEventWatcher watcher(&response->event, base::DoNothing()); - const bool* stop_flags[] = {&response->received, &response->cancelled}; + bool signaled = false; + auto set_flag = [](bool* flag) { *flag = true; }; + SyncEventWatcher watcher(&response->event, + base::BindRepeating(set_flag, &signaled)); + const bool* stop_flags[] = {&signaled}; watcher.SyncWatch(stop_flags, base::size(stop_flags)); } else { // Else we can wait on the event directly. It will only signal after our // reply has been processed or cancelled. response->event.Wait(); - DCHECK(response->received || response->cancelled); } {
diff --git a/net/base/url_util.cc b/net/base/url_util.cc index ded072c..f9e2c266 100644 --- a/net/base/url_util.cc +++ b/net/base/url_util.cc
@@ -455,11 +455,6 @@ return false; } -bool IsTLS13ExperimentHost(base::StringPiece host) { - return host == "inbox.google.com" || host == "mail.google.com" || - host == "gmail.com"; -} - bool IsLocalHostname(base::StringPiece host) { std::string normalized_host = base::ToLowerASCII(host); // Remove any trailing '.'.
diff --git a/net/base/url_util.h b/net/base/url_util.h index f35d5f6c..c941957 100644 --- a/net/base/url_util.h +++ b/net/base/url_util.h
@@ -202,10 +202,6 @@ // be used for histograms and shouldn't be used to affect behavior. NET_EXPORT_PRIVATE bool IsGoogleHost(base::StringPiece host); -// This function tests |host| to see if its one used in the initial TLS 1.3 -// deployment. TLS connections to them form the basis of our comparisons. -NET_EXPORT_PRIVATE bool IsTLS13ExperimentHost(base::StringPiece host); - // This function tests |host| to see if it is of any local hostname form. // |host| is normalized before being tested. NET_EXPORT_PRIVATE bool IsLocalHostname(base::StringPiece host);
diff --git a/net/socket/ssl_connect_job.cc b/net/socket/ssl_connect_job.cc index 0466614..8d67c8cd 100644 --- a/net/socket/ssl_connect_job.cc +++ b/net/socket/ssl_connect_job.cc
@@ -403,7 +403,6 @@ } const std::string& host = params_->host_and_port().host(); - bool tls13_supported = IsTLS13ExperimentHost(host); if (result == OK) { DCHECK(!connect_timing_.ssl_start.is_null()); @@ -439,13 +438,6 @@ ssl_info.key_exchange_group); } - if (tls13_supported) { - UMA_HISTOGRAM_CUSTOM_TIMES("Net.SSL_Connection_Latency_TLS13Experiment", - connect_duration, - base::TimeDelta::FromMilliseconds(1), - base::TimeDelta::FromMinutes(1), 100); - } - // Classify whether the connection required the legacy crypto fallback. if (base::FeatureList::IsEnabled( features::kTLSLegacyCryptoFallbackForMetrics)) { @@ -492,10 +484,6 @@ } base::UmaHistogramSparse("Net.SSL_Connection_Error", std::abs(result)); - if (tls13_supported) { - base::UmaHistogramSparse("Net.SSL_Connection_Error_TLS13Experiment", - std::abs(result)); - } if (result == OK || IsCertificateError(result)) { SetSocket(std::move(ssl_socket_), std::move(dns_aliases_));
diff --git a/services/network/public/cpp/parsed_headers.cc b/services/network/public/cpp/parsed_headers.cc index a75a4ee..5db6782 100644 --- a/services/network/public/cpp/parsed_headers.cc +++ b/services/network/public/cpp/parsed_headers.cc
@@ -5,6 +5,7 @@ #include "services/network/public/cpp/parsed_headers.h" #include "net/http/http_response_headers.h" +#include "services/network/public/cpp/bfcache_opt_in_parser.h" #include "services/network/public/cpp/client_hints.h" #include "services/network/public/cpp/content_security_policy/content_security_policy.h" #include "services/network/public/cpp/cross_origin_embedder_policy_parser.h" @@ -66,6 +67,12 @@ ParseTimingAllowOrigin(timing_allow_origin_value); } + std::string bfcache_opt_in; + if (headers->GetNormalizedHeader("BFCache-Opt-In", &bfcache_opt_in)) { + parsed_headers->bfcache_opt_in_unload = + ParseBFCacheOptInUnload(bfcache_opt_in); + } + return parsed_headers; }
diff --git a/services/network/public/mojom/parsed_headers.mojom b/services/network/public/mojom/parsed_headers.mojom index c32bded..5880187 100644 --- a/services/network/public/mojom/parsed_headers.mojom +++ b/services/network/public/mojom/parsed_headers.mojom
@@ -73,4 +73,8 @@ array<LinkHeader> link_headers; TimingAllowOrigin? timing_allow_origin; + + // Parsed BFCache-Opt-In value. Currently "unload" is the only possible value, + // so record if that's present. + bool bfcache_opt_in_unload = false; };
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json index 5218ff1..ca322b3a2 100644 --- a/testing/buildbot/chrome.json +++ b/testing/buildbot/chrome.json
@@ -16054,6 +16054,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15", "pool": "chrome.tests" }
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index f230bd8..991b2de 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -4675,11 +4675,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.96" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.96", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100", "resultdb": { "enable": true }, @@ -4689,7 +4689,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.96" + "revision": "version:90.0.4430.100" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -4754,11 +4754,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.25" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.27" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.25", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.27", "resultdb": { "enable": true }, @@ -4768,7 +4768,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M91", - "revision": "version:91.0.4472.25" + "revision": "version:91.0.4472.27" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -4912,11 +4912,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.96" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.96", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100", "resultdb": { "enable": true }, @@ -4926,7 +4926,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.96" + "revision": "version:90.0.4430.100" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -4991,11 +4991,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.25" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.27" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.25", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.27", "resultdb": { "enable": true }, @@ -5005,7 +5005,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M91", - "revision": "version:91.0.4472.25" + "revision": "version:91.0.4472.27" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -5155,11 +5155,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.96" + "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.100" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.96", + "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.100", "resultdb": { "enable": true }, @@ -5169,7 +5169,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.96" + "revision": "version:90.0.4430.100" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -5235,11 +5235,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 91.0.4472.25" + "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 91.0.4472.27" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 91.0.4472.25", + "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 91.0.4472.27", "resultdb": { "enable": true }, @@ -5249,7 +5249,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M91", - "revision": "version:91.0.4472.25" + "revision": "version:91.0.4472.27" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -5395,11 +5395,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.96" + "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.100" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.96", + "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.100", "resultdb": { "enable": true }, @@ -5409,7 +5409,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.96" + "revision": "version:90.0.4430.100" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -5475,11 +5475,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 91.0.4472.25" + "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 91.0.4472.27" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 91.0.4472.25", + "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 91.0.4472.27", "resultdb": { "enable": true }, @@ -5489,7 +5489,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M91", - "revision": "version:91.0.4472.25" + "revision": "version:91.0.4472.27" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -5596,6 +5596,7 @@ { "args": [ "--avd-config=../../tools/android/avd/proto/generic_android28.textpb", + "--default-exclude", "--include-file=../../third_party/blink/web_tests/android/WPTSmokeTestCases" ], "isolate_name": "weblayer_shell_wpt",
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index 7194833..073b9a3 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -53951,11 +53951,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.96" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.96", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100", "resultdb": { "enable": true }, @@ -53965,7 +53965,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.96" + "revision": "version:90.0.4430.100" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -54030,11 +54030,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.25" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.27" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.25", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.27", "resultdb": { "enable": true }, @@ -54044,7 +54044,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M91", - "revision": "version:91.0.4472.25" + "revision": "version:91.0.4472.27" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -54188,11 +54188,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.96" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.96", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100", "resultdb": { "enable": true }, @@ -54202,7 +54202,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.96" + "revision": "version:90.0.4430.100" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -54267,11 +54267,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.25" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.27" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.25", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.27", "resultdb": { "enable": true }, @@ -54281,7 +54281,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M91", - "revision": "version:91.0.4472.25" + "revision": "version:91.0.4472.27" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -54492,11 +54492,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.96" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.96", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100", "resultdb": { "enable": true }, @@ -54506,7 +54506,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.96" + "revision": "version:90.0.4430.100" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -54571,11 +54571,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.25" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.27" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.25", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.27", "resultdb": { "enable": true }, @@ -54585,7 +54585,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M91", - "revision": "version:91.0.4472.25" + "revision": "version:91.0.4472.27" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -54729,11 +54729,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.96" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.96", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100", "resultdb": { "enable": true }, @@ -54743,7 +54743,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.96" + "revision": "version:90.0.4430.100" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -54808,11 +54808,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.25" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.27" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.25", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.27", "resultdb": { "enable": true }, @@ -54822,7 +54822,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M91", - "revision": "version:91.0.4472.25" + "revision": "version:91.0.4472.27" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.angle.json b/testing/buildbot/chromium.angle.json index 8d23064d6..a2c25e87 100644 --- a/testing/buildbot/chromium.angle.json +++ b/testing/buildbot/chromium.angle.json
@@ -1374,6 +1374,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1426,6 +1427,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2673,6 +2675,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2700,6 +2703,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2727,6 +2731,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2754,6 +2759,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2781,6 +2787,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2809,6 +2816,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2837,6 +2845,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2863,6 +2872,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2896,6 +2906,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2921,6 +2932,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2962,6 +2974,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2999,6 +3012,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3036,6 +3050,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3073,6 +3088,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3110,6 +3126,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3146,6 +3163,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3179,6 +3197,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3202,6 +3221,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3241,6 +3261,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3276,6 +3297,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3311,6 +3333,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3346,6 +3369,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3381,6 +3405,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3415,6 +3440,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3445,6 +3471,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3470,6 +3497,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3495,6 +3523,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3520,6 +3549,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3545,6 +3575,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3571,6 +3602,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3597,6 +3629,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3621,6 +3654,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -3650,6 +3684,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -3676,6 +3711,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6",
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index 3a1bc82..4e4e0ed 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -26288,6 +26288,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "absl_hardening_tests", @@ -26300,6 +26306,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "accessibility_unittests", @@ -26315,6 +26327,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "angle_unittests", @@ -26328,6 +26346,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "app_shell_unittests", @@ -26340,6 +26364,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_unittests", @@ -26352,6 +26382,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_util_unittests", @@ -26364,6 +26400,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_common_unittests", @@ -26376,6 +26418,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_fuzzer_unittests", @@ -26388,6 +26436,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_heap_unittests", @@ -26400,6 +26454,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_platform_unittests", @@ -26413,6 +26473,12 @@ "name": "webkit_unit_tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_unittests", @@ -26425,6 +26491,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "boringssl_crypto_tests", @@ -26437,6 +26509,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "boringssl_ssl_tests", @@ -26449,6 +26527,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 10 }, @@ -26465,6 +26549,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "capture_unittests", @@ -26477,6 +26567,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cast_unittests", @@ -26489,6 +26585,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cc_unittests", @@ -26501,6 +26603,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "chrome_app_unittests", @@ -26513,6 +26621,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "chromedriver_unittests", @@ -26525,6 +26639,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "color_unittests", @@ -26537,6 +26657,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "components_browsertests", @@ -26549,6 +26675,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "components_unittests", @@ -26561,6 +26693,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 6 }, @@ -26574,6 +26712,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_nocompile_tests", @@ -26586,6 +26730,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_unittests", @@ -26598,6 +26748,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "crashpad_tests", @@ -26610,6 +26766,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cronet_tests", @@ -26622,6 +26784,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cronet_unittests", @@ -26634,6 +26802,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "crypto_unittests", @@ -26646,6 +26820,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "device_unittests", @@ -26658,6 +26838,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "display_unittests", @@ -26670,6 +26856,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "events_unittests", @@ -26682,6 +26874,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "extensions_browsertests", @@ -26694,6 +26892,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "extensions_unittests", @@ -26706,6 +26910,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "filesystem_service_unittests", @@ -26718,6 +26928,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gcm_unit_tests", @@ -26730,6 +26946,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gfx_unittests", @@ -26742,6 +26964,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gin_unittests", @@ -26754,6 +26982,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "google_apis_unittests", @@ -26766,6 +27000,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gpu_unittests", @@ -26778,6 +27018,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gwp_asan_unittests", @@ -26790,6 +27036,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "headless_browsertests", @@ -26802,6 +27054,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "headless_unittests", @@ -26814,6 +27072,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 3 }, @@ -26827,6 +27091,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ipc_tests", @@ -26839,6 +27109,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "jingle_unittests", @@ -26851,6 +27127,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "latency_unittests", @@ -26863,6 +27145,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "libjingle_xmpp_unittests", @@ -26875,6 +27163,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "liburlpattern_unittests", @@ -26887,6 +27181,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "media_blink_unittests", @@ -26899,6 +27199,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "media_unittests", @@ -26911,6 +27217,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "message_center_unittests", @@ -26923,6 +27235,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "midi_unittests", @@ -26935,6 +27253,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "mojo_unittests", @@ -26947,6 +27271,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "nacl_loader_unittests", @@ -26959,6 +27289,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "native_theme_unittests", @@ -26971,6 +27307,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "net_unittests", @@ -26983,6 +27325,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "openscreen_unittests", @@ -26995,6 +27343,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "pdf_unittests", @@ -27007,6 +27361,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "perfetto_unittests", @@ -27019,6 +27379,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ppapi_unittests", @@ -27031,6 +27397,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "printing_unittests", @@ -27043,6 +27415,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "remoting_unittests", @@ -27055,6 +27433,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sandbox_mac_unittests", @@ -27067,6 +27451,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "service_manager_unittests", @@ -27079,6 +27469,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "services_unittests", @@ -27091,6 +27487,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "shell_dialogs_unittests", @@ -27103,6 +27505,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "skia_unittests", @@ -27115,6 +27523,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "snapshot_unittests", @@ -27127,6 +27541,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sql_unittests", @@ -27139,6 +27559,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "storage_unittests", @@ -27151,6 +27577,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sync_integration_tests", @@ -27163,6 +27595,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ui_base_unittests", @@ -27175,6 +27613,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ui_touch_selection_unittests", @@ -27187,6 +27631,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "unit_tests", @@ -27199,6 +27649,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "updater_tests", @@ -27211,6 +27667,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "url_unittests", @@ -27223,6 +27685,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "views_unittests", @@ -27235,6 +27703,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "viz_unittests", @@ -27247,6 +27721,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "wtf_unittests", @@ -27260,6 +27740,12 @@ "name": "xr_browser_tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "xr_browser_tests", @@ -27272,6 +27758,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "zlib_unittests", @@ -27291,6 +27783,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://:blink_python_tests/" @@ -27313,6 +27811,12 @@ "results_handler": "layout tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 12 }, @@ -27329,6 +27833,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://chrome/test:chrome_sizes/" @@ -27348,6 +27858,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://chrome/test/chromedriver:chromedriver_py_tests/" @@ -27361,6 +27877,12 @@ "name": "chromedriver_replay_unittests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://chrome/test/chromedriver:chromedriver_replay_unittests/" @@ -27379,6 +27901,12 @@ "name": "components_perftests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://components:components_perftests/" @@ -27396,6 +27924,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://content/shell:content_shell_crash_test/" @@ -27413,6 +27947,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://third_party/flatbuffers:flatbuffers_unittests/" @@ -27429,6 +27969,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://tools/grit:grit_python_unittests/" @@ -27442,6 +27988,12 @@ "name": "mac_signing_tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://chrome/installer/mac:mac_signing_tests/" @@ -27458,6 +28010,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://tools/metrics:metrics_python_tests/" @@ -27474,6 +28032,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://mojo/public/tools:mojo_python_unittests/" @@ -27490,6 +28054,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "idempotent": false, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, @@ -27510,6 +28080,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "idempotent": false, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 12 @@ -27532,6 +28108,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "idempotent": false, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 8 @@ -27552,6 +28134,12 @@ "name": "views_perftests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://ui/views:views_perftests/" @@ -27574,6 +28162,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://chrome/test:chrome_sizes/" @@ -27595,6 +28189,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "absl_hardening_tests", @@ -27610,6 +28210,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "accessibility_unittests", @@ -27626,6 +28232,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "angle_unittests", @@ -27642,6 +28254,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "app_shell_unittests", @@ -27657,6 +28275,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_unittests", @@ -27672,6 +28296,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_util_unittests", @@ -27687,6 +28317,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_common_unittests", @@ -27702,6 +28338,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_fuzzer_unittests", @@ -27717,6 +28359,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_heap_unittests", @@ -27732,6 +28380,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_platform_unittests", @@ -27748,6 +28402,12 @@ "name": "webkit_unit_tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_unittests", @@ -27763,6 +28423,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "boringssl_crypto_tests", @@ -27778,6 +28444,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "boringssl_ssl_tests", @@ -27793,6 +28465,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 10 }, @@ -27810,6 +28488,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "capture_unittests", @@ -27825,6 +28509,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cast_unittests", @@ -27840,6 +28530,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cc_unittests", @@ -27855,6 +28551,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "chrome_app_unittests", @@ -27870,6 +28572,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "chromedriver_unittests", @@ -27885,6 +28593,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "color_unittests", @@ -27900,6 +28614,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "components_browsertests", @@ -27915,6 +28635,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "components_unittests", @@ -27930,6 +28656,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 6 }, @@ -27946,6 +28678,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_nocompile_tests", @@ -27961,6 +28699,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_unittests", @@ -27976,6 +28720,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "crashpad_tests", @@ -27991,6 +28741,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cronet_tests", @@ -28006,6 +28762,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cronet_unittests", @@ -28021,6 +28783,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "crypto_unittests", @@ -28036,6 +28804,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "device_unittests", @@ -28051,6 +28825,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "display_unittests", @@ -28066,6 +28846,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "events_unittests", @@ -28081,6 +28867,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "extensions_browsertests", @@ -28096,6 +28888,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "extensions_unittests", @@ -28111,6 +28909,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "filesystem_service_unittests", @@ -28126,6 +28930,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gcm_unit_tests", @@ -28141,6 +28951,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gfx_unittests", @@ -28156,6 +28972,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gin_unittests", @@ -28171,6 +28993,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "google_apis_unittests", @@ -28186,6 +29014,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gpu_unittests", @@ -28201,6 +29035,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gwp_asan_unittests", @@ -28216,6 +29056,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "headless_browsertests", @@ -28231,6 +29077,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "headless_unittests", @@ -28246,6 +29098,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 3 }, @@ -28262,6 +29120,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ipc_tests", @@ -28277,6 +29141,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "jingle_unittests", @@ -28292,6 +29162,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "latency_unittests", @@ -28307,6 +29183,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "libjingle_xmpp_unittests", @@ -28322,6 +29204,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "liburlpattern_unittests", @@ -28337,6 +29225,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "media_blink_unittests", @@ -28352,6 +29246,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "media_unittests", @@ -28367,6 +29267,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "message_center_unittests", @@ -28382,6 +29288,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "midi_unittests", @@ -28397,6 +29309,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "mojo_unittests", @@ -28412,6 +29330,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "native_theme_unittests", @@ -28427,6 +29351,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "net_unittests", @@ -28442,6 +29372,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "openscreen_unittests", @@ -28457,6 +29393,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "pdf_unittests", @@ -28472,6 +29414,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "perfetto_unittests", @@ -28487,6 +29435,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ppapi_unittests", @@ -28502,6 +29456,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "printing_unittests", @@ -28517,6 +29477,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "remoting_unittests", @@ -28532,6 +29498,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sandbox_mac_unittests", @@ -28547,6 +29519,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "service_manager_unittests", @@ -28562,6 +29540,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "services_unittests", @@ -28577,6 +29561,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "shell_dialogs_unittests", @@ -28592,6 +29582,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "skia_unittests", @@ -28607,6 +29603,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "snapshot_unittests", @@ -28622,6 +29624,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sql_unittests", @@ -28637,6 +29645,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "storage_unittests", @@ -28652,6 +29666,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sync_integration_tests", @@ -28667,6 +29687,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ui_base_unittests", @@ -28682,6 +29708,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ui_touch_selection_unittests", @@ -28697,6 +29729,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "unit_tests", @@ -28712,6 +29750,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "updater_tests", @@ -28727,6 +29771,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "url_unittests", @@ -28742,6 +29792,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "views_unittests", @@ -28757,6 +29813,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "viz_unittests", @@ -28772,6 +29834,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "wtf_unittests", @@ -28788,6 +29856,12 @@ "name": "xr_browser_tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "xr_browser_tests", @@ -28803,6 +29877,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "zlib_unittests", @@ -28822,6 +29902,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "absl_hardening_tests", @@ -28834,6 +29920,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "accessibility_unittests", @@ -28849,6 +29941,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "angle_unittests", @@ -28862,6 +29960,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "app_shell_unittests", @@ -28874,6 +29978,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_unittests", @@ -28886,6 +29996,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_util_unittests", @@ -28898,6 +30014,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_common_unittests", @@ -28910,6 +30032,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_fuzzer_unittests", @@ -28922,6 +30050,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_heap_unittests", @@ -28934,6 +30068,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_platform_unittests", @@ -28947,6 +30087,12 @@ "name": "webkit_unit_tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_unittests", @@ -28959,6 +30105,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "boringssl_crypto_tests", @@ -28971,6 +30123,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "boringssl_ssl_tests", @@ -28983,6 +30141,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 10 }, @@ -28999,6 +30163,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "capture_unittests", @@ -29011,6 +30181,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cast_unittests", @@ -29023,6 +30199,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cc_unittests", @@ -29035,6 +30217,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "chrome_app_unittests", @@ -29047,6 +30235,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "chromedriver_unittests", @@ -29059,6 +30253,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "color_unittests", @@ -29071,6 +30271,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "components_browsertests", @@ -29083,6 +30289,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "components_unittests", @@ -29095,6 +30307,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 6 }, @@ -29108,6 +30326,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_nocompile_tests", @@ -29120,6 +30344,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_unittests", @@ -29132,6 +30362,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "crashpad_tests", @@ -29144,6 +30380,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cronet_tests", @@ -29156,6 +30398,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cronet_unittests", @@ -29168,6 +30416,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "crypto_unittests", @@ -29180,6 +30434,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "device_unittests", @@ -29192,6 +30452,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "display_unittests", @@ -29204,6 +30470,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "events_unittests", @@ -29216,6 +30488,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "extensions_browsertests", @@ -29228,6 +30506,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "extensions_unittests", @@ -29240,6 +30524,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "filesystem_service_unittests", @@ -29252,6 +30542,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gcm_unit_tests", @@ -29264,6 +30560,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gfx_unittests", @@ -29276,6 +30578,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gin_unittests", @@ -29288,6 +30596,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "google_apis_unittests", @@ -29300,6 +30614,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gpu_unittests", @@ -29312,6 +30632,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gwp_asan_unittests", @@ -29324,6 +30650,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "headless_browsertests", @@ -29336,6 +30668,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "headless_unittests", @@ -29348,6 +30686,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 3 }, @@ -29361,6 +30705,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ipc_tests", @@ -29373,6 +30723,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "jingle_unittests", @@ -29385,6 +30741,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "latency_unittests", @@ -29397,6 +30759,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "libjingle_xmpp_unittests", @@ -29409,6 +30777,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "liburlpattern_unittests", @@ -29421,6 +30795,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "media_blink_unittests", @@ -29433,6 +30813,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "media_unittests", @@ -29445,6 +30831,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "message_center_unittests", @@ -29457,6 +30849,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "midi_unittests", @@ -29469,6 +30867,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "mojo_unittests", @@ -29481,6 +30885,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "nacl_loader_unittests", @@ -29493,6 +30903,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "native_theme_unittests", @@ -29505,6 +30921,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "net_unittests", @@ -29517,6 +30939,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "openscreen_unittests", @@ -29529,6 +30957,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "pdf_unittests", @@ -29541,6 +30975,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "perfetto_unittests", @@ -29553,6 +30993,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ppapi_unittests", @@ -29565,6 +31011,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "printing_unittests", @@ -29577,6 +31029,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "remoting_unittests", @@ -29589,6 +31047,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sandbox_mac_unittests", @@ -29601,6 +31065,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "service_manager_unittests", @@ -29613,6 +31083,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "services_unittests", @@ -29625,6 +31101,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "shell_dialogs_unittests", @@ -29637,6 +31119,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "skia_unittests", @@ -29649,6 +31137,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "snapshot_unittests", @@ -29661,6 +31155,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sql_unittests", @@ -29673,6 +31173,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "storage_unittests", @@ -29685,6 +31191,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sync_integration_tests", @@ -29697,6 +31209,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ui_base_unittests", @@ -29709,6 +31227,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ui_touch_selection_unittests", @@ -29721,6 +31245,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "unit_tests", @@ -29733,6 +31263,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "updater_tests", @@ -29745,6 +31281,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "url_unittests", @@ -29757,6 +31299,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "views_unittests", @@ -29769,6 +31317,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "viz_unittests", @@ -29781,6 +31335,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "wtf_unittests", @@ -29794,6 +31354,12 @@ "name": "xr_browser_tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "xr_browser_tests", @@ -29806,6 +31372,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "zlib_unittests", @@ -29825,6 +31397,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://:blink_python_tests/" @@ -29847,6 +31425,12 @@ "results_handler": "layout tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 12 }, @@ -29863,6 +31447,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://chrome/test:chrome_sizes/" @@ -29882,6 +31472,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://chrome/test/chromedriver:chromedriver_py_tests/" @@ -29895,6 +31491,12 @@ "name": "chromedriver_replay_unittests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://chrome/test/chromedriver:chromedriver_replay_unittests/" @@ -29913,6 +31515,12 @@ "name": "components_perftests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://components:components_perftests/" @@ -29930,6 +31538,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://content/shell:content_shell_crash_test/" @@ -29947,6 +31561,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://third_party/flatbuffers:flatbuffers_unittests/" @@ -29963,6 +31583,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://tools/grit:grit_python_unittests/" @@ -29976,6 +31602,12 @@ "name": "mac_signing_tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://chrome/installer/mac:mac_signing_tests/" @@ -29992,6 +31624,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://tools/metrics:metrics_python_tests/" @@ -30008,6 +31646,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://mojo/public/tools:mojo_python_unittests/" @@ -30024,6 +31668,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "idempotent": false, "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, @@ -30044,6 +31694,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "idempotent": false, "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 12 @@ -30066,6 +31722,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "idempotent": false, "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 8 @@ -30086,6 +31748,12 @@ "name": "views_perftests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://ui/views:views_perftests/" @@ -44732,6 +46400,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -44777,6 +46446,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -44822,6 +46492,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -44867,6 +46538,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -44912,6 +46584,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -44957,6 +46630,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45002,6 +46676,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45047,6 +46722,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45092,6 +46768,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45137,6 +46814,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45182,6 +46860,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45227,6 +46906,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45272,6 +46952,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45317,6 +46998,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45362,6 +47044,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45407,6 +47090,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45452,6 +47136,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45497,6 +47182,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -45562,6 +47248,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -45606,6 +47293,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -45650,6 +47338,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -45694,6 +47383,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -45738,6 +47428,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -45782,6 +47473,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -45826,6 +47518,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -45870,6 +47563,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -45914,6 +47608,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -45958,6 +47653,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -46002,6 +47698,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -46046,6 +47743,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -46090,6 +47788,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -46134,6 +47833,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -46178,6 +47878,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -46222,6 +47923,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -46266,6 +47968,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" } @@ -46310,6 +48013,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "device": "iPhone8,1", "os": "Mac-10.15" }
diff --git a/testing/buildbot/chromium.dawn.json b/testing/buildbot/chromium.dawn.json index 3fcc7b6..4498222d 100644 --- a/testing/buildbot/chromium.dawn.json +++ b/testing/buildbot/chromium.dawn.json
@@ -1053,6 +1053,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1080,6 +1081,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1107,6 +1109,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1134,6 +1137,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1159,6 +1163,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1182,6 +1187,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1213,6 +1219,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1247,6 +1254,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1282,6 +1290,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1310,6 +1319,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1335,6 +1345,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1360,6 +1371,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1385,6 +1397,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1408,6 +1421,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1429,6 +1443,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1458,6 +1473,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1490,6 +1506,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1523,6 +1540,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1549,6 +1567,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1576,6 +1595,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1603,6 +1623,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1630,6 +1651,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1655,6 +1677,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1678,6 +1701,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1709,6 +1733,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1743,6 +1768,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1778,6 +1804,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1806,6 +1833,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1831,6 +1859,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1856,6 +1885,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1881,6 +1911,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1904,6 +1935,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1925,6 +1957,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1954,6 +1987,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1986,6 +2020,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2019,6 +2054,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }
diff --git a/testing/buildbot/chromium.dev.json b/testing/buildbot/chromium.dev.json index 77ff4ae6..22f46618 100644 --- a/testing/buildbot/chromium.dev.json +++ b/testing/buildbot/chromium.dev.json
@@ -1241,6 +1241,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_unittests", @@ -1253,6 +1259,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_browsertests", @@ -1265,6 +1277,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_unittests", @@ -1277,6 +1295,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" }, "test": "interactive_ui_tests", @@ -1289,6 +1313,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" }, "test": "net_unittests", @@ -1301,6 +1331,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" }, "test": "unit_tests",
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index c631637..78baaa5c 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -17166,6 +17166,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17211,6 +17212,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17256,6 +17258,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17301,6 +17304,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17346,6 +17350,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17391,6 +17396,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17436,6 +17442,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17481,6 +17488,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17526,6 +17534,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17571,6 +17580,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17616,6 +17626,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17661,6 +17672,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17706,6 +17718,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17751,6 +17764,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17796,6 +17810,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17841,6 +17856,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17886,6 +17902,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17931,6 +17948,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17976,6 +17994,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18021,6 +18040,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18066,6 +18086,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18111,6 +18132,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18156,6 +18178,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18201,6 +18224,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18246,6 +18270,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18291,6 +18316,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18336,6 +18362,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18381,6 +18408,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18426,6 +18454,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18471,6 +18500,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18516,6 +18546,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18561,6 +18592,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18606,6 +18638,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18651,6 +18684,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18696,6 +18730,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18741,6 +18776,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18786,6 +18822,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18831,6 +18868,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18876,6 +18914,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18921,6 +18960,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18966,6 +19006,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19011,6 +19052,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19056,6 +19098,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19101,6 +19144,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19146,6 +19190,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19191,6 +19236,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19243,6 +19289,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19291,6 +19338,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19339,6 +19387,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19387,6 +19436,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19435,6 +19485,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19483,6 +19534,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19531,6 +19583,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19579,6 +19632,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19627,6 +19681,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19675,6 +19730,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19723,6 +19779,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19771,6 +19828,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19819,6 +19877,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19867,6 +19926,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19915,6 +19975,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19963,6 +20024,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20011,6 +20073,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20059,6 +20122,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20107,6 +20171,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20155,6 +20220,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20203,6 +20269,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20251,6 +20318,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20299,6 +20367,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20347,6 +20416,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20395,6 +20465,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20443,6 +20514,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20491,6 +20563,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20539,6 +20612,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20587,6 +20661,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20635,6 +20710,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20683,6 +20759,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20731,6 +20808,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20779,6 +20857,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20827,6 +20906,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20876,6 +20956,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20925,6 +21006,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20974,6 +21056,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21023,6 +21106,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21072,6 +21156,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21121,6 +21206,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21170,6 +21256,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21220,6 +21307,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21270,6 +21358,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21320,6 +21409,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21370,6 +21460,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21420,6 +21511,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21470,6 +21562,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21520,6 +21613,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21570,6 +21664,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21620,6 +21715,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21670,6 +21766,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21720,6 +21817,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21770,6 +21868,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21819,6 +21918,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21868,6 +21968,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21917,6 +22018,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -21966,6 +22068,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22015,6 +22118,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22064,6 +22168,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22113,6 +22218,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22162,6 +22268,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22211,6 +22318,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22260,6 +22368,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22309,6 +22418,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22358,6 +22468,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22408,6 +22519,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22458,6 +22570,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22508,6 +22621,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22558,6 +22672,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22608,6 +22723,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22657,6 +22773,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22705,6 +22822,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22753,6 +22871,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22801,6 +22920,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22849,6 +22969,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22897,6 +23018,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22945,6 +23067,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -22993,6 +23116,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23042,6 +23166,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23091,6 +23216,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23140,6 +23266,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23189,6 +23316,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23238,6 +23366,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23287,6 +23416,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23335,6 +23465,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23383,6 +23514,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23431,6 +23563,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23479,6 +23612,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23527,6 +23661,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23575,6 +23710,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23624,6 +23760,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23673,6 +23810,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23722,6 +23860,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23771,6 +23910,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23820,6 +23960,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23869,6 +24010,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23917,6 +24059,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -23965,6 +24108,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24013,6 +24157,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24061,6 +24206,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24109,6 +24255,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24157,6 +24304,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24205,6 +24353,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24253,6 +24402,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24301,6 +24451,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24349,6 +24500,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24398,6 +24550,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24447,6 +24600,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24496,6 +24650,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24545,6 +24700,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24594,6 +24750,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24643,6 +24800,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24691,6 +24849,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24739,6 +24898,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24787,6 +24947,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24835,6 +24996,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24883,6 +25045,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24931,6 +25094,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -24979,6 +25143,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25027,6 +25192,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25075,6 +25241,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25123,6 +25290,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25171,6 +25339,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25219,6 +25388,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25267,6 +25437,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25315,6 +25486,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25363,6 +25535,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25411,6 +25584,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25459,6 +25633,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25507,6 +25682,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25555,6 +25731,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25603,6 +25780,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25651,6 +25829,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25699,6 +25878,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25747,6 +25927,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25795,6 +25976,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25843,6 +26025,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25891,6 +26074,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25939,6 +26123,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -25987,6 +26172,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26035,6 +26221,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26083,6 +26270,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26131,6 +26319,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26179,6 +26368,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26227,6 +26417,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26275,6 +26466,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26323,6 +26515,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26371,6 +26564,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26419,6 +26613,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26467,6 +26662,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26515,6 +26711,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26563,6 +26760,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26611,6 +26809,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26659,6 +26858,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26707,6 +26907,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26755,6 +26956,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26803,6 +27005,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26851,6 +27054,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26899,6 +27103,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26947,6 +27152,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -26996,6 +27202,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27041,6 +27248,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27090,6 +27298,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27135,6 +27344,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27180,6 +27390,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27225,6 +27436,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27270,6 +27482,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27315,6 +27528,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27360,6 +27574,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27405,6 +27620,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27451,6 +27667,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27497,6 +27714,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27544,6 +27762,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27591,6 +27810,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27637,6 +27857,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27683,6 +27904,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27729,6 +27951,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27775,6 +27998,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27820,6 +28044,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27865,6 +28090,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27910,6 +28136,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -27956,6 +28183,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28001,6 +28229,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28046,6 +28275,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28092,6 +28322,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28137,6 +28368,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28182,6 +28414,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28227,6 +28460,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28272,6 +28506,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28317,6 +28552,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28362,6 +28598,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28407,6 +28644,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28452,6 +28690,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28497,6 +28736,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28548,6 +28788,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28595,6 +28836,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28642,6 +28884,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28689,6 +28932,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28736,6 +28980,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28783,6 +29028,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28830,6 +29076,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28877,6 +29124,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28924,6 +29172,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -28971,6 +29220,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29018,6 +29268,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29065,6 +29316,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29112,6 +29364,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29159,6 +29412,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29206,6 +29460,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29253,6 +29508,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29301,6 +29557,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29349,6 +29606,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29397,6 +29655,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29446,6 +29705,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29495,6 +29755,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29544,6 +29805,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29593,6 +29855,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29641,6 +29904,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29689,6 +29953,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29737,6 +30002,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29785,6 +30051,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29834,6 +30101,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29882,6 +30150,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29929,6 +30198,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -29977,6 +30247,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30025,6 +30296,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30072,6 +30344,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30119,6 +30392,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30166,6 +30440,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30213,6 +30488,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30260,6 +30536,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30307,6 +30584,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30355,6 +30633,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30403,6 +30682,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30450,6 +30730,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30497,6 +30778,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30544,6 +30826,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30591,6 +30874,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30639,6 +30923,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30687,6 +30972,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30734,6 +31020,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30781,6 +31068,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30828,6 +31116,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30875,6 +31164,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30922,6 +31212,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -30969,6 +31260,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31016,6 +31308,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31063,6 +31356,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31110,6 +31404,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31157,6 +31452,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31204,6 +31500,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31251,6 +31548,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31298,6 +31596,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31345,6 +31644,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31392,6 +31692,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31439,6 +31740,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31486,6 +31788,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31533,6 +31836,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31600,6 +31904,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31645,6 +31950,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31690,6 +31996,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31735,6 +32042,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31780,6 +32088,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31825,6 +32134,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31870,6 +32180,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31915,6 +32226,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -31960,6 +32272,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32005,6 +32318,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32050,6 +32364,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32095,6 +32410,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32140,6 +32456,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32185,6 +32502,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32231,6 +32549,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32277,6 +32596,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32323,6 +32643,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32369,6 +32690,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32415,6 +32737,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32462,6 +32785,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32509,6 +32833,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32556,6 +32881,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32603,6 +32929,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32650,6 +32977,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32697,6 +33025,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32744,6 +33073,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32791,6 +33121,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32837,6 +33168,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32883,6 +33215,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32929,6 +33262,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -32975,6 +33309,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33021,6 +33356,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33067,6 +33403,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33113,6 +33450,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33159,6 +33497,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33206,6 +33545,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33253,6 +33593,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33300,6 +33641,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33346,6 +33688,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33391,6 +33734,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33436,6 +33780,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33482,6 +33827,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33528,6 +33874,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33574,6 +33921,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33620,6 +33968,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33665,6 +34014,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33710,6 +34060,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33755,6 +34106,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33801,6 +34153,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33847,6 +34200,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33893,6 +34247,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33939,6 +34294,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -33984,6 +34340,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34029,6 +34386,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34074,6 +34432,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34119,6 +34478,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34165,6 +34525,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34211,6 +34572,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34257,6 +34619,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34303,6 +34666,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34348,6 +34712,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34393,6 +34758,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34438,6 +34804,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34483,6 +34850,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34528,6 +34896,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34573,6 +34942,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34618,6 +34988,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34663,6 +35034,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34708,6 +35080,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34753,6 +35126,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34798,6 +35172,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34843,6 +35218,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34888,6 +35264,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34933,6 +35310,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -34978,6 +35356,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35023,6 +35402,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35068,6 +35448,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35113,6 +35494,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35158,6 +35540,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35210,6 +35593,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35255,6 +35639,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35300,6 +35685,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35345,6 +35731,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35390,6 +35777,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35435,6 +35823,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35480,6 +35869,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35525,6 +35915,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35570,6 +35961,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35615,6 +36007,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35660,6 +36053,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35706,6 +36100,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35752,6 +36147,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35798,6 +36194,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35844,6 +36241,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35891,6 +36289,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35938,6 +36337,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -35985,6 +36385,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36032,6 +36433,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36079,6 +36481,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36126,6 +36529,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36172,6 +36576,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36218,6 +36623,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36264,6 +36670,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36310,6 +36717,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36356,6 +36764,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36402,6 +36811,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36449,6 +36859,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36496,6 +36907,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36542,6 +36954,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36587,6 +37000,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36633,6 +37047,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36679,6 +37094,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36725,6 +37141,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36770,6 +37187,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36815,6 +37233,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36860,6 +37279,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36906,6 +37326,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36952,6 +37373,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -36998,6 +37420,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37043,6 +37466,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37088,6 +37512,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37133,6 +37558,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37179,6 +37605,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37225,6 +37652,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37271,6 +37699,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37316,6 +37745,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37361,6 +37791,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37406,6 +37837,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37451,6 +37883,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37496,6 +37929,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37541,6 +37975,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37586,6 +38021,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37631,6 +38067,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37676,6 +38113,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37721,6 +38159,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37766,6 +38205,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37811,6 +38251,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37856,6 +38297,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -37901,6 +38343,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -52753,6 +53196,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52771,6 +53215,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52792,6 +53237,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52811,6 +53257,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52829,6 +53276,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52847,6 +53295,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52865,6 +53314,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52883,6 +53333,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52901,6 +53352,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52919,6 +53371,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52938,6 +53391,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52956,6 +53410,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52974,6 +53429,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -52995,6 +53451,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53013,6 +53470,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53031,6 +53489,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53049,6 +53508,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53067,6 +53527,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53085,6 +53546,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53103,6 +53565,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53121,6 +53584,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53139,6 +53603,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53158,6 +53623,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53176,6 +53642,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53194,6 +53661,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53212,6 +53680,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53230,6 +53699,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53248,6 +53718,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53266,6 +53737,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53284,6 +53756,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53302,6 +53775,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53320,6 +53794,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53338,6 +53813,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53356,6 +53832,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53374,6 +53851,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53392,6 +53870,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53410,6 +53889,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53428,6 +53908,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53446,6 +53927,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53464,6 +53946,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53482,6 +53965,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53500,6 +53984,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53518,6 +54003,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53537,6 +54023,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53555,6 +54042,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53573,6 +54061,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53591,6 +54080,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53609,6 +54099,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53627,6 +54118,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53645,6 +54137,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53663,6 +54156,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53681,6 +54175,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53699,6 +54194,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53717,6 +54213,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53735,6 +54232,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53753,6 +54251,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53771,6 +54270,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53789,6 +54289,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53807,6 +54308,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53825,6 +54327,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53843,6 +54346,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53861,6 +54365,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53879,6 +54384,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53897,6 +54403,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53915,6 +54422,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53933,6 +54441,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53951,6 +54460,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53969,6 +54479,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -53987,6 +54498,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54005,6 +54517,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54023,6 +54536,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54041,6 +54555,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54059,6 +54574,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54077,6 +54593,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54095,6 +54612,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54113,6 +54631,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54131,6 +54650,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54149,6 +54669,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54167,6 +54688,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54186,6 +54708,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54204,6 +54727,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13.6" } ], @@ -54230,6 +54754,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54249,6 +54774,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54271,6 +54797,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54291,6 +54818,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54310,6 +54838,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54329,6 +54858,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54348,6 +54878,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54367,6 +54898,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54386,6 +54918,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54405,6 +54938,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54425,6 +54959,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54444,6 +54979,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54463,6 +54999,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54482,6 +55019,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54505,6 +55043,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54524,6 +55063,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54543,6 +55083,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54562,6 +55103,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54581,6 +55123,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54600,6 +55143,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54619,6 +55163,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54638,6 +55183,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54658,6 +55204,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54677,6 +55224,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54696,6 +55244,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54715,6 +55264,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54734,6 +55284,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54753,6 +55304,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54772,6 +55324,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54791,6 +55344,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54810,6 +55364,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54829,6 +55384,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54848,6 +55404,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54867,6 +55424,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54886,6 +55444,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54905,6 +55464,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54924,6 +55484,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54943,6 +55504,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54962,6 +55524,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -54981,6 +55544,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55000,6 +55564,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55019,6 +55584,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55038,6 +55604,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55058,6 +55625,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55077,6 +55645,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55096,6 +55665,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55115,6 +55685,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55134,6 +55705,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55153,6 +55725,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55172,6 +55745,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55191,6 +55765,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55210,6 +55785,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55229,6 +55805,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55248,6 +55825,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55267,6 +55845,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55286,6 +55865,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55305,6 +55885,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55324,6 +55905,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55343,6 +55925,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55362,6 +55945,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55381,6 +55965,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55400,6 +55985,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55419,6 +56005,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55438,6 +56025,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55457,6 +56045,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55476,6 +56065,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55495,6 +56085,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55514,6 +56105,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55533,6 +56125,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55552,6 +56145,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55571,6 +56165,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55590,6 +56185,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55609,6 +56205,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55628,6 +56225,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55647,6 +56245,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55666,6 +56265,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55685,6 +56285,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55704,6 +56305,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55724,6 +56326,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55743,6 +56346,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55769,6 +56373,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55798,6 +56403,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55825,6 +56431,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55845,6 +56452,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55870,6 +56478,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55894,6 +56503,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55918,6 +56528,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55941,6 +56552,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55961,6 +56573,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -55984,6 +56597,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -56007,6 +56621,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -56030,6 +56645,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -56057,6 +56673,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -56086,6 +56703,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -56113,6 +56731,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-11.3" } @@ -58133,6 +58752,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "hidpi": "0", "os": "Mac-10.12.6" @@ -58167,6 +58787,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "hidpi": "0", "os": "Mac-10.13.6" @@ -58202,6 +58823,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.14.6" } @@ -58236,6 +58858,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "hidpi": "0", "os": "Mac-10.15" @@ -58271,6 +58894,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "hidpi": "0", "os": "Mac-11|Mac-10.16"
diff --git a/testing/buildbot/chromium.goma.fyi.json b/testing/buildbot/chromium.goma.fyi.json index 699d379..f6abc92 100644 --- a/testing/buildbot/chromium.goma.fyi.json +++ b/testing/buildbot/chromium.goma.fyi.json
@@ -15,6 +15,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13" } ], @@ -32,6 +33,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13" } ], @@ -56,6 +58,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13" } ], @@ -73,6 +76,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13" } ], @@ -301,6 +305,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13" } ], @@ -318,6 +323,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13" } ], @@ -342,6 +348,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13" } ], @@ -359,6 +366,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13" } ],
diff --git a/testing/buildbot/chromium.goma.json b/testing/buildbot/chromium.goma.json index e9bec31a..43af7107 100644 --- a/testing/buildbot/chromium.goma.json +++ b/testing/buildbot/chromium.goma.json
@@ -187,6 +187,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_unittests", @@ -199,6 +205,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_unittests", @@ -218,6 +230,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_unittests", @@ -230,6 +248,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_unittests", @@ -249,6 +273,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_unittests", @@ -261,6 +291,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_unittests", @@ -280,6 +316,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_unittests", @@ -292,6 +334,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_unittests",
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 1f56a9f..630fa76 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -14248,6 +14248,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14272,6 +14273,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14298,6 +14300,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14323,6 +14326,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14345,6 +14349,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14367,6 +14372,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14386,6 +14392,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14409,6 +14416,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14428,6 +14436,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14463,6 +14472,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14496,6 +14506,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14529,6 +14540,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14562,6 +14574,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14599,6 +14612,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14641,6 +14655,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14683,6 +14698,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14717,6 +14733,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14750,6 +14767,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14784,6 +14802,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14819,6 +14838,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -14854,6 +14874,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -14891,6 +14912,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -14922,10 +14944,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -14952,10 +14976,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -14985,10 +15011,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15016,10 +15044,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15047,10 +15077,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15075,10 +15107,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15103,10 +15137,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15128,10 +15164,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15157,10 +15195,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15182,10 +15222,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15224,10 +15266,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15264,10 +15308,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15303,10 +15349,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15342,10 +15390,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15381,10 +15431,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15420,10 +15472,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15459,10 +15513,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15507,10 +15563,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15555,10 +15613,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15595,10 +15655,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15634,10 +15696,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15673,10 +15737,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15721,10 +15787,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15769,10 +15837,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15817,10 +15887,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15865,10 +15937,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15905,10 +15979,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15945,10 +16021,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -15984,10 +16062,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -16025,10 +16105,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -16068,10 +16150,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -16109,10 +16193,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -16150,10 +16236,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -16191,10 +16279,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -16232,10 +16322,12 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" }, { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -16267,6 +16359,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16291,6 +16384,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16318,6 +16412,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16343,6 +16438,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16368,6 +16464,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16390,6 +16487,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16412,6 +16510,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16431,6 +16530,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16454,6 +16554,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16473,6 +16574,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16508,6 +16610,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16541,6 +16644,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16574,6 +16678,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16607,6 +16712,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16640,6 +16746,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16673,6 +16780,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16706,6 +16814,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16748,6 +16857,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16790,6 +16900,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16824,6 +16935,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16857,6 +16969,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16890,6 +17003,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16927,6 +17041,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -16969,6 +17084,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17011,6 +17127,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17053,6 +17170,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17095,6 +17213,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17120,6 +17239,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17153,6 +17273,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17187,6 +17308,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17220,6 +17342,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17255,6 +17378,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17291,6 +17415,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17326,6 +17451,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17361,6 +17487,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17396,6 +17523,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17430,6 +17558,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:3e9b", "os": "Mac-10.15.7" } @@ -17459,6 +17588,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17483,6 +17613,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17510,6 +17641,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17535,6 +17667,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17560,6 +17693,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17582,6 +17716,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17604,6 +17739,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17623,6 +17759,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17646,6 +17783,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17665,6 +17803,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17700,6 +17839,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17733,6 +17873,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17766,6 +17907,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17799,6 +17941,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17832,6 +17975,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17865,6 +18009,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17898,6 +18043,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17940,6 +18086,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -17982,6 +18129,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18016,6 +18164,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18049,6 +18198,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18082,6 +18232,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18119,6 +18270,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18161,6 +18313,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18203,6 +18356,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18245,6 +18399,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18287,6 +18442,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18312,6 +18468,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18345,6 +18502,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18379,6 +18537,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18412,6 +18571,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18447,6 +18607,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18483,6 +18644,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18518,6 +18680,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18553,6 +18716,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18588,6 +18752,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18622,6 +18787,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -18651,6 +18817,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18677,6 +18844,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18705,6 +18873,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18732,6 +18901,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18756,6 +18926,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18780,6 +18951,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18801,6 +18973,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18826,6 +18999,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18847,6 +19021,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18884,6 +19059,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18919,6 +19095,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18954,6 +19131,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -18989,6 +19167,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19028,6 +19207,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19072,6 +19252,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19116,6 +19297,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19152,6 +19334,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19187,6 +19370,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19223,6 +19407,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19254,6 +19439,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19280,6 +19466,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19308,6 +19495,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19335,6 +19523,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19359,6 +19548,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19383,6 +19573,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19404,6 +19595,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19429,6 +19621,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19450,6 +19643,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19487,6 +19681,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19522,6 +19717,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19557,6 +19753,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19592,6 +19789,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19631,6 +19829,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19675,6 +19874,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19719,6 +19919,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19755,6 +19956,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19790,6 +19992,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -19820,6 +20023,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19846,6 +20050,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19875,6 +20080,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19902,6 +20108,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19929,6 +20136,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19953,6 +20161,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19977,6 +20186,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -19998,6 +20208,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20023,6 +20234,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20044,6 +20256,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20081,6 +20294,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20116,6 +20330,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20151,6 +20366,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20186,6 +20402,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20221,6 +20438,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20256,6 +20474,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20291,6 +20510,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20335,6 +20555,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20379,6 +20600,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20415,6 +20637,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20450,6 +20673,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20485,6 +20709,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20524,6 +20749,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20568,6 +20794,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20612,6 +20839,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20656,6 +20884,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20700,6 +20929,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20727,6 +20957,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20762,6 +20993,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20798,6 +21030,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20833,6 +21066,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20870,6 +21104,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20908,6 +21143,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20945,6 +21181,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -20982,6 +21219,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -21019,6 +21257,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -21055,6 +21294,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -21086,6 +21326,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21112,6 +21353,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21141,6 +21383,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21168,6 +21411,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21195,6 +21439,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21219,6 +21464,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21243,6 +21489,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21264,6 +21511,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21289,6 +21537,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21310,6 +21559,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21347,6 +21597,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21382,6 +21633,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21417,6 +21669,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21452,6 +21705,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21487,6 +21741,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21522,6 +21777,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21557,6 +21813,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21601,6 +21858,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21645,6 +21903,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21681,6 +21940,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21716,6 +21976,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21751,6 +22012,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21790,6 +22052,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21834,6 +22097,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21878,6 +22142,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21922,6 +22187,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -21966,6 +22232,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -22002,6 +22269,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -22038,6 +22306,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -22073,6 +22342,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -22110,6 +22380,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -22147,6 +22418,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -22184,6 +22456,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -22220,6 +22493,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -23480,6 +23754,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23506,6 +23781,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23535,6 +23811,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23562,6 +23839,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23589,6 +23867,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23613,6 +23892,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23637,6 +23917,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23658,6 +23939,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23695,6 +23977,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23730,6 +24013,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23765,6 +24049,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23800,6 +24085,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23835,6 +24121,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23874,6 +24161,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23918,6 +24206,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -23962,6 +24251,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -24006,6 +24296,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -24050,6 +24341,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -24086,6 +24378,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -24122,6 +24415,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -24157,6 +24451,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -24194,6 +24489,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -24231,6 +24527,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:679e", "os": "Mac-10.12.6", "pool": "chromium.tests.gpu" @@ -24855,6 +25152,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -24879,6 +25177,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -24898,6 +25197,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -24921,6 +25221,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -24940,6 +25241,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -24975,6 +25277,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25008,6 +25311,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25041,6 +25345,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25074,6 +25379,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25111,6 +25417,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25153,6 +25460,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25195,6 +25503,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25229,6 +25538,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25262,6 +25572,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25292,6 +25603,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25327,6 +25639,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25362,6 +25675,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25397,6 +25711,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25432,6 +25747,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -25460,6 +25776,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25486,6 +25803,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25507,6 +25825,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25532,6 +25851,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25553,6 +25873,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25590,6 +25911,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25625,6 +25947,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25660,6 +25983,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25695,6 +26019,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25734,6 +26059,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25778,6 +26104,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25822,6 +26149,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25858,6 +26186,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25893,6 +26222,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25925,6 +26255,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25962,6 +26293,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -25999,6 +26331,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -26036,6 +26369,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -26073,6 +26407,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -26103,6 +26438,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -26129,6 +26465,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -26150,6 +26487,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -26175,6 +26513,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -26196,6 +26535,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -26237,6 +26577,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -26272,6 +26613,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6", @@ -26304,6 +26646,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "10de:0fe9", "hidpi": "1", "os": "Mac-10.14.6",
diff --git a/testing/buildbot/chromium.gpu.json b/testing/buildbot/chromium.gpu.json index fcfa019..721ba94 100644 --- a/testing/buildbot/chromium.gpu.json +++ b/testing/buildbot/chromium.gpu.json
@@ -1468,6 +1468,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1494,6 +1495,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1519,6 +1521,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1541,6 +1544,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1576,6 +1580,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1609,6 +1614,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1642,6 +1648,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1675,6 +1682,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1712,6 +1720,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1754,6 +1763,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1796,6 +1806,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1830,6 +1841,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1863,6 +1875,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1897,6 +1910,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1924,6 +1938,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1951,6 +1966,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1976,6 +1992,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2001,6 +2018,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2023,6 +2041,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2058,6 +2077,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2091,6 +2111,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2124,6 +2145,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2157,6 +2179,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2194,6 +2217,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2236,6 +2260,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2278,6 +2303,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2303,6 +2329,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2336,6 +2363,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2369,6 +2397,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2403,6 +2432,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -2430,6 +2460,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2458,6 +2489,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2485,6 +2517,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2509,6 +2542,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2546,6 +2580,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2581,6 +2616,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2616,6 +2652,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2651,6 +2688,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2690,6 +2728,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2734,6 +2773,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2778,6 +2818,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2814,6 +2855,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2849,6 +2891,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2885,6 +2928,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2914,6 +2958,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2943,6 +2988,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2970,6 +3016,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -2997,6 +3044,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3021,6 +3069,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3058,6 +3107,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3093,6 +3143,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3128,6 +3179,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3163,6 +3215,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3202,6 +3255,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3246,6 +3300,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3290,6 +3345,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3317,6 +3373,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3352,6 +3409,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3387,6 +3445,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -3423,6 +3482,7 @@ "containment_type": "AUTO", "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6",
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json index 2e44751..bb61038 100644 --- a/testing/buildbot/chromium.mac.json +++ b/testing/buildbot/chromium.mac.json
@@ -37,6 +37,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -54,6 +55,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -74,6 +76,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -92,6 +95,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -109,6 +113,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -126,6 +131,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -143,6 +149,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -160,6 +167,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -177,6 +185,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -194,6 +203,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -212,6 +222,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -229,6 +240,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -246,6 +258,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -263,6 +276,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -284,6 +298,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -301,6 +316,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -318,6 +334,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -335,6 +352,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -352,6 +370,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -369,6 +388,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -386,6 +406,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -403,6 +424,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -421,6 +443,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -438,6 +461,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -455,6 +479,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -472,6 +497,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -489,6 +515,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -506,6 +533,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -523,6 +551,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -540,6 +569,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -557,6 +587,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -574,6 +605,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -591,6 +623,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -608,6 +641,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -625,6 +659,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -642,6 +677,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -659,6 +695,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -676,6 +713,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -693,6 +731,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -710,6 +749,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -727,6 +767,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -744,6 +785,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -761,6 +803,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -779,6 +822,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -796,6 +840,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -813,6 +858,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -830,6 +876,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -847,6 +894,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -864,6 +912,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -881,6 +930,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -898,6 +948,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -915,6 +966,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -932,6 +984,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -949,6 +1002,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -966,6 +1020,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -983,6 +1038,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1000,6 +1056,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1017,6 +1074,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1034,6 +1092,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1051,6 +1110,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1068,6 +1128,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1085,6 +1146,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1102,6 +1164,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1119,6 +1182,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1136,6 +1200,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1153,6 +1218,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1170,6 +1236,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1187,6 +1254,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1204,6 +1272,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1221,6 +1290,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1238,6 +1308,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1255,6 +1326,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1272,6 +1344,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1289,6 +1362,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1306,6 +1380,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1323,6 +1398,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1340,6 +1416,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1357,6 +1434,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1375,6 +1453,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1392,6 +1471,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1416,6 +1496,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1440,6 +1521,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1458,6 +1540,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1481,6 +1564,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1503,6 +1587,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1524,6 +1609,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1542,6 +1628,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1563,6 +1650,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1584,6 +1672,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1605,6 +1694,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1629,6 +1719,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11" } ], @@ -1649,6 +1740,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1667,6 +1759,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1688,6 +1781,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1707,6 +1801,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1725,6 +1820,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1743,6 +1839,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1761,6 +1858,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1779,6 +1877,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1797,6 +1896,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1815,6 +1915,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1834,6 +1935,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1852,6 +1954,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1870,6 +1973,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1888,6 +1992,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1910,6 +2015,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1928,6 +2034,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1946,6 +2053,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1964,6 +2072,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -1982,6 +2091,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2000,6 +2110,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2018,6 +2129,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2036,6 +2148,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2055,6 +2168,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2073,6 +2187,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2091,6 +2206,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2109,6 +2225,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2127,6 +2244,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2145,6 +2263,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2163,6 +2282,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2181,6 +2301,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2199,6 +2320,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2217,6 +2339,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2235,6 +2358,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2253,6 +2377,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2271,6 +2396,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2289,6 +2415,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2307,6 +2434,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2325,6 +2453,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2343,6 +2472,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2361,6 +2491,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2379,6 +2510,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2397,6 +2529,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2415,6 +2548,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2434,6 +2568,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2452,6 +2587,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2470,6 +2606,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2488,6 +2625,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2506,6 +2644,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2524,6 +2663,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2542,6 +2682,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2560,6 +2701,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2578,6 +2720,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2596,6 +2739,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2614,6 +2758,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2632,6 +2777,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2650,6 +2796,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2668,6 +2815,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2686,6 +2834,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2704,6 +2853,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2722,6 +2872,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2740,6 +2891,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2758,6 +2910,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2776,6 +2929,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2794,6 +2948,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2812,6 +2967,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2830,6 +2986,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2848,6 +3005,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2866,6 +3024,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2884,6 +3043,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2902,6 +3062,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2920,6 +3081,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2938,6 +3100,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2956,6 +3119,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2974,6 +3138,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -2992,6 +3157,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3010,6 +3176,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3028,6 +3195,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3046,6 +3214,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3065,6 +3234,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3083,6 +3253,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3108,6 +3279,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3136,6 +3308,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3162,6 +3335,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3181,6 +3355,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3205,6 +3380,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3228,6 +3404,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3251,6 +3428,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3273,6 +3451,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3292,6 +3471,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3314,6 +3494,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3336,6 +3517,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3358,6 +3540,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3385,6 +3568,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3413,6 +3597,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3439,6 +3624,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -3461,6 +3647,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3479,6 +3666,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3500,6 +3688,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3519,6 +3708,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3537,6 +3727,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3555,6 +3746,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3573,6 +3765,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3591,6 +3784,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3609,6 +3803,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3627,6 +3822,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3646,6 +3842,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3664,6 +3861,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3682,6 +3880,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3703,6 +3902,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3721,6 +3921,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3739,6 +3940,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3757,6 +3959,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3775,6 +3978,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3793,6 +3997,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3811,6 +4016,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3829,6 +4035,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3848,6 +4055,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3866,6 +4074,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3884,6 +4093,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3902,6 +4112,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3920,6 +4131,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3938,6 +4150,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3956,6 +4169,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3974,6 +4188,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -3992,6 +4207,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4010,6 +4226,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4028,6 +4245,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4046,6 +4264,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4064,6 +4283,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4082,6 +4302,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4100,6 +4321,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4118,6 +4340,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4136,6 +4359,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4154,6 +4378,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4172,6 +4397,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4190,6 +4416,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4208,6 +4435,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4227,6 +4455,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4245,6 +4474,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4263,6 +4493,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4281,6 +4512,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4299,6 +4531,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4317,6 +4550,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4335,6 +4569,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4353,6 +4588,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4371,6 +4607,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4389,6 +4626,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4407,6 +4645,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4425,6 +4664,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4443,6 +4683,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4461,6 +4702,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4479,6 +4721,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4497,6 +4740,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4515,6 +4759,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4533,6 +4778,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4551,6 +4797,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4569,6 +4816,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4587,6 +4835,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4605,6 +4854,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4623,6 +4873,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4641,6 +4892,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4659,6 +4911,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4677,6 +4930,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4698,6 +4952,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4716,6 +4971,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4734,6 +4990,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4752,6 +5009,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4770,6 +5028,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4788,6 +5047,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4806,6 +5066,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4824,6 +5085,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4842,6 +5104,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4861,6 +5124,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4879,6 +5143,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4904,6 +5169,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4932,6 +5198,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4958,6 +5225,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -4977,6 +5245,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5001,6 +5270,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5024,6 +5294,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5047,6 +5318,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5069,6 +5341,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5088,6 +5361,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5110,6 +5384,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5132,6 +5407,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5154,6 +5430,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5181,6 +5458,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5207,6 +5485,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -5227,6 +5506,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5244,6 +5524,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5264,6 +5545,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5282,6 +5564,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5299,6 +5582,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5316,6 +5600,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5333,6 +5618,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5350,6 +5636,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5367,6 +5654,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5384,6 +5672,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5402,6 +5691,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5419,6 +5709,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5436,6 +5727,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5453,6 +5745,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5474,6 +5767,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5491,6 +5785,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5508,6 +5803,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5525,6 +5821,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5542,6 +5839,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5559,6 +5857,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5576,6 +5875,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5593,6 +5893,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5611,6 +5912,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5628,6 +5930,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5645,6 +5948,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5662,6 +5966,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5679,6 +5984,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5696,6 +6002,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5713,6 +6020,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5730,6 +6038,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5747,6 +6056,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5764,6 +6074,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5781,6 +6092,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5798,6 +6110,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5815,6 +6128,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5832,6 +6146,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5849,6 +6164,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5866,6 +6182,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5883,6 +6200,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5900,6 +6218,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5917,6 +6236,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5934,6 +6254,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5951,6 +6272,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5969,6 +6291,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -5986,6 +6309,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6003,6 +6327,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6020,6 +6345,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6037,6 +6363,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6054,6 +6381,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6071,6 +6399,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6088,6 +6417,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6105,6 +6435,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6122,6 +6453,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6139,6 +6471,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6156,6 +6489,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6173,6 +6507,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6190,6 +6525,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6207,6 +6543,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6224,6 +6561,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6241,6 +6579,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6258,6 +6597,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6275,6 +6615,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6292,6 +6633,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6309,6 +6651,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6326,6 +6669,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6343,6 +6687,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6360,6 +6705,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6377,6 +6723,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6394,6 +6741,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6411,6 +6759,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6428,6 +6777,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6445,6 +6795,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6462,6 +6813,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6479,6 +6831,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6496,6 +6849,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6513,6 +6867,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6530,6 +6885,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6547,6 +6903,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6565,6 +6922,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6582,6 +6940,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6606,6 +6965,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6633,6 +6993,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6658,6 +7019,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6676,6 +7038,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6699,6 +7062,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6721,6 +7085,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6743,6 +7108,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6764,6 +7130,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6782,6 +7149,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6803,6 +7171,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6824,6 +7193,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6845,6 +7215,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6870,6 +7241,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6897,6 +7269,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6922,6 +7295,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14.6" } ], @@ -6943,6 +7317,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -6961,6 +7336,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -6982,6 +7358,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7001,6 +7378,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7019,6 +7397,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7037,6 +7416,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7055,6 +7435,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7073,6 +7454,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7091,6 +7473,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7109,6 +7492,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7128,6 +7512,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7146,6 +7531,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7164,6 +7550,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7185,6 +7572,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7203,6 +7591,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7221,6 +7610,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7239,6 +7629,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7257,6 +7648,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7275,6 +7667,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7293,6 +7686,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7311,6 +7705,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7330,6 +7725,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7348,6 +7744,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7366,6 +7763,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7384,6 +7782,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7402,6 +7801,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7420,6 +7820,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7438,6 +7839,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7456,6 +7858,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7474,6 +7877,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7492,6 +7896,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7510,6 +7915,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7528,6 +7934,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7546,6 +7953,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7564,6 +7972,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7582,6 +7991,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7600,6 +8010,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7618,6 +8029,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7636,6 +8048,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7654,6 +8067,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7672,6 +8086,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7690,6 +8105,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7709,6 +8125,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7727,6 +8144,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7745,6 +8163,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7763,6 +8182,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7781,6 +8201,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7799,6 +8220,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7817,6 +8239,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7835,6 +8258,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7853,6 +8277,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7871,6 +8296,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7889,6 +8315,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7907,6 +8334,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7925,6 +8353,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7943,6 +8372,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7961,6 +8391,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7979,6 +8410,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -7997,6 +8429,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8015,6 +8448,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8033,6 +8467,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8051,6 +8486,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8069,6 +8505,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8087,6 +8524,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8105,6 +8543,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8123,6 +8562,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8141,6 +8581,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8159,6 +8600,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8180,6 +8622,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8198,6 +8641,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8216,6 +8660,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8234,6 +8679,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8252,6 +8698,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8270,6 +8717,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8288,6 +8736,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8306,6 +8755,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8324,6 +8774,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8343,6 +8794,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8361,6 +8813,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8386,6 +8839,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8414,6 +8868,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8440,6 +8895,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8459,6 +8915,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8483,6 +8940,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8506,6 +8964,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8529,6 +8988,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8551,6 +9011,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8570,6 +9031,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8592,6 +9054,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8614,6 +9077,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8636,6 +9100,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8663,6 +9128,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8689,6 +9155,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8709,6 +9176,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8726,6 +9194,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8746,6 +9215,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8764,6 +9234,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8781,6 +9252,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8798,6 +9270,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8815,6 +9288,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8832,6 +9306,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8849,6 +9324,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8866,6 +9342,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8884,6 +9361,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8901,6 +9379,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8918,6 +9397,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8938,6 +9418,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8955,6 +9436,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8972,6 +9454,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -8989,6 +9472,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9006,6 +9490,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9023,6 +9508,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9040,6 +9526,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9057,6 +9544,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9074,6 +9562,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9092,6 +9581,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9109,6 +9599,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9126,6 +9617,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9143,6 +9635,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9160,6 +9653,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9177,6 +9671,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9194,6 +9689,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9211,6 +9707,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9228,6 +9725,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9245,6 +9743,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9262,6 +9761,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9279,6 +9779,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9296,6 +9797,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9313,6 +9815,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9330,6 +9833,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9347,6 +9851,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9364,6 +9869,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9381,6 +9887,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9398,6 +9905,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9415,6 +9923,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9432,6 +9941,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9450,6 +9960,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9467,6 +9978,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9484,6 +9996,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9501,6 +10014,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9518,6 +10032,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9535,6 +10050,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9552,6 +10068,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9569,6 +10086,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9586,6 +10104,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9603,6 +10122,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9620,6 +10140,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9637,6 +10158,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9654,6 +10176,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9671,6 +10194,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9688,6 +10212,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9705,6 +10230,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9722,6 +10248,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9739,6 +10266,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9756,6 +10284,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9773,6 +10302,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9790,6 +10320,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9807,6 +10338,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9824,6 +10356,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9841,6 +10374,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9858,6 +10392,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9875,6 +10410,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9892,6 +10428,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9909,6 +10446,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9926,6 +10464,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9943,6 +10482,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9960,6 +10500,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9977,6 +10518,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -9994,6 +10536,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10011,6 +10554,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10028,6 +10572,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10045,6 +10590,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10063,6 +10609,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10080,6 +10627,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10104,6 +10652,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10132,6 +10681,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10155,6 +10705,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10177,6 +10728,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10198,6 +10750,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10219,6 +10772,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10244,6 +10798,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10267,6 +10822,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10293,6 +10849,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10318,6 +10875,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -10338,6 +10896,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10355,6 +10914,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10375,6 +10935,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10393,6 +10954,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10410,6 +10972,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10427,6 +10990,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10444,6 +11008,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10461,6 +11026,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10478,6 +11044,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10495,6 +11062,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10513,6 +11081,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10530,6 +11099,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10547,6 +11117,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10564,6 +11135,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10585,6 +11157,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10602,6 +11175,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10619,6 +11193,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10636,6 +11211,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10653,6 +11229,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10670,6 +11247,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10687,6 +11265,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10704,6 +11283,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10722,6 +11302,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10739,6 +11320,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10756,6 +11338,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10773,6 +11356,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10790,6 +11374,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10807,6 +11392,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10824,6 +11410,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10841,6 +11428,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10858,6 +11446,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10875,6 +11464,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10892,6 +11482,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10909,6 +11500,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10926,6 +11518,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10943,6 +11536,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10960,6 +11554,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10977,6 +11572,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -10994,6 +11590,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11011,6 +11608,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11028,6 +11626,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11045,6 +11644,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11062,6 +11662,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11080,6 +11681,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11097,6 +11699,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11114,6 +11717,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11131,6 +11735,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11148,6 +11753,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11165,6 +11771,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11182,6 +11789,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11199,6 +11807,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11216,6 +11825,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11233,6 +11843,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11250,6 +11861,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11267,6 +11879,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11284,6 +11897,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11301,6 +11915,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11318,6 +11933,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11335,6 +11951,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11352,6 +11969,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11369,6 +11987,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11386,6 +12005,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11403,6 +12023,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11420,6 +12041,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11437,6 +12059,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11454,6 +12077,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11471,6 +12095,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11488,6 +12113,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11505,6 +12131,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11522,6 +12149,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11539,6 +12167,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11556,6 +12185,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11573,6 +12203,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11590,6 +12221,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11607,6 +12239,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11624,6 +12257,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11641,6 +12275,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11658,6 +12293,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11676,6 +12312,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11693,6 +12330,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11717,6 +12355,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11744,6 +12383,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11769,6 +12409,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11787,6 +12428,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11810,6 +12452,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11832,6 +12475,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11854,6 +12498,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11875,6 +12520,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11893,6 +12539,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11914,6 +12561,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11935,6 +12583,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11956,6 +12605,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -11981,6 +12631,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -12008,6 +12659,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -12033,6 +12685,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-11|Mac-10.16" } ], @@ -12085,6 +12738,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12131,6 +12785,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12177,6 +12832,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12223,6 +12879,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12269,6 +12926,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12315,6 +12973,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12361,6 +13020,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12407,6 +13067,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12453,6 +13114,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12499,6 +13161,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12545,6 +13208,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12591,6 +13255,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12637,6 +13302,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12683,6 +13349,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12729,6 +13396,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12775,6 +13443,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12821,6 +13490,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12867,6 +13537,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12913,6 +13584,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -12959,6 +13631,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13005,6 +13678,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13051,6 +13725,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13097,6 +13772,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13143,6 +13819,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13189,6 +13866,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13235,6 +13913,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13281,6 +13960,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13327,6 +14007,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13373,6 +14054,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13419,6 +14101,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13465,6 +14148,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13511,6 +14195,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13557,6 +14242,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13603,6 +14289,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13650,6 +14337,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13698,6 +14386,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13746,6 +14435,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13793,6 +14483,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13840,6 +14531,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13888,6 +14580,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13935,6 +14628,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -13981,6 +14675,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14027,6 +14722,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14073,6 +14769,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14119,6 +14816,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14165,6 +14863,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14211,6 +14910,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14257,6 +14957,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14303,6 +15004,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14349,6 +15051,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14395,6 +15098,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14441,6 +15145,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14487,6 +15192,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14533,6 +15239,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14579,6 +15286,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14625,6 +15333,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14671,6 +15380,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14717,6 +15427,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14763,6 +15474,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14809,6 +15521,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14855,6 +15568,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14901,6 +15615,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14947,6 +15662,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -14993,6 +15709,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15040,6 +15757,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15087,6 +15805,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15133,6 +15852,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15179,6 +15899,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15225,6 +15946,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15271,6 +15993,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15317,6 +16040,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15363,6 +16087,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15409,6 +16134,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15455,6 +16181,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15501,6 +16228,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15547,6 +16275,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15593,6 +16322,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15639,6 +16369,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15685,6 +16416,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15731,6 +16463,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15777,6 +16510,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15823,6 +16557,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15869,6 +16604,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15915,6 +16651,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -15961,6 +16698,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16007,6 +16745,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16053,6 +16792,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16099,6 +16839,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16145,6 +16886,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16191,6 +16933,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16237,6 +16980,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16283,6 +17027,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16329,6 +17074,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16375,6 +17121,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16421,6 +17168,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16467,6 +17215,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16513,6 +17262,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16559,6 +17309,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16605,6 +17356,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16651,6 +17403,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16697,6 +17450,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16743,6 +17497,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16789,6 +17544,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16835,6 +17591,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16881,6 +17638,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16927,6 +17685,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -16973,6 +17732,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17019,6 +17779,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17065,6 +17826,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17111,6 +17873,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17157,6 +17920,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17203,6 +17967,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17249,6 +18014,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17295,6 +18061,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17349,6 +18116,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17396,6 +18164,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17443,6 +18212,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17490,6 +18260,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17537,6 +18308,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17584,6 +18356,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17631,6 +18404,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17679,6 +18453,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17727,6 +18502,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17775,6 +18551,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17823,6 +18600,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17871,6 +18649,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17919,6 +18698,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -17967,6 +18747,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18015,6 +18796,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18063,6 +18845,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18111,6 +18894,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18158,6 +18942,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18205,6 +18990,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18252,6 +19038,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18299,6 +19086,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18346,6 +19134,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18393,6 +19182,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18440,6 +19230,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18487,6 +19278,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18534,6 +19326,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18581,6 +19374,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18629,6 +19423,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18677,6 +19472,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18725,6 +19521,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18773,6 +19570,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18820,6 +19618,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18867,6 +19666,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18914,6 +19714,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -18961,6 +19762,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19008,6 +19810,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19055,6 +19858,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19102,6 +19906,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19149,6 +19954,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19196,6 +20002,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19243,6 +20050,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19290,6 +20098,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19337,6 +20146,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19384,6 +20194,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19431,6 +20242,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19478,6 +20290,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19530,6 +20343,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19575,6 +20389,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19620,6 +20435,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19665,6 +20481,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19710,6 +20527,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19756,6 +20574,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19802,6 +20621,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19848,6 +20668,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19895,6 +20716,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19942,6 +20764,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -19989,6 +20812,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20036,6 +20860,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20082,6 +20907,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20128,6 +20954,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20174,6 +21001,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20220,6 +21048,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20267,6 +21096,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20314,6 +21144,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20360,6 +21191,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20405,6 +21237,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20450,6 +21283,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20495,6 +21329,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20541,6 +21376,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20587,6 +21423,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20632,6 +21469,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20678,6 +21516,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20724,6 +21563,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20769,6 +21609,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20814,6 +21655,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20859,6 +21701,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ], @@ -20904,6 +21747,7 @@ ], "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15" } ],
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index db69817..1b7e8f5 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -18261,6 +18261,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "absl_hardening_tests", @@ -18276,6 +18282,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "accessibility_unittests", @@ -18292,6 +18304,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "angle_unittests", @@ -18308,6 +18326,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "app_shell_unittests", @@ -18323,6 +18347,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_unittests", @@ -18338,6 +18368,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "base_util_unittests", @@ -18353,6 +18389,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_common_unittests", @@ -18368,6 +18410,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_fuzzer_unittests", @@ -18383,6 +18431,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_heap_unittests", @@ -18398,6 +18452,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_platform_unittests", @@ -18414,6 +18474,12 @@ "name": "webkit_unit_tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "blink_unittests", @@ -18429,6 +18495,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "boringssl_crypto_tests", @@ -18444,6 +18516,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "boringssl_ssl_tests", @@ -18460,6 +18538,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 30 }, @@ -18477,6 +18561,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "capture_unittests", @@ -18492,6 +18582,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cast_unittests", @@ -18507,6 +18603,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cc_unittests", @@ -18522,6 +18624,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "chrome_app_unittests", @@ -18537,6 +18645,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "chromedriver_unittests", @@ -18552,6 +18666,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "color_unittests", @@ -18567,6 +18687,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "components_browsertests", @@ -18582,6 +18708,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "components_unittests", @@ -18597,6 +18729,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 6 }, @@ -18613,6 +18751,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_nocompile_tests", @@ -18628,6 +18772,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_unittests", @@ -18643,6 +18793,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "crashpad_tests", @@ -18658,6 +18814,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cronet_tests", @@ -18673,6 +18835,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "cronet_unittests", @@ -18688,6 +18856,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "crypto_unittests", @@ -18703,6 +18877,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "device_unittests", @@ -18718,6 +18898,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "display_unittests", @@ -18733,6 +18919,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "events_unittests", @@ -18748,6 +18940,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "extensions_browsertests", @@ -18763,6 +18961,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "extensions_unittests", @@ -18778,6 +18982,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "filesystem_service_unittests", @@ -18793,6 +19003,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gcm_unit_tests", @@ -18808,6 +19024,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gfx_unittests", @@ -18823,6 +19045,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gin_unittests", @@ -18838,6 +19066,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "google_apis_unittests", @@ -18853,6 +19087,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gpu_unittests", @@ -18868,6 +19108,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "gwp_asan_unittests", @@ -18883,6 +19129,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "headless_browsertests", @@ -18898,6 +19150,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "headless_unittests", @@ -18913,6 +19171,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 3 }, @@ -18929,6 +19193,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ipc_tests", @@ -18944,6 +19214,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "jingle_unittests", @@ -18959,6 +19235,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "latency_unittests", @@ -18974,6 +19256,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "libjingle_xmpp_unittests", @@ -18989,6 +19277,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "liburlpattern_unittests", @@ -19004,6 +19298,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "media_blink_unittests", @@ -19019,6 +19319,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "media_unittests", @@ -19034,6 +19340,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "message_center_unittests", @@ -19049,6 +19361,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "midi_unittests", @@ -19064,6 +19382,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "mojo_unittests", @@ -19079,6 +19403,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "native_theme_unittests", @@ -19094,6 +19424,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "net_unittests", @@ -19109,6 +19445,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "openscreen_unittests", @@ -19124,6 +19466,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "pdf_unittests", @@ -19139,6 +19487,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "perfetto_unittests", @@ -19154,6 +19508,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ppapi_unittests", @@ -19169,6 +19529,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "printing_unittests", @@ -19184,6 +19550,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "remoting_unittests", @@ -19199,6 +19571,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sandbox_mac_unittests", @@ -19214,6 +19592,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "service_manager_unittests", @@ -19229,6 +19613,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "services_unittests", @@ -19244,6 +19634,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "shell_dialogs_unittests", @@ -19259,6 +19655,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "skia_unittests", @@ -19274,6 +19676,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "snapshot_unittests", @@ -19289,6 +19697,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sql_unittests", @@ -19304,6 +19718,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "storage_unittests", @@ -19319,6 +19739,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "sync_integration_tests", @@ -19334,6 +19760,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ui_base_unittests", @@ -19349,6 +19781,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ui_touch_selection_unittests", @@ -19364,6 +19802,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "unit_tests", @@ -19379,6 +19823,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "updater_tests", @@ -19394,6 +19844,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "url_unittests", @@ -19409,6 +19865,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "views_unittests", @@ -19424,6 +19886,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "viz_unittests", @@ -19439,6 +19907,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "wtf_unittests", @@ -19455,6 +19929,12 @@ "name": "xr_browser_tests", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "xr_browser_tests", @@ -19470,6 +19950,12 @@ }, "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "zlib_unittests",
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json index 09b789f1..5475ddb 100644 --- a/testing/buildbot/chromium.perf.json +++ b/testing/buildbot/chromium.perf.json
@@ -1345,6 +1345,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:1626", "os": "Mac-10.12.6", "pool": "chrome.tests.perf", @@ -1403,6 +1404,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821-4.0.20-3.2.8", "os": "Mac-10.13.3", "pool": "chrome.tests.perf",
diff --git a/testing/buildbot/chromium.swangle.json b/testing/buildbot/chromium.swangle.json index cf66667..fa2723e 100644 --- a/testing/buildbot/chromium.swangle.json +++ b/testing/buildbot/chromium.swangle.json
@@ -1381,6 +1381,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6", @@ -1416,6 +1417,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "1002:6821", "hidpi": "1", "os": "Mac-10.14.6",
diff --git a/testing/buildbot/chromium.updater.json b/testing/buildbot/chromium.updater.json index b8d6b77..16ad3ff 100644 --- a/testing/buildbot/chromium.updater.json +++ b/testing/buildbot/chromium.updater.json
@@ -35,6 +35,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.11", "pool": "chromium.updater.mac" } @@ -57,6 +58,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.12", "pool": "chromium.updater.mac" } @@ -79,6 +81,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13", "pool": "chromium.updater.mac" } @@ -101,6 +104,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.14", "pool": "chromium.updater.mac" } @@ -123,6 +127,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15", "pool": "chromium.updater.mac" } @@ -145,6 +150,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15", "pool": "chromium.updater.mac" } @@ -163,6 +169,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.15", "pool": "chromium.updater.mac" }
diff --git a/testing/buildbot/chromium.webrtc.fyi.json b/testing/buildbot/chromium.webrtc.fyi.json index d1443403..4e23dcd 100644 --- a/testing/buildbot/chromium.webrtc.fyi.json +++ b/testing/buildbot/chromium.webrtc.fyi.json
@@ -310,6 +310,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -333,6 +334,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -354,6 +356,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -379,6 +382,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -400,6 +404,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -418,6 +423,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" } @@ -439,6 +445,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.12.6" }
diff --git a/testing/buildbot/chromium.webrtc.json b/testing/buildbot/chromium.webrtc.json index b350790..2d21ea8d 100644 --- a/testing/buildbot/chromium.webrtc.json +++ b/testing/buildbot/chromium.webrtc.json
@@ -366,6 +366,12 @@ "perf_builder_name_alias": "chromium-webrtc-rel-mac", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "browser_tests", @@ -384,6 +390,12 @@ "perf_builder_name_alias": "chromium-webrtc-rel-mac", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "browser_tests_apprtc", @@ -418,6 +430,12 @@ "perf_builder_name_alias": "chromium-webrtc-rel-mac", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_browsertests", @@ -437,6 +455,12 @@ "perf_builder_name_alias": "chromium-webrtc-rel-mac", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_browsertests", @@ -457,6 +481,12 @@ "perf_builder_name_alias": "chromium-webrtc-rel-mac", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_browsertests", @@ -473,6 +503,12 @@ "perf_builder_name_alias": "chromium-webrtc-rel-mac", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "content_unittests", @@ -486,6 +522,12 @@ "perf_builder_name_alias": "chromium-webrtc-rel-mac", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "jingle_unittests", @@ -502,6 +544,12 @@ "perf_builder_name_alias": "chromium-webrtc-rel-mac", "swarming": { "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac" + } + ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "remoting_unittests",
diff --git a/testing/buildbot/client.v8.fyi.json b/testing/buildbot/client.v8.fyi.json index 5f5434d..0ab8e8a 100644 --- a/testing/buildbot/client.v8.fyi.json +++ b/testing/buildbot/client.v8.fyi.json
@@ -1186,6 +1186,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1218,6 +1219,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1250,6 +1252,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1282,6 +1285,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1323,6 +1327,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1364,6 +1369,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1397,6 +1403,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1429,6 +1436,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1463,6 +1471,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1497,6 +1506,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "gpu": "8086:0a2e", "os": "Mac-10.15.5" } @@ -1770,6 +1780,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13" } ], @@ -1800,6 +1811,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { + "cpu": "x86-64", "os": "Mac-10.13" } ],
diff --git a/testing/buildbot/generate_buildbot_json.py b/testing/buildbot/generate_buildbot_json.py index e08711e..3b4ddafb 100755 --- a/testing/buildbot/generate_buildbot_json.py +++ b/testing/buildbot/generate_buildbot_json.py
@@ -1894,7 +1894,8 @@ # by this script already. self.resolve_configuration_files() ungenerated_files = set() - for filename, expected_contents in self.generate_outputs().items(): + outputs = self.generate_outputs() + for filename, expected_contents in outputs.items(): expected = self.jsonify(expected_contents) file_path = filename + '.json' current = self.read_file(self.pyl_file_path(file_path)) @@ -1916,6 +1917,31 @@ 'autogenerated by generate_buildbot_json.py: ' + ', '.join([filename + '.json' for filename in ungenerated_files])) + for builder_group, builders in outputs.items(): + for builder, step_types in builders.items(): + for step_data in step_types.get('gtest_tests', []): + step_name = step_data.get('name', step_data['test']) + self._check_swarming_config(builder_group, builder, step_name, + step_data) + for step_data in step_types.get('isolated_scripts', []): + step_name = step_data.get('name', step_data['isolate_name']) + self._check_swarming_config(builder_group, builder, step_name, + step_data) + + def _check_swarming_config(self, filename, builder, step_name, step_data): + # TODO(crbug.com/1203436): Ensure all swarming tests specify os and cpu, not + # just mac tests. + if ('mac' in builder.lower() + and step_data['swarming']['can_use_on_swarming_builders']): + dimension_sets = step_data['swarming'].get('dimension_sets') + if not dimension_sets: + raise BBGenErr('%s: %s / %s : os and cpu must be specified for mac ' + 'swarmed tests' % (filename, builder, step_name)) + for s in dimension_sets: + if not s.get('os') or not s.get('cpu'): + raise BBGenErr('%s: %s / %s : os and cpu must be specified for mac ' + 'swarmed tests' % (filename, builder, step_name)) + def check_consistency(self, verbose=False): self.check_input_file_consistency(verbose) # pragma: no cover self.check_output_file_consistency(verbose) # pragma: no cover
diff --git a/testing/buildbot/generate_buildbot_json_unittest.py b/testing/buildbot/generate_buildbot_json_unittest.py index 83c8982..ab603c27 100755 --- a/testing/buildbot/generate_buildbot_json_unittest.py +++ b/testing/buildbot/generate_buildbot_json_unittest.py
@@ -5800,5 +5800,143 @@ self.assertFalse(fbb.printed_lines) +MAC_TEST_SUITE = """\ +{ + 'basic_suites': { + 'foo_tests': { + 'foo_test': { + }, + }, + }, +} +""" + +MAC_GTESTS_WATERFALL = """\ +[ + { + 'project': 'chromium', + 'bucket': 'ci', + 'name': 'chromium.test', + 'machines': { + 'Mac': { + 'swarming': { + 'can_use_on_swarming_builders': True, + }, + 'test_suites': { + 'gtest_tests': 'foo_tests', + }, + }, + }, + }, +] +""" + +MAC_GTEST_WATERFALL_OUTPUT = """\ +{ + "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {}, + "AAAAA2 See generate_buildbot_json.py to make changes": {}, + "Mac": { + "gtest_tests": [ + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "foo_test" + } + ] + } +} +""" + +MAC_ISOLATED_SCRIPTS_WATERFALL = """\ +[ + { + 'project': 'chromium', + 'bucket': 'ci', + 'name': 'chromium.test', + 'machines': { + 'Mac': { + 'swarming': { + 'dimension_sets': [ + { + 'os': 'Mac', + }, + ], + }, + 'test_suites': { + 'isolated_scripts': 'foo_tests', + }, + }, + }, + }, +] +""" + +MAC_ISOLATED_SCRIPTS_WATERFALL_OUTPUT = """\ +{ + "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {}, + "AAAAA2 See generate_buildbot_json.py to make changes": {}, + "Mac": { + "isolated_scripts": [ + { + "isolate_name": "foo_test", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "foo_test", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Mac" + } + ] + } + } + ] + } +} +""" + +MAC_LUCI_MILO_CFG = """\ +consoles { + builders { + name: "buildbucket/luci.chromium.ci/Mac" + } +} +""" + + +class SwarmingTests(TestCase): + def test_mac_builder_with_no_cpu_dimension_in_gtest_fails(self): + fbb = FakeBBGen(self.args, MAC_GTESTS_WATERFALL, MAC_TEST_SUITE, + MAC_LUCI_MILO_CFG) + self.create_testing_buildbot_json_file('chromium.test.json', + MAC_GTEST_WATERFALL_OUTPUT) + fbb.check_input_file_consistency(verbose=True) + self.assertRaisesRegexp(generate_buildbot_json.BBGenErr, + 'os and cpu', + fbb.check_output_file_consistency, + verbose=True) + self.assertFalse(fbb.printed_lines) + + def test_mac_builder_with_no_cpu_dimension_in_isolated_script_fails(self): + fbb = FakeBBGen(self.args, MAC_ISOLATED_SCRIPTS_WATERFALL, MAC_TEST_SUITE, + MAC_LUCI_MILO_CFG) + self.create_testing_buildbot_json_file( + 'chromium.test.json', MAC_ISOLATED_SCRIPTS_WATERFALL_OUTPUT) + fbb.check_input_file_consistency(verbose=True) + self.assertRaisesRegexp(generate_buildbot_json.BBGenErr, + 'os and cpu', + fbb.check_output_file_consistency, + verbose=True) + self.assertFalse(fbb.printed_lines) + + if __name__ == '__main__': unittest.main()
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl index 803692b..b3a3e4e4 100644 --- a/testing/buildbot/mixins.pyl +++ b/testing/buildbot/mixins.pyl
@@ -565,6 +565,7 @@ 'mac_10.11': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'os': 'Mac-10.11', }, }, @@ -572,6 +573,7 @@ 'mac_10.13': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'os': 'Mac-10.13.6', }, }, @@ -579,6 +581,7 @@ 'mac_10.14': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'os': 'Mac-10.14.6', }, }, @@ -586,21 +589,24 @@ 'mac_10.15': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'os': 'Mac-10.15', }, }, }, - 'mac_11': { + 'mac_11_beta_x64': { 'swarming': { 'dimensions': { - 'os': 'Mac-11|Mac-10.16', + 'cpu': 'x86-64', + 'os': 'Mac-11.3', }, }, }, - 'mac_11_beta': { + 'mac_11_x64': { 'swarming': { 'dimensions': { - 'os': 'Mac-11.3', + 'cpu': 'x86-64', + 'os': 'Mac-11|Mac-10.16', }, }, }, @@ -616,6 +622,7 @@ 'mac_mini_10.12': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'gpu': '8086:0a2e', 'os': 'Mac-10.12.6', }, @@ -624,6 +631,7 @@ 'mac_mini_10.14': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'gpu': '8086:0a2e', 'os': 'Mac-10.14.6', }, @@ -632,6 +640,7 @@ 'mac_mini_intel_gpu_experimental': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'gpu': '8086:0a2e', 'os': 'Mac-10.15.5', }, @@ -640,6 +649,7 @@ 'mac_mini_intel_gpu_stable': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'gpu': '8086:0a2e', 'os': 'Mac-10.15.5', }, @@ -652,6 +662,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'gpu': '8086:0a2e', 'os': 'Mac-10.15.5', }, @@ -661,6 +672,7 @@ 'mac_mini_intel_uhd_630_gpu_stable': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'gpu': '8086:3e9b', 'os': 'Mac-10.15.7', }, @@ -669,6 +681,7 @@ 'mac_pro_amd_gpu': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'gpu': '1002:679e', 'os': 'Mac-10.12.6', 'pool': 'chromium.tests.gpu', @@ -679,6 +692,7 @@ # Currently same configuration as stable version below. 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'gpu': '1002:6821', 'hidpi': '1', 'os': 'Mac-10.14.6', @@ -689,6 +703,7 @@ 'mac_retina_amd_gpu_stable': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'gpu': '1002:6821', 'hidpi': '1', 'os': 'Mac-10.14.6', @@ -703,6 +718,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'gpu': '1002:6821', 'hidpi': '1', 'os': 'Mac-10.14.6', @@ -715,6 +731,7 @@ # Currently the same as the stable version. 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'gpu': '10de:0fe9', 'hidpi': '1', 'os': 'Mac-10.14.6', @@ -725,6 +742,7 @@ 'mac_retina_nvidia_gpu_stable': { 'swarming': { 'dimensions': { + 'cpu': 'x86-64', 'gpu': '10de:0fe9', 'hidpi': '1', 'os': 'Mac-10.14.6', @@ -743,6 +761,16 @@ ], }, }, + 'mac_x64': { + 'swarming': { + 'dimension_sets': [ + { + 'os': 'Mac', + 'cpu': 'x86-64', + }, + ], + }, + }, 'marshmallow': { 'swarming': { 'dimensions': {
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index b2491c7e..0525ab2 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -242,6 +242,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'gpu': 'none', 'os': 'Mac-10.11.6', }, @@ -3157,6 +3158,7 @@ }, 'android-weblayer-pie-x86-wpt-smoketest': { 'args': [ + '--default-exclude', '--include-file=../../third_party/blink/web_tests/android/WPTSmokeTestCases' ], 'swarming': {
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 2833f0e1..b2f2438a 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -1750,6 +1750,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'os': 'Mac-10.13', }, ], @@ -1759,6 +1760,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'os': 'Mac-10.13', }, ],
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl index ff630b7..00cffd7 100644 --- a/testing/buildbot/variants.pyl +++ b/testing/buildbot/variants.pyl
@@ -331,13 +331,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--impl-version=91', ], - 'identifier': 'Implementation Library Skew Tests For 91.0.4472.25', + 'identifier': 'Implementation Library Skew Tests For 91.0.4472.27', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M91', - 'revision': 'version:91.0.4472.25', + 'revision': 'version:91.0.4472.27', } ], }, @@ -355,13 +355,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--impl-version=90', ], - 'identifier': 'Implementation Library Skew Tests For 90.0.4430.96', + 'identifier': 'Implementation Library Skew Tests For 90.0.4430.100', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M90', - 'revision': 'version:90.0.4430.96', + 'revision': 'version:90.0.4430.100', } ], }, @@ -403,13 +403,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--impl-version=91', ], - 'identifier': 'Implementation Library Skew Tests For 91.0.4472.25', + 'identifier': 'Implementation Library Skew Tests For 91.0.4472.27', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M91', - 'revision': 'version:91.0.4472.25', + 'revision': 'version:91.0.4472.27', } ], }, @@ -427,13 +427,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--impl-version=90', ], - 'identifier': 'Implementation Library Skew Tests For 90.0.4430.96', + 'identifier': 'Implementation Library Skew Tests For 90.0.4430.100', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M90', - 'revision': 'version:90.0.4430.96', + 'revision': 'version:90.0.4430.100', } ], }, @@ -475,13 +475,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--client-version=91', ], - 'identifier': 'Client Library Skew Tests For 91.0.4472.25', + 'identifier': 'Client Library Skew Tests For 91.0.4472.27', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M91', - 'revision': 'version:91.0.4472.25', + 'revision': 'version:91.0.4472.27', } ], }, @@ -499,13 +499,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--client-version=90', ], - 'identifier': 'Client Library Skew Tests For 90.0.4430.96', + 'identifier': 'Client Library Skew Tests For 90.0.4430.100', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M90', - 'revision': 'version:90.0.4430.96', + 'revision': 'version:90.0.4430.100', } ], },
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 5496b9f..ffa2cc8 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -2050,6 +2050,9 @@ }, }, 'ToTMac': { + 'mixins': [ + 'mac_x64', + ], 'test_suites': { 'gtest_tests': 'chromium_mac_gtests', 'isolated_scripts': 'chromium_mac_rel_isolated_scripts_and_sizes', @@ -2059,6 +2062,9 @@ ], }, 'ToTMac (dbg)': { + 'mixins': [ + 'mac_x64', + ], 'additional_compile_targets': [ 'all', ], @@ -2067,6 +2073,9 @@ }, }, 'ToTMacASan': { + 'mixins': [ + 'mac_x64', + ], 'test_suites': { 'gtest_tests': 'chromium_mac_gtests', }, @@ -2081,6 +2090,7 @@ 'ToTMacOfficial': { 'mixins': [ 'chrome-tester-service-account', + 'mac_x64', ], 'test_suites': { 'gtest_tests': 'chromium_mac_gtests', @@ -2525,6 +2535,9 @@ }, }, 'mac-rel-swarming': { + 'mixins': [ + 'mac_x64', + ], 'test_suites': { 'gtest_tests': 'chromium_swarm_desktop_gtests', }, @@ -3315,7 +3328,7 @@ 'mixins': [ 'intel_iris_5100', 'limited_capacity_bot', - 'mac_11_beta', + 'mac_11_beta_x64', ], 'test_suites': { 'gtest_tests': 'chromium_mac_gtests_no_nacl', @@ -3354,6 +3367,7 @@ 'swarming': { 'dimension_sets': [ { # This should match Mac10.12 Tests on chromium.mac. + 'cpu': 'x86-64', 'gpu': '8086:0a2e', 'hidpi': '0', 'os': 'Mac-10.12.6', @@ -3367,6 +3381,7 @@ { # This matches the dimensions for "Chromium Mac10.13" in # chromium_fyi.py. + 'cpu': 'x86-64', 'gpu': '8086:0a2e', 'hidpi': '0', 'os': 'Mac-10.13.6', @@ -3395,6 +3410,7 @@ { # This matches the dimensions for "Chromium Mac10.15" in # chromium_fyi.py. + 'cpu': 'x86-64', 'gpu': '8086:0a2e', 'hidpi': '0', 'os': 'Mac-10.15', @@ -3408,7 +3424,7 @@ }, 'mac11.0-blink-rel-dummy': { 'mixins': [ - 'mac_11', + 'mac_11_x64', ], 'swarming': { 'dimension_sets': [ @@ -3556,6 +3572,9 @@ # Due to disk shortage on Mac, we build 'chrome' instead of 'all'. # See crbug.com/899425 'Chromium Mac Goma RBE Staging': { + 'mixins': [ + 'mac_x64', + ], 'additional_compile_targets': [ 'chrome', ], @@ -3564,6 +3583,9 @@ }, }, 'Chromium Mac Goma RBE Staging (clobber)': { + 'mixins': [ + 'mac_x64', + ], 'additional_compile_targets': [ 'chrome', ], @@ -3572,6 +3594,9 @@ }, }, 'Chromium Mac Goma RBE Staging (dbg)': { + 'mixins': [ + 'mac_x64', + ], 'additional_compile_targets': [ 'chrome', ], @@ -3580,6 +3605,9 @@ }, }, 'Chromium Mac Goma RBE ToT': { + 'mixins': [ + 'mac_x64', + ], 'additional_compile_targets': [ 'chrome', ], @@ -5161,7 +5189,7 @@ }, 'Mac11 Tests': { 'mixins': [ - 'mac_11', + 'mac_11_x64', ], 'test_suites': { 'gtest_tests': 'chromium_mac_gtests_no_nacl', @@ -5352,6 +5380,9 @@ ], }, 'Mac ASan 64 Tests (1)': { + 'mixins': [ + 'mac_x64', + ], 'test_suites': { 'gtest_tests': 'chromium_mac_gtests', }, @@ -5629,6 +5660,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'pool': 'chromium.updater.mac', 'os': 'Mac-10.11', } @@ -5642,6 +5674,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'pool': 'chromium.updater.mac', 'os': 'Mac-10.12', } @@ -5655,6 +5688,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'pool': 'chromium.updater.mac', 'os': 'Mac-10.13', } @@ -5668,6 +5702,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'pool': 'chromium.updater.mac', 'os': 'Mac-10.14', } @@ -5681,6 +5716,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'pool': 'chromium.updater.mac', 'os': 'Mac-10.15', } @@ -5694,6 +5730,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'pool': 'chromium.updater.mac', 'os': 'Mac-10.15', } @@ -5707,6 +5744,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'pool': 'chromium.updater.mac', 'os': 'Mac-11', 'cpu': 'x86-64', @@ -5853,6 +5891,7 @@ 'WebRTC Chromium Mac Tester': { 'mixins': [ 'chromium-webrtc-rel-mac', + 'mac_x64', ], 'test_suites': { 'gtest_tests': 'webrtc_chromium_tests_with_baremetal_tests', @@ -6283,6 +6322,7 @@ 'swarming': { 'dimension_sets': [ { + 'cpu': 'x86-64', 'os': 'Mac-10.13', }, ],
diff --git a/testing/scripts/run_android_wpt.py b/testing/scripts/run_android_wpt.py index 13f428ab..2ee8c95e 100755 --- a/testing/scripts/run_android_wpt.py +++ b/testing/scripts/run_android_wpt.py
@@ -125,6 +125,8 @@ # By default, WPT will treat unexpected passes as errors, so we disable # that to be consistent with Chromium CI. rest_args.extend(['--no-fail-on-unexpected-pass']) + if self.options.default_exclude: + rest_args.extend(['--default-exclude']) # vpython has packages needed by wpt, so force it to skip the setup rest_args.extend(['--venv=' + SRC_DIR, '--skip-venv-setup']) @@ -265,6 +267,10 @@ parser.add_argument('--include-file', action=WPTPassThroughArgs, help='A file listing test(s) to run') + parser.add_argument('--default-exclude', action='store_true', default=False, + help="Only run the tests explicitly given in arguments." + "No tests will run if the list is empty, and the " + "program will exit with status code 0.") parser.add_argument('--list-tests', action=WPTPassThroughArgs, nargs=0, help="Don't run any tests, just print out a list of" ' tests that would be run.')
diff --git a/third_party/android_deps/build.gradle b/third_party/android_deps/build.gradle index 734e010..02d7f9f3 100644 --- a/third_party/android_deps/build.gradle +++ b/third_party/android_deps/build.gradle
@@ -115,6 +115,9 @@ // the full guava and one that supports android. compile "com.google.guava:guava:30.1-android" + // Needed by androidx. + compile "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3" + // buildCompile targets have supports_android = false. buildCompile "com.google.guava:guava:30.1-jre" @@ -156,7 +159,7 @@ buildCompileNoDeps "com.android.tools:sdk-common:${androidToolsVersion}" buildCompileNoDeps "com.android.tools:common:${androidToolsVersion}" buildCompileNoDeps "com.android.tools.layoutlib:layoutlib-api:${androidToolsVersion}" - buildCompile "org.jetbrains.kotlin:kotlin-stdlib:1.4.30" + buildCompile "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" androidTestCompile "com.googlecode.java-diff-utils:diffutils:1.3.0" // Version 1.2 is needed by espresso-web, but we'll newer 1.2.1.
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/3pp/fetch.py b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/3pp/fetch.py index b048603..ce1d2a9 100755 --- a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/3pp/fetch.py +++ b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/3pp/fetch.py
@@ -12,9 +12,9 @@ import json import os -_FILE_URL = 'https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.30/kotlin-stdlib-1.4.30.jar' -_FILE_NAME = 'kotlin-stdlib-1.4.30.jar' -_FILE_VERSION = '1.4.30' +_FILE_URL = 'https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar' +_FILE_NAME = 'kotlin-stdlib-1.4.32.jar' +_FILE_VERSION = '1.4.32' def do_latest():
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/3pp/fetch.py b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/3pp/fetch.py index 1e1806a1..c59dc7e 100755 --- a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/3pp/fetch.py +++ b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/3pp/fetch.py
@@ -12,9 +12,9 @@ import json import os -_FILE_URL = 'https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.30/kotlin-stdlib-common-1.4.30.jar' -_FILE_NAME = 'kotlin-stdlib-common-1.4.30.jar' -_FILE_VERSION = '1.4.30' +_FILE_URL = 'https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar' +_FILE_NAME = 'kotlin-stdlib-common-1.4.32.jar' +_FILE_VERSION = '1.4.32' def do_latest():
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/3pp/3pp.pb b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/3pp/3pp.pb new file mode 100644 index 0000000..5d13586c --- /dev/null +++ b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/3pp/3pp.pb
@@ -0,0 +1,17 @@ +# Copyright 2021 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 is generated, do not edit. Update BuildConfigGenerator.groovy instead. + +create { + source { + script { name: "fetch.py" } + patch_version: "cr0" + } +} + +upload { + pkg_prefix: "chromium/third_party/android_deps/libs" + universal: true +}
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/3pp/fetch.py b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/3pp/fetch.py new file mode 100755 index 0000000..5fb4600f --- /dev/null +++ b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/3pp/fetch.py
@@ -0,0 +1,56 @@ +#!/usr/bin/env python +# Copyright 2021 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 is generated, do not edit. Update BuildConfigGenerator.groovy and +# 3ppFetch.template instead. + +from __future__ import print_function + +import argparse +import json +import os + +_FILE_URL = 'https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-android/1.4.3/kotlinx-coroutines-android-1.4.3.jar' +_FILE_NAME = 'kotlinx-coroutines-android-1.4.3.jar' +_FILE_VERSION = '1.4.3' + + +def do_latest(): + print(_FILE_VERSION) + + +def get_download_url(version): + if _FILE_URL.endswith('.jar'): + ext = '.jar' + elif _FILE_URL.endswith('.aar'): + ext = '.aar' + else: + raise Exception('Unsupported extension for %s' % _FILE_URL) + + partial_manifest = { + 'url': [_FILE_URL], + 'name': [_FILE_NAME], + 'ext': ext, + } + print(json.dumps(partial_manifest)) + + +def main(): + ap = argparse.ArgumentParser() + sub = ap.add_subparsers() + + latest = sub.add_parser("latest") + latest.set_defaults(func=lambda _opts: do_latest()) + + download = sub.add_parser("get_url") + download.set_defaults( + func=lambda _opts: get_download_url(os.environ['_3PP_VERSION'])) + + opts = ap.parse_args() + opts.func(opts) + + +if __name__ == '__main__': + main()
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/3pp/3pp.pb b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/3pp/3pp.pb new file mode 100644 index 0000000..5d13586c --- /dev/null +++ b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/3pp/3pp.pb
@@ -0,0 +1,17 @@ +# Copyright 2021 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 is generated, do not edit. Update BuildConfigGenerator.groovy instead. + +create { + source { + script { name: "fetch.py" } + patch_version: "cr0" + } +} + +upload { + pkg_prefix: "chromium/third_party/android_deps/libs" + universal: true +}
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/3pp/fetch.py b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/3pp/fetch.py new file mode 100755 index 0000000..4369f4c --- /dev/null +++ b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/3pp/fetch.py
@@ -0,0 +1,56 @@ +#!/usr/bin/env python +# Copyright 2021 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 is generated, do not edit. Update BuildConfigGenerator.groovy and +# 3ppFetch.template instead. + +from __future__ import print_function + +import argparse +import json +import os + +_FILE_URL = 'https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.4.3/kotlinx-coroutines-core-jvm-1.4.3.jar' +_FILE_NAME = 'kotlinx-coroutines-core-jvm-1.4.3.jar' +_FILE_VERSION = '1.4.3' + + +def do_latest(): + print(_FILE_VERSION) + + +def get_download_url(version): + if _FILE_URL.endswith('.jar'): + ext = '.jar' + elif _FILE_URL.endswith('.aar'): + ext = '.aar' + else: + raise Exception('Unsupported extension for %s' % _FILE_URL) + + partial_manifest = { + 'url': [_FILE_URL], + 'name': [_FILE_NAME], + 'ext': ext, + } + print(json.dumps(partial_manifest)) + + +def main(): + ap = argparse.ArgumentParser() + sub = ap.add_subparsers() + + latest = sub.add_parser("latest") + latest.set_defaults(func=lambda _opts: do_latest()) + + download = sub.add_parser("get_url") + download.set_defaults( + func=lambda _opts: get_download_url(os.environ['_3PP_VERSION'])) + + opts = ap.parse_args() + opts.func(opts) + + +if __name__ == '__main__': + main()
diff --git a/third_party/blink/common/loader/record_load_histograms.cc b/third_party/blink/common/loader/record_load_histograms.cc index 2823576..b28b64a 100644 --- a/third_party/blink/common/loader/record_load_histograms.cc +++ b/third_party/blink/common/loader/record_load_histograms.cc
@@ -21,16 +21,10 @@ if (destination == network::mojom::RequestDestination::kDocument) { base::UmaHistogramSparse("Net.ErrorCodesForMainFrame4", -net_error); - if (GURL::SchemeIsCryptographic(origin.scheme())) { - if (origin.host() == "www.google.com") { - base::UmaHistogramSparse("Net.ErrorCodesForHTTPSGoogleMainFrame3", - -net_error); - } - - if (net::IsTLS13ExperimentHost(origin.host())) { - base::UmaHistogramSparse("Net.ErrorCodesForTLS13ExperimentMainFrame2", - -net_error); - } + if (GURL::SchemeIsCryptographic(origin.scheme()) && + origin.host() == "www.google.com") { + base::UmaHistogramSparse("Net.ErrorCodesForHTTPSGoogleMainFrame3", + -net_error); } } else { if (destination == network::mojom::RequestDestination::kImage) {
diff --git a/third_party/blink/public/common/use_counter/use_counter_feature.h b/third_party/blink/public/common/use_counter/use_counter_feature.h index 6af3ea6..ec831672 100644 --- a/third_party/blink/public/common/use_counter/use_counter_feature.h +++ b/third_party/blink/public/common/use_counter/use_counter_feature.h
@@ -16,6 +16,9 @@ public: using EnumValue = uint32_t; + // The default constructor should only be called by mojom interface. + UseCounterFeature() = default; + UseCounterFeature(mojom::UseCounterFeatureType type, EnumValue value); // Getters.
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl index bfe43bd..2220ff7 100644 --- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl +++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -718,8 +718,10 @@ type AttributionReportingIssueType extends string enum PermissionPolicyDisabled + InvalidAttributionSourceEventId InvalidAttributionData AttributionSourceUntrustworthyOrigin + AttributionUntrustworthyOrigin # Details for issues around "Attribution Reporting API" usage. # Explainer: https://github.com/WICG/conversion-measurement-api
diff --git a/third_party/blink/public/mojom/devtools/inspector_issue.mojom b/third_party/blink/public/mojom/devtools/inspector_issue.mojom index 5495df0..64c0e9b 100644 --- a/third_party/blink/public/mojom/devtools/inspector_issue.mojom +++ b/third_party/blink/public/mojom/devtools/inspector_issue.mojom
@@ -175,8 +175,10 @@ enum AttributionReportingIssueType { kPermissionPolicyDisabled, + kInvalidAttributionSourceEventId, kInvalidAttributionData, kAttributionSourceUntrustworthyOrigin, + kAttributionUntrustworthyOrigin, }; struct AttributionReportingIssue {
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc index 1d5fbf46..01e0e2c 100644 --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -589,29 +589,13 @@ NotifyListenersCanvasChanged(); did_notify_listeners_for_current_frame_ = true; - // Propagate the |dirty_rect_| accumulated so far to the compositor - // before restarting with a blank dirty rect. - // Canvas content updates do not need to be propagated as - // paint invalidations if the canvas is composited separately, since - // the canvas contents are sent separately through a texture layer. - if (layout_box && (!context_ || !context_->IsComposited())) { - // If the content box is larger than |src_rect|, the canvas's image is - // being stretched, so we need to account for color bleeding caused by the - // interpolation filter. - FloatRect src_rect(0, 0, Size().Width(), Size().Height()); - if (content_rect.Width() > src_rect.Width() || - content_rect.Height() > src_rect.Height()) { - dirty_rect_.Inflate(0.5); - } - - dirty_rect_.Intersect(src_rect); - PhysicalRect mapped_dirty_rect( - EnclosingIntRect(MapRect(dirty_rect_, src_rect, content_rect))); - layout_box->InvalidatePaintRectangle(mapped_dirty_rect); + if (layout_box && !ShouldBeDirectComposited()) { + // If the canvas is not composited, propagate the paint invalidation to + // |layout_box| as the painted result will change. + layout_box->SetShouldDoFullPaintInvalidation(); } - dirty_rect_ = FloatRect(); - DCHECK(dirty_rect_.IsEmpty()); + dirty_rect_ = FloatRect(); } void HTMLCanvasElement::Reset() {
diff --git a/third_party/blink/renderer/core/html/conversion_measurement_parsing.cc b/third_party/blink/renderer/core/html/conversion_measurement_parsing.cc index 7e11191..d819613 100644 --- a/third_party/blink/renderer/core/html/conversion_measurement_parsing.cc +++ b/third_party/blink/renderer/core/html/conversion_measurement_parsing.cc
@@ -102,11 +102,11 @@ impression_data_string.ToUInt64Strict(&impression_data_is_valid); if (!impression_data_is_valid) { - ReportAttributionIssue( - frame, - mojom::blink::AttributionReportingIssueType::kInvalidAttributionData, - frame->GetDevToolsFrameToken(), element, base::nullopt, - impression_data_string); + ReportAttributionIssue(frame, + mojom::blink::AttributionReportingIssueType:: + kInvalidAttributionSourceEventId, + frame->GetDevToolsFrameToken(), element, + base::nullopt, impression_data_string); } // Provide a default of 0 if the impression data was not valid.
diff --git a/third_party/blink/renderer/core/inspector/inspector_issue_conversion.cc b/third_party/blink/renderer/core/inspector/inspector_issue_conversion.cc index 5e8e4f1..30b86d1 100644 --- a/third_party/blink/renderer/core/inspector/inspector_issue_conversion.cc +++ b/third_party/blink/renderer/core/inspector/inspector_issue_conversion.cc
@@ -327,6 +327,10 @@ return protocol::Audits::AttributionReportingIssueTypeEnum:: PermissionPolicyDisabled; case blink::mojom::blink::AttributionReportingIssueType:: + kInvalidAttributionSourceEventId: + return protocol::Audits::AttributionReportingIssueTypeEnum:: + InvalidAttributionSourceEventId; + case blink::mojom::blink::AttributionReportingIssueType:: kInvalidAttributionData: return protocol::Audits::AttributionReportingIssueTypeEnum:: InvalidAttributionData; @@ -334,6 +338,10 @@ kAttributionSourceUntrustworthyOrigin: return protocol::Audits::AttributionReportingIssueTypeEnum:: AttributionSourceUntrustworthyOrigin; + case blink::mojom::blink::AttributionReportingIssueType:: + kAttributionUntrustworthyOrigin: + return protocol::Audits::AttributionReportingIssueTypeEnum:: + AttributionUntrustworthyOrigin; } }
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc index 5155ab81..4e103872 100644 --- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
@@ -472,24 +472,6 @@ if (!IsBaselineAlignedForDirection(track_direction)) return false; - // If the grid item and grid container have parallel writing directions, - // then the baseline is calculated as an offset in the opposite direction - // of the container. Otherwise, it's an orthogonal grid item and it's - // calculated as an offset in the parallel direction of the container. - if ((track_direction == kForRows) == - IsParallelWritingMode(container_style.GetWritingMode(), - node.Style().GetWritingMode())) { - return true; - } - - // "If a box spans multiple shared alignment contexts, then it - // participates in first/last baseline alignment within its start-most/ - // end-most shared alignment context along that axis", so we only need to - // look at the start index for baseline/first-baseline support. - // https://www.w3.org/TR/css-align-3/#baseline-sharing-group - const auto& track_size = - track_collection.SetAt(SetIndices(track_direction).begin).TrackSize(); - // "If baseline alignment is specified on a grid item whose size in that // axis depends on the size of an intrinsically-sized track (whose size is // therefore dependent on both the item’s size and baseline alignment, @@ -499,15 +481,34 @@ // as “intrinsically-sized” when the grid container has an indefinite size // in the relevant axis." // https://drafts.csswg.org/css-grid-2/#row-align - // // TODO(kschmi) - this is not complete, as flex items should also count if - // the container has a definite size. However, this will require some - // additional refactoring, as we hit later asserts when we try to - // calculate the baseline for these items. It will fix - // grid-self-baseline-not-applied-if-sizing-cyclic-dependency related - // tests. - return (track_size.HasFixedMinTrackBreadth() && - track_size.HasFixedMaxTrackBreadth()); + // the container has a definite size. These will require a second pass for + // the remaining scenarios in grid-self-baseline-not-applied-if-sizing- + // cyclic-dependency tests. + if (!IsSpanningFlexibleTrack(track_direction) && + !IsSpanningIntrinsicTrack(track_direction)) { + return true; + } + + const bool is_parallel_to_baseline_axis = + (track_direction == kForRows) == + IsParallelWritingMode(container_style.GetWritingMode(), + node.Style().GetWritingMode()); + + // TODO(kschmi) - should this also include 'fit-content'? And should + // 'auto' sizing only apply here if the track size is indefinite? + if (is_parallel_to_baseline_axis) { + return !node.Style().LogicalHeight().IsPercentOrCalc() && + !node.Style().LogicalMinHeight().IsPercentOrCalc() && + !node.Style().LogicalMaxHeight().IsPercentOrCalc(); + } else { + // TODO(kschmi) - the 'IsAuto' condition is not consistent between these + // conditions, but matches legacy and passes the tests. + return !node.Style().LogicalWidth().IsPercentOrCalc() && + !node.Style().LogicalMinWidth().IsPercentOrCalc() && + !node.Style().LogicalMaxWidth().IsPercentOrCalc() && + !node.Style().LogicalWidth().IsAuto(); + } }; // Revert to start edges if an item requests baseline alignment but does not
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items.cc index 48986a0..37822d94 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items.cc
@@ -8,6 +8,7 @@ #include "third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h" #include "third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h" +#include "third_party/blink/renderer/platform/heap/collection_support/clear_collection_scope.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" namespace blink { @@ -95,6 +96,8 @@ wtf_size_t item_index; }; HeapHashMap<Member<const LayoutObject>, LastItem> last_items; + ClearCollectionScope<HeapHashMap<Member<const LayoutObject>, LastItem>> + clear_scope(&last_items); wtf_size_t item_index = 0; for (const auto& result : results) { const auto& fragment =
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc index b4bac77..2c182a5 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
@@ -39,6 +39,7 @@ #include "third_party/blink/renderer/platform/fonts/shaping/run_segmenter.h" #include "third_party/blink/renderer/platform/fonts/shaping/shape_result_spacing.h" #include "third_party/blink/renderer/platform/fonts/shaping/shape_result_view.h" +#include "third_party/blink/renderer/platform/heap/collection_support/clear_collection_scope.h" #include "third_party/blink/renderer/platform/wtf/text/character_names.h" #include "third_party/blink/renderer/platform/wtf/text/string_buffer.h" @@ -579,6 +580,7 @@ const unsigned end_offset = old_length - matched_length; DCHECK_LE(start_offset, end_offset); HeapVector<NGInlineItem> items; + ClearCollectionScope<HeapVector<NGInlineItem>> clear_scope(&items); // +3 for before and after replaced text. items.ReserveInitialCapacity(data_->items.size() + 3); @@ -921,6 +923,7 @@ // already there in NGInlineNodeData. For efficiency, we should make // |builder| not construct items and text content. HeapVector<NGInlineItem> items; + ClearCollectionScope<HeapVector<NGInlineItem>> clear_scope(&items); items.ReserveCapacity(EstimateInlineItemsCount(*layout_block_flow)); NGInlineItemsBuilderForOffsetMapping builder(layout_block_flow, &items); builder.GetOffsetMappingBuilder().ReserveCapacity( @@ -994,6 +997,7 @@ // NGSVGTextLayoutAttributesBuilder, and are discarded because they might // be different from final ones. HeapVector<NGInlineItem> items; + ClearCollectionScope<HeapVector<NGInlineItem>> clear_scope(&items); items.ReserveCapacity(EstimateInlineItemsCount(*block)); NGInlineItemsBuilderForOffsetMapping items_builder(block, &items); items_builder.GetOffsetMappingBuilder().ReserveCapacity(
diff --git a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h index 75fe04a..30315f4 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h +++ b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h
@@ -33,6 +33,14 @@ STACK_ALLOCATED(); public: + ~NGContainerFragmentBuilder() { + // Clear collections so the backing gets promptly freed, and reused. + oof_positioned_candidates_.clear(); + oof_positioned_fragmentainer_descendants_.clear(); + oof_positioned_descendants_.clear(); + multicols_with_pending_oofs_.clear(); + } + struct ChildWithOffset { DISALLOW_NEW(); ChildWithOffset(LogicalOffset offset, const NGPhysicalFragment* fragment)
diff --git a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc index 9a36c7b..3bf707a 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc
@@ -28,6 +28,7 @@ #include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" #include "third_party/blink/renderer/core/style/computed_style.h" +#include "third_party/blink/renderer/platform/heap/collection_support/clear_collection_scope.h" namespace blink { @@ -131,6 +132,8 @@ HandleMulticolsWithPendingOOFs(container_builder_); if (container_builder_->HasOutOfFlowFragmentainerDescendants()) { HeapVector<NGLogicalOutOfFlowPositionedNode> fragmentainer_descendants; + ClearCollectionScope<HeapVector<NGLogicalOutOfFlowPositionedNode>> + clear_scope(&fragmentainer_descendants); container_builder_->SwapOutOfFlowFragmentainerDescendants( &fragmentainer_descendants); DCHECK(!fragmentainer_descendants.IsEmpty()); @@ -158,6 +161,8 @@ return; HeapVector<NGLogicalOutOfFlowPositionedNode> candidates; + ClearCollectionScope<HeapVector<NGLogicalOutOfFlowPositionedNode>> + clear_scope(&candidates); container_builder_->SwapOutOfFlowPositionedCandidates(&candidates); // Special case: containing block is a split inline.
diff --git a/third_party/blink/renderer/core/loader/modulescript/OWNERS b/third_party/blink/renderer/core/loader/modulescript/OWNERS new file mode 100644 index 0000000..82febdf --- /dev/null +++ b/third_party/blink/renderer/core/loader/modulescript/OWNERS
@@ -0,0 +1,4 @@ +daniec@microsoft.com +hiroshige@chromium.org +kouhei@chromium.org +nhiroki@chromium.org
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index 2b1acd29..24d4ce6 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -507,7 +507,7 @@ // Determine the parent as soon as possible. // Every AXObject must have a parent unless it's the root. SetParent(parent); - DCHECK(parent_ || IsA<Document>(GetNode())) + DCHECK(parent_ || IsRoot()) << "The following node should have a parent: " << GetNode(); // The parent cannot have children. This object must be destroyed. @@ -517,6 +517,12 @@ << "\n* Child = " << ToString(true, true); SetNeedsToUpdateChildren(); // Should be called after role_ is set. + + // Ensure that the aria-owns relationship is set before attempting + // to update cached attribute values. + if (GetNode()) + AXObjectCache().MaybeNewRelationTarget(*GetNode(), this); + UpdateCachedAttributeValuesIfNeeded(false); } @@ -554,12 +560,23 @@ return !ax_object_cache_; } -void AXObject::SetParent(AXObject* new_parent) { - DCHECK(new_parent || IsA<Document>(GetNode())) +bool AXObject::IsRoot() const { + return GetNode() && GetNode() == &AXObjectCache().GetDocument(); +} + +void AXObject::SetParent(AXObject* new_parent) const { +#if DCHECK_IS_ON() + DCHECK(new_parent || IsRoot()) << "Parent cannot be null, except at the root, was null at " << GetNode() << " " << GetLayoutObject(); -#if DCHECK_IS_ON() + if (new_parent) { + DCHECK(!new_parent->IsDetached()) + << "Cannot set parent to a detached object:" + << "\n* Child: " << ToString(true, true) + << "\n* New parent: " << new_parent->ToString(true, true); + } + // Check to ensure that if the parent is changing from a previous parent, // that |this| is not still a child of that one. // This is similar to the IsParentUnignoredOf() check in @@ -582,6 +599,26 @@ parent_ = new_parent; } +bool AXObject::IsMissingParent() const { + if (!parent_) + return !IsRoot(); + + DCHECK(!parent_->IsDetached()) + << "Parent was detached:\n" + << "* Child = " << ToString(true, true) + << "\n* Parent = " << parent_->ToString(true, true); + + return false; +} + +void AXObject::RepairMissingParent() const { + DCHECK(IsMissingParent()); + + SetParent(ComputeParent()); + + DCHECK(parent_); +} + // In many cases, ComputeParent() is not called, because the parent adding // the parent adding the child will pass itself into AXObjectCacheImpl. // ComputeParent() is still necessary because some parts of the code, @@ -1927,10 +1964,8 @@ << GetDocument()->Lifecycle().ToString(); #endif // DCHECK_IS_ON() - // TODO(accessibility) Every AXObject must have a parent except the root. - // Sometimes the parent is detached and a new parent isn't yet reattached. - if (!parent_) - parent_ = ComputeParent(); + if (IsMissingParent()) + RepairMissingParent(); cached_is_hidden_via_style = ComputeIsHiddenViaStyle(); @@ -3997,9 +4032,8 @@ DCHECK(!IsVirtualObject()) << "A virtual object must have a parent, and cannot exist without one. " "The parent is set when the object is constructed."; - parent_ = ComputeParent(); - DCHECK(parent_ || IsA<Document>(GetNode())) - << "The following node should have a parent: " << GetNode(); + if (IsMissingParent()) + RepairMissingParent(); } else { if (parent_->IsDetached()) { // TODO(accessibility) This should never happen, but it fails @@ -5540,23 +5574,28 @@ string_builder = string_builder + " isDisplayLocked"; } } - if (const AXObject* aria_hidden_root = AriaHiddenRoot()) { - string_builder = string_builder + " ariaHiddenRoot"; - if (aria_hidden_root != this) { - string_builder = - string_builder + GetElementString(aria_hidden_root->GetElement()); + if (cached_values_only) { + if (cached_is_inert_or_aria_hidden_ && GetNode() && !GetNode()->IsInert()) + string_builder = string_builder + " ariaHidden"; + } else { + if (const AXObject* aria_hidden_root = AriaHiddenRoot()) { + string_builder = string_builder + " ariaHiddenRoot"; + if (aria_hidden_root != this) { + string_builder = + string_builder + GetElementString(aria_hidden_root->GetElement()); + } } } - if (GetDocument() && GetDocument()->Lifecycle().GetState() < - DocumentLifecycle::kLayoutClean) { - string_builder = string_builder + " styleInfoUnavailable"; - } else if (IsHiddenViaStyle()) { + if (cached_values_only ? cached_is_hidden_via_style : IsHiddenViaStyle()) string_builder = string_builder + " isHiddenViaCSS"; - } if (GetNode() && GetNode()->IsInert()) string_builder = string_builder + " isInert"; - if (NeedsToUpdateChildren()) + if (NeedsToUpdateChildren()) { string_builder = string_builder + " needsToUpdateChildren"; + } else if (!children_.IsEmpty()) { + string_builder = string_builder + " #children="; + string_builder = string_builder + String::Number(children_.size()); + } if (!GetLayoutObject()) string_builder = string_builder + " missingLayout";
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h index c57e5c14..989b38b 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -1106,7 +1106,7 @@ // Sets the parent AXObject directly. If the parent of this object is known, // this can be faster than using ComputeParent(). - void SetParent(AXObject* new_parent); + void SetParent(AXObject* new_parent) const; // If parent was not initialized during AddChildren() it can be computed by // walking the DOM (or layout for nodeless aka anonymous layout object). @@ -1125,6 +1125,16 @@ Node* node, LayoutObject* layout_object = nullptr); + // Returns true if |parent_| is null and not at the root. + bool IsMissingParent() const; + + // Compute a missing parent, and ask it to update children. + // Must only be called if IsMissingParent() is true. + void RepairMissingParent() const; + + // Is this the root of this object hierarchy. + bool IsRoot() const; + #if DCHECK_IS_ON() // When the parent on children during AddChildren(), take the opportunity to // check out ComputeParent() implementation. It should match.
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc index 47b3839..3ff2bfbe 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -1910,8 +1910,15 @@ // it could be handled in RoleChangedWithCleanLayout(), and the cached // parent could be used. AXObject* new_object = CreateAndInit(node, nullptr, retained_axid); - if (!new_object) - RemoveAXID(current); // Failed to create, so remove object completely. + if (new_object) { + // Any owned objects need to reset their parent_ to point to the + // new object. + relation_cache_->UpdateAriaOwnsWithCleanLayout(new_object, true); + } else { + // Failed to create, so remove object completely. + RemoveAXID(current); + } + return new_object; }; @@ -2441,8 +2448,14 @@ // from the table to rows and cells. RemoveAXObjectsInLayoutSubtree(obj); } else { - Remove(node); + // The children of this thing need to detach from parent. + Remove(obj); } + // The aria-owns relation may have changed if the role changed, + // because some roles allow aria-owns and others don't. + // In addition, any owned objects need to reset their parent_ to point + // to the new object. + relation_cache_->UpdateAriaOwnsWithCleanLayout(GetOrCreate(node), true); } }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc index cacc965..ec63424 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc
@@ -7,6 +7,7 @@ #include "base/memory/ptr_util.h" #include "third_party/blink/renderer/core/dom/element_traversal.h" #include "third_party/blink/renderer/core/html/forms/html_label_element.h" +#include "ui/accessibility/ax_common.h" namespace blink { @@ -178,7 +179,11 @@ removed_child->DetachFromParent(); // Recompute the real parent and cache it. AXObject* real_parent = removed_child->ParentObject(); - ChildrenChanged(real_parent); + SANITIZER_CHECK(real_parent) << "No parent to restore for object with " + "unmapped aria-owns, child is: " + << removed_child->ToString(true, true); + if (real_parent) + ChildrenChanged(real_parent); } } } @@ -193,17 +198,21 @@ // Now detach the object from its original parent and call childrenChanged // on the original parent so that it can recompute its list of children. - AXObject* original_parent = added_child->ParentObject(); - added_child->DetachFromParent(); - added_child->SetParent(const_cast<AXObject*>(owner)); - ChildrenChanged(original_parent); + AXObject* original_parent = added_child->CachedParentObject(); + if (original_parent != owner) { + added_child->DetachFromParent(); + added_child->SetParent(const_cast<AXObject*>(owner)); + if (original_parent) + ChildrenChanged(original_parent); + } } } void AXRelationCache::UpdateAriaOwnsFromAttrAssociatedElementsWithCleanLayout( AXObject* owner, const HeapVector<Member<Element>>& attr_associated_elements, - HeapVector<Member<AXObject>>& validated_owned_children_result) { + HeapVector<Member<AXObject>>& validated_owned_children_result, + bool force) { // attr-associated elements have already had their scope validated, but they // need to be further validated to determine if they introduce a cycle or are // already owned by another element. @@ -231,7 +240,7 @@ // Update the internal mappings of owned children. UpdateAriaOwnerToChildrenMappingWithCleanLayout( - owner, validated_owned_children_result); + owner, validated_owned_children_result, force); } void AXRelationCache::GetAriaOwnedChildren( @@ -250,7 +259,8 @@ } } -void AXRelationCache::UpdateAriaOwnsWithCleanLayout(AXObject* owner) { +void AXRelationCache::UpdateAriaOwnsWithCleanLayout(AXObject* owner, + bool force) { DCHECK(owner); if (!owner->CanHaveChildren()) return; @@ -277,7 +287,7 @@ UpdateAriaOwnsFromAttrAssociatedElementsWithCleanLayout( owner, element->GetElementArrayAttribute(html_names::kAriaOwnsAttr).value(), - owned_children); + owned_children, force); } else { // Figure out the ids that actually correspond to children that exist // and that we can legally own (not cyclical, not already owned, etc.) and @@ -304,12 +314,13 @@ // Update the internal validated mapping of owned children. This will // fire an event if the mapping has changed. - UpdateAriaOwnerToChildrenMappingWithCleanLayout(owner, owned_children); + UpdateAriaOwnerToChildrenMappingWithCleanLayout(owner, owned_children, force); } void AXRelationCache::UpdateAriaOwnerToChildrenMappingWithCleanLayout( AXObject* owner, - HeapVector<Member<AXObject>>& validated_owned_children_result) { + HeapVector<Member<AXObject>>& validated_owned_children_result, + bool force) { DCHECK(owner); if (!owner->CanHaveChildren()) return; @@ -322,7 +333,7 @@ // there are no changes. Vector<AXID> current_child_axids = aria_owner_to_children_mapping_.at(owner->AXObjectID()); - if (current_child_axids == validated_owned_child_axids) + if (!force && current_child_axids == validated_owned_child_axids) return; // The list of owned children has changed. Even if they were just reordered, @@ -334,6 +345,7 @@ #if DCHECK_IS_ON() // Owned children must be in tree to avoid serialization issues. for (AXObject* child : validated_owned_children_result) { + DCHECK(IsAriaOwned(child)); DCHECK(child->AccessibilityIsIncludedInTree()) << "Owned child not in tree: " << child->ToString(true, false) << "\nRecompute included in tree: "
diff --git a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.h b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.h index 3273803..4240ead 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.h +++ b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.h
@@ -80,7 +80,9 @@ // calls ChildrenChanged on all affected nodes (old and new parents). // This affects the tree, which is why it should only be called at a // specific time in the lifecycle. - void UpdateAriaOwnsWithCleanLayout(AXObject* owner); + // Pass |force=true| when the mappings must be updated even though the + // owned ids have not changed, e.g. when an object has been refreshed. + void UpdateAriaOwnsWithCleanLayout(AXObject* owner, bool force = false); static bool IsValidOwner(AXObject* owner); static bool IsValidOwnedChild(AXObject* child); @@ -94,7 +96,8 @@ void UpdateAriaOwnsFromAttrAssociatedElementsWithCleanLayout( AXObject* owner, const HeapVector<Member<Element>>& attr_associated_elements, - HeapVector<Member<AXObject>>& owned_children); + HeapVector<Member<AXObject>>& owned_children, + bool force); // If any object is related to this object via <label for>, aria-owns, // aria-describedby or aria-labeledby, update the text for the related object. @@ -109,7 +112,8 @@ // either the content attribute or the attr associated elements. void UpdateAriaOwnerToChildrenMappingWithCleanLayout( AXObject* owner, - HeapVector<Member<AXObject>>& validated_owned_children_result); + HeapVector<Member<AXObject>>& validated_owned_children_result, + bool force); // Whether the document has been scanned for initial relationships // first or not.
diff --git a/third_party/blink/renderer/modules/webcodecs/audio_frame.cc b/third_party/blink/renderer/modules/webcodecs/audio_frame.cc index 0bbe2c0..45398df 100644 --- a/third_party/blink/renderer/modules/webcodecs/audio_frame.cc +++ b/third_party/blink/renderer/modules/webcodecs/audio_frame.cc
@@ -51,7 +51,7 @@ buffer_.Clear(); } -uint64_t AudioFrame::timestamp() const { +int64_t AudioFrame::timestamp() const { return timestamp_; }
diff --git a/third_party/blink/renderer/modules/webcodecs/audio_frame.h b/third_party/blink/renderer/modules/webcodecs/audio_frame.h index ffac8bc..0164fbf3 100644 --- a/third_party/blink/renderer/modules/webcodecs/audio_frame.h +++ b/third_party/blink/renderer/modules/webcodecs/audio_frame.h
@@ -33,7 +33,7 @@ AudioFrame* clone(ExceptionState&); void close(); - uint64_t timestamp() const; + int64_t timestamp() const; AudioBuffer* buffer(); scoped_refptr<media::AudioBuffer> data() const { return data_; } @@ -46,7 +46,7 @@ scoped_refptr<media::AudioBuffer> data_; - uint64_t timestamp_; + int64_t timestamp_; Member<AudioBuffer> buffer_; };
diff --git a/third_party/blink/renderer/modules/webcodecs/audio_frame.idl b/third_party/blink/renderer/modules/webcodecs/audio_frame.idl index dd3f1b9..b832e18c 100644 --- a/third_party/blink/renderer/modules/webcodecs/audio_frame.idl +++ b/third_party/blink/renderer/modules/webcodecs/audio_frame.idl
@@ -14,6 +14,6 @@ void close(); - readonly attribute unsigned long long timestamp; // microseconds + readonly attribute long long timestamp; // microseconds readonly attribute AudioBuffer buffer; };
diff --git a/third_party/blink/renderer/modules/webcodecs/audio_frame_init.idl b/third_party/blink/renderer/modules/webcodecs/audio_frame_init.idl index 8af56fc1f..31328a9 100644 --- a/third_party/blink/renderer/modules/webcodecs/audio_frame_init.idl +++ b/third_party/blink/renderer/modules/webcodecs/audio_frame_init.idl
@@ -5,6 +5,6 @@ // https://github.com/WICG/web-codecs dictionary AudioFrameInit { - required unsigned long long timestamp; // microseconds + required long long timestamp; // microseconds required AudioBuffer buffer; };
diff --git a/third_party/blink/renderer/modules/webcodecs/audio_frame_test.cc b/third_party/blink/renderer/modules/webcodecs/audio_frame_test.cc index 4938f4c..e941d4a 100644 --- a/third_party/blink/renderer/modules/webcodecs/audio_frame_test.cc +++ b/third_party/blink/renderer/modules/webcodecs/audio_frame_test.cc
@@ -16,7 +16,7 @@ namespace { // Default test values -constexpr uint64_t kTimestampInMicroSeconds = 1234; +constexpr int64_t kTimestampInMicroSeconds = 1234; constexpr int kChannels = 2; constexpr int kFrames = 20; constexpr int kSampleRate = 8000;
diff --git a/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.cc b/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.cc index 80df9382..b1e56ba9 100644 --- a/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.cc +++ b/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.cc
@@ -35,7 +35,7 @@ return key_frame_ ? "key" : "delta"; } -uint64_t EncodedAudioChunk::timestamp() const { +int64_t EncodedAudioChunk::timestamp() const { return timestamp_.InMicroseconds(); }
diff --git a/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.h b/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.h index bc6b8c69..d7856e94 100644 --- a/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.h +++ b/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.h
@@ -26,7 +26,7 @@ // encoded_audio_chunk.idl implementation. String type() const; - uint64_t timestamp() const; + int64_t timestamp() const; DOMArrayBuffer* data() const; void Trace(Visitor* visitor) const override {
diff --git a/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.idl b/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.idl index dc3d80c..a2c69b73 100644 --- a/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.idl +++ b/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk.idl
@@ -13,7 +13,7 @@ ] interface EncodedAudioChunk { constructor(EncodedAudioChunkInit init); readonly attribute EncodedAudioChunkType type; - readonly attribute unsigned long long timestamp; // microseconds + readonly attribute long long timestamp; // microseconds readonly attribute ArrayBuffer data; // TODO(chcunningham): Duration? Or better yet, should we have a unified audio/video "chunk"?
diff --git a/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk_init.idl b/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk_init.idl index 7570e876..41ff977 100644 --- a/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk_init.idl +++ b/third_party/blink/renderer/modules/webcodecs/encoded_audio_chunk_init.idl
@@ -6,6 +6,6 @@ dictionary EncodedAudioChunkInit { required EncodedAudioChunkType type; - required unsigned long long timestamp; // microseconds + required long long timestamp; // microseconds required BufferSource data; };
diff --git a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.cc b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.cc index 436600b..a02ee05 100644 --- a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.cc +++ b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.cc
@@ -38,7 +38,7 @@ return key_frame_ ? "key" : "delta"; } -uint64_t EncodedVideoChunk::timestamp() const { +int64_t EncodedVideoChunk::timestamp() const { return timestamp_.InMicroseconds(); }
diff --git a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.h b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.h index f56d109..110d5ca 100644 --- a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.h +++ b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.h
@@ -26,7 +26,7 @@ // encoded_video_chunk.idl implementation. String type() const; - uint64_t timestamp() const; + int64_t timestamp() const; base::Optional<uint64_t> duration() const; DOMArrayBuffer* data() const;
diff --git a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.idl b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.idl index a5388a3e..035f745 100644 --- a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.idl +++ b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.idl
@@ -14,7 +14,7 @@ constructor(EncodedVideoChunkInit init); readonly attribute EncodedVideoChunkType type; // TODO: Add frame dependency information - readonly attribute unsigned long long timestamp; // microseconds + readonly attribute long long timestamp; // microseconds readonly attribute unsigned long long? duration; // microseconds readonly attribute ArrayBuffer data; };
diff --git a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk_init.idl b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk_init.idl index 986d321..a499ecf8 100644 --- a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk_init.idl +++ b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk_init.idl
@@ -6,7 +6,7 @@ dictionary EncodedVideoChunkInit { required EncodedVideoChunkType type; - required unsigned long long timestamp; // microseconds + required long long timestamp; // microseconds unsigned long long duration; // microseconds required BufferSource data; };
diff --git a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk_test.cc b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk_test.cc index d28d6330..4ab072ec 100644 --- a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk_test.cc +++ b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk_test.cc
@@ -28,7 +28,7 @@ TEST_F(EncodedVideoChunkTest, ConstructorAndAttributes) { String type = "key"; - uint64_t timestamp = 1000000; + int64_t timestamp = 1000000; std::string data = "test"; auto* init = EncodedVideoChunkInit::Create(); init->setTimestamp(timestamp); @@ -44,7 +44,7 @@ TEST_F(EncodedVideoChunkTest, ConstructorWithDuration) { String type = "key"; - uint64_t timestamp = 1000000; + int64_t timestamp = 1000000; uint64_t duration = 16667; std::string data = "test"; auto* init = EncodedVideoChunkInit::Create();
diff --git a/third_party/blink/renderer/modules/webcodecs/video_frame.cc b/third_party/blink/renderer/modules/webcodecs/video_frame.cc index 9c03d7b..e6915e5 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_frame.cc +++ b/third_party/blink/renderer/modules/webcodecs/video_frame.cc
@@ -790,7 +790,7 @@ return local_frame->natural_size().width(); } -base::Optional<uint64_t> VideoFrame::timestamp() const { +base::Optional<int64_t> VideoFrame::timestamp() const { auto local_frame = handle_->frame(); if (!local_frame || local_frame->timestamp() == media::kNoTimestamp) return base::nullopt;
diff --git a/third_party/blink/renderer/modules/webcodecs/video_frame.h b/third_party/blink/renderer/modules/webcodecs/video_frame.h index ff57c9ae..701fd96a 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_frame.h +++ b/third_party/blink/renderer/modules/webcodecs/video_frame.h
@@ -82,7 +82,7 @@ uint32_t displayWidth() const; uint32_t displayHeight() const; - base::Optional<uint64_t> timestamp() const; + base::Optional<int64_t> timestamp() const; base::Optional<uint64_t> duration() const; uint32_t allocationSize(VideoFrameReadIntoOptions* options, ExceptionState&);
diff --git a/third_party/blink/renderer/modules/webcodecs/video_frame.idl b/third_party/blink/renderer/modules/webcodecs/video_frame.idl index 46f7aad..a5bb250 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_frame.idl +++ b/third_party/blink/renderer/modules/webcodecs/video_frame.idl
@@ -23,7 +23,7 @@ readonly attribute FrozenArray<Plane>? planes; // Presentation timestamp, in microseconds. - readonly attribute unsigned long long? timestamp; + readonly attribute long long? timestamp; // Presentation duration, in microseconds. readonly attribute unsigned long long? duration;
diff --git a/third_party/blink/renderer/modules/webcodecs/video_frame_init.idl b/third_party/blink/renderer/modules/webcodecs/video_frame_init.idl index 62f7d8b..f9d8a2c 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_frame_init.idl +++ b/third_party/blink/renderer/modules/webcodecs/video_frame_init.idl
@@ -6,7 +6,7 @@ enum AlphaOption { "discard", "keep" }; dictionary VideoFrameInit { - unsigned long long timestamp; // microseconds + long long timestamp; // microseconds unsigned long long duration; // microseconds AlphaOption alpha = "keep"; };
diff --git a/third_party/blink/renderer/modules/webcodecs/video_frame_plane_init.idl b/third_party/blink/renderer/modules/webcodecs/video_frame_plane_init.idl index 1382c85..956fd30 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_frame_plane_init.idl +++ b/third_party/blink/renderer/modules/webcodecs/video_frame_plane_init.idl
@@ -5,7 +5,7 @@ // https://github.com/WICG/web-codecs dictionary VideoFramePlaneInit { - required unsigned long long timestamp; // microseconds + required long long timestamp; // microseconds unsigned long long duration; // microseconds required [EnforceRange] unsigned long codedWidth;
diff --git a/third_party/blink/renderer/platform/heap/BUILD.gn b/third_party/blink/renderer/platform/heap/BUILD.gn index 3450d18..ed62ca9 100644 --- a/third_party/blink/renderer/platform/heap/BUILD.gn +++ b/third_party/blink/renderer/platform/heap/BUILD.gn
@@ -54,6 +54,7 @@ sources = [ "blink_gc_memory_dump_provider.h", + "collection_support/clear_collection_scope.h", "collection_support/heap_deque.h", "collection_support/heap_hash_counted_set.h", "collection_support/heap_hash_map.h",
diff --git a/third_party/blink/renderer/platform/heap/collection_support/clear_collection_scope.h b/third_party/blink/renderer/platform/heap/collection_support/clear_collection_scope.h new file mode 100644 index 0000000..335521a --- /dev/null +++ b/third_party/blink/renderer/platform/heap/collection_support/clear_collection_scope.h
@@ -0,0 +1,28 @@ +// Copyright 2021 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_PLATFORM_HEAP_COLLECTION_SUPPORT_CLEAR_COLLECTION_SCOPE_H_ +#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_COLLECTION_SUPPORT_CLEAR_COLLECTION_SCOPE_H_ + +#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" + +// Scope to automatically promptly free the backing for a stack allocated +// collection. Use this to reduce floating garbage. Collections with inline +// capacity are automatically promptly freed so they do not need this. Usage: +// HeapVector<Foo> foo; +// ClearCollectionScope<HeapVector<Foo>> clear_scope(&foo); +// TODO(keishi): Limit T to heap collections. +template <typename T> +class ClearCollectionScope final { + STACK_ALLOCATED(); + + public: + explicit ClearCollectionScope(T* ptr) : ptr_(ptr) {} + ~ClearCollectionScope() { ptr_->clear(); } + + private: + T* ptr_; +}; + +#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_COLLECTION_SUPPORT_CLEAR_COLLECTION_SCOPE_H_
diff --git a/third_party/blink/renderer/platform/network/http_parsers.cc b/third_party/blink/renderer/platform/network/http_parsers.cc index b16bfc94..ce530ba 100644 --- a/third_party/blink/renderer/platform/network/http_parsers.cc +++ b/third_party/blink/renderer/platform/network/http_parsers.cc
@@ -252,7 +252,7 @@ ? base::make_optional(ConvertToBlink(in->critical_ch.value())) : base::nullopt, in->xfo, ConvertToBlink(in->link_headers), - ConvertToBlink(in->timing_allow_origin)); + ConvertToBlink(in->timing_allow_origin), in->bfcache_opt_in_unload); } } // namespace mojom
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index ce2e1d37..4461bbd 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1157,6 +1157,7 @@ // enabled, we'll typically fall back to legacy code for block children. name: "LayoutNGFullPositionForPoint", implied_by: ["LayoutNGBlockFragmentation", "LayoutNGFragmentTraversal"], + status: "stable", }, { name: "LayoutNGGrid",
diff --git a/third_party/blink/tools/BUILD.gn b/third_party/blink/tools/BUILD.gn index ba931a2..fc4788a 100644 --- a/third_party/blink/tools/BUILD.gn +++ b/third_party/blink/tools/BUILD.gn
@@ -59,6 +59,7 @@ "//third_party/blink/web_tests/android/ChromeWPTOverrideExpectations", "//third_party/blink/web_tests/android/WebviewWPTExpectations", "//third_party/blink/web_tests/android/AndroidWPTNeverFixTests", + "//third_party/blink/web_tests/android/WPTSmokeTestCases", ] }
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng index d8549d3..29737b9 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng +++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -930,6 +930,7 @@ crbug.com/958381 external/wpt/css/css-tables/tentative/rowspan-height-redistribution.html [ Failure ] crbug.com/958381 external/wpt/css/css-tables/tentative/table-height-redistribution.html [ Failure ] crbug.com/958381 external/wpt/css/css-tables/tentative/table-minmax.html [ Failure ] +crbug.com/958381 external/wpt/css/css-tables/tentative/tbody-height-redistribution.html [ Failure ] ### external/wpt/css/css-tables/tentative/paint/ crbug.com/958381 external/wpt/css/css-tables/tentative/paint/background-image-column-collapsed.html [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 2042c8a0..f5210b6 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -2551,12 +2551,6 @@ crbug.com/626703 [ Mac11.0 ] external/wpt/websockets/basic-auth.any.sharedworker.html?wpt_flags=h2 [ Failure Timeout ] crbug.com/626703 [ Mac11.0 ] external/wpt/webvtt/api/VTTCue/constructor.html [ Failure Timeout ] crbug.com/626703 [ Mac11.0 ] virtual/synchronous_html_parser/external/wpt/dom/xslt/transformToFragment.tentative.window.html [ Failure Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Close-1000-reason.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Close-1000-verify-code.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Close-1005-verify-code.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Close-1005.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Close-Reason-124Bytes.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Send-data.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/websockets/Send-binary-arraybufferview-float32.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/websockets/Send-binary-arraybufferview-uint16-offset-length.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/websockets/Send-binary-arraybufferview-uint8-offset.any.html?wpt_flags=h2 [ Timeout ] @@ -2636,43 +2630,30 @@ crbug.com/626703 [ Mac10.14 ] external/wpt/websockets/Close-readyState-Closing.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] virtual/plz-service-worker/external/wpt/service-workers/service-worker/no-dynamic-import-in-module.any.serviceworker-module.html [ Failure Crash ] crbug.com/1167095 [ Linux ] virtual/synchronous_html_parser/external/wpt/html/semantics/forms/form-submission-0/multipart-formdata.window.html [ Failure Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-binary-arraybufferview-float64.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-server-initiated-close.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-null.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/stream/tentative/constructor.any.worker.html?wpt_flags=h2 [ Failure Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/html/cross-origin-embedder-policy/shared-workers.html [ Failure Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/url/url-constructor.any.worker.html [ Failure Crash ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Create-valid-url-array-protocols.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win10 ] external/wpt/webrtc-encoded-transform/sframe-keys.https.html [ Failure Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Send-0byte-data.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/bufferedAmount-unchanged-by-sync-xhr.any.sharedworker.html?wpt_flags=h2 [ Failure Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/websockets/stream/tentative/backpressure-send.any.html?wpt_flags=h2 [ Failure Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-paired-surrogates.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/shared-workers.html [ Failure Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Close-1000.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/websockets/Send-binary-blob.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win10 ] external/wpt/html/cross-origin-embedder-policy/cross-origin-isolated-permission.https.html [ Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/websockets/Send-unpaired-surrogates.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/websockets/Create-valid-url-protocol-string.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-unicode-data.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] virtual/plz-dedicated-worker/external/wpt/service-workers/service-worker/xhr-content-length.https.window.html [ Failure Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Create-url-with-space.any.worker.html?wpt_flags=h2 [ Failure Crash ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-unpaired-surrogates.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/css/css-sizing/aspect-ratio/grid-aspect-ratio-018.html [ Failure ] crbug.com/626703 [ Mac10.15 ] virtual/plz-dedicated-worker/external/wpt/service-workers/service-worker/no-dynamic-import-in-module.any.serviceworker-module.html [ Failure Crash ] crbug.com/626703 [ Mac10.14 ] external/wpt/websockets/Send-data.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] virtual/composite-bgcolor-animation/external/wpt/css/css-backgrounds/parsing/background-image-computed.sub.html [ Failure Crash ] crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/binaryType-wrong-value.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Create-valid-url-binaryType-blob.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-readyState-Closed.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/service-workers/service-worker/xhr-content-length.https.window.html [ Failure Crash Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/service-workers/service-worker/fetch-event.https.html [ Failure Crash Timeout ] crbug.com/1167095 [ Mac ] external/wpt/html/semantics/forms/form-submission-0/multipart-formdata.window.html [ Pass Failure Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/webrtc-encoded-transform/sframe-transform-buffer-source.html [ Failure Crash Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/websockets/Close-1000-reason.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Send-data.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Close-4999-reason.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 external/wpt/websockets/stream/tentative/close.any.worker.html?wpt_flags=h2 [ Failure Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/binaryType-wrong-value.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/binaryType-wrong-value.any.worker.html?wpt_flags=h2 [ Timeout ] @@ -2687,7 +2668,6 @@ crbug.com/626703 [ Win ] external/wpt/websockets/Close-2999-reason.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 external/wpt/websockets/Create-valid-url.any.html?wpt_flags=h2 [ Crash Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-null.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-null.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-null.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-2999-reason.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-2999-reason.any.html?wpt_flags=h2 [ Timeout ] @@ -2715,8 +2695,6 @@ crbug.com/626703 [ Win ] external/wpt/websockets/Close-4999-reason.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 external/wpt/websockets/Send-binary-arraybufferview-uint32-offset.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-0byte-data.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-0byte-data.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-0byte-data.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-0byte-data.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac ] virtual/plz-service-worker/external/wpt/html/cross-origin-embedder-policy/multi-globals/workers-coep-report.https.html [ Failure Crash ] crbug.com/626703 [ Win ] virtual/plz-service-worker/external/wpt/html/cross-origin-embedder-policy/multi-globals/workers-coep-report.https.html [ Failure Crash ] @@ -2738,11 +2716,8 @@ crbug.com/626703 [ Mac11.0 ] external/wpt/websockets/Send-unpaired-surrogates.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-unpaired-surrogates.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-1005-verify-code.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-1005-verify-code.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-1005-verify-code.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-1005-verify-code.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-unicode-data.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-unicode-data.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-unicode-data.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-binary-arraybufferview-int8.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac ] external/wpt/websockets/Send-binary-arraybufferview-int8.any.html?wpt_flags=h2 [ Timeout ] @@ -2759,8 +2734,6 @@ crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-data.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-data.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-3000-reason.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-3000-reason.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-3000-reason.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-3000-reason.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-readyState-Closing.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-readyState-Closing.any.worker.html?wpt_flags=h2 [ Timeout ] @@ -2769,15 +2742,10 @@ crbug.com/626703 [ Mac11.0 ] external/wpt/websockets/Close-readyState-Closing.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-readyState-Closing.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-binary-arraybufferview-float64.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-binary-arraybufferview-float64.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-binary-arraybufferview-float64.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Create-extensions-empty.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Create-extensions-empty.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Create-extensions-empty.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Create-extensions-empty.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-4999-reason.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-4999-reason.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-4999-reason.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-4999-reason.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-1000-verify-code.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-1000-verify-code.any.html?wpt_flags=h2 [ Timeout ] @@ -2797,15 +2765,10 @@ crbug.com/626703 [ Win ] external/wpt/websockets/Close-server-initiated-close.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 external/wpt/websockets/Close-3000-verify-code.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-1005.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-1005.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-1005.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-1005.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-paired-surrogates.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-paired-surrogates.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-paired-surrogates.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] virtual/plz-service-worker/external/wpt/service-workers/service-worker/fetch-event.https.html [ Failure Crash ] crbug.com/626703 [ Win10 ] virtual/plz-service-worker/external/wpt/service-workers/service-worker/fetch-event.https.html [ Failure Crash ] @@ -2830,8 +2793,6 @@ crbug.com/626703 [ Mac10.15 ] external/wpt/fetch/api/basic/http-response-code.any.worker.html [ Failure Crash ] crbug.com/626703 [ Win10 ] external/wpt/fetch/api/basic/http-response-code.any.worker.html [ Failure Crash ] crbug.com/626703 [ Linux ] external/wpt/websockets/Create-valid-url.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Create-valid-url.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Create-valid-url.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Create-valid-url.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Create-valid-url-protocol.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Create-valid-url-protocol.any.html?wpt_flags=h2 [ Timeout ] @@ -2861,13 +2822,8 @@ crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/stream/tentative/constructor.any.sharedworker.html?wpt_flags=h2 [ Failure Crash ] crbug.com/626703 [ Win10 ] external/wpt/websockets/stream/tentative/constructor.any.sharedworker.html?wpt_flags=h2 [ Failure Crash ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-1000-reason.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-1000-reason.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-1000-reason.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-1000-reason.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-onlyReason.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-onlyReason.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Close-onlyReason.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-onlyReason.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-onlyReason.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] virtual/synchronous_html_parser/external/wpt/html/semantics/forms/form-submission-0/text-plain.window.html [ Failure Crash ] crbug.com/626703 [ Win10 ] virtual/synchronous_html_parser/external/wpt/html/semantics/forms/form-submission-0/text-plain.window.html [ Failure Crash ] @@ -2879,8 +2835,6 @@ crbug.com/626703 [ Mac10.15 ] external/wpt/fetch/api/basic/http-response-code.any.sharedworker.html [ Failure Crash ] crbug.com/626703 [ Win10 ] external/wpt/fetch/api/basic/http-response-code.any.sharedworker.html [ Failure Crash ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-Reason-124Bytes.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-Reason-124Bytes.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-Reason-124Bytes.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-Reason-124Bytes.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Create-extensions-empty.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac ] external/wpt/websockets/Create-extensions-empty.any.worker.html?wpt_flags=h2 [ Timeout ] @@ -2948,14 +2902,10 @@ crbug.com/1167095 [ Mac ] virtual/synchronous_html_parser/external/wpt/html/semantics/forms/form-submission-0/multipart-formdata.window.html [ Pass Failure Crash ] crbug.com/1167095 [ Win10 ] virtual/synchronous_html_parser/external/wpt/html/semantics/forms/form-submission-0/multipart-formdata.window.html [ Failure Crash ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-unicode-data.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-unicode-data.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-unicode-data.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-unicode-data.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac ] external/wpt/FileAPI/file/send-file-formdata-controls.html [ Failure Crash ] crbug.com/626703 [ Win ] external/wpt/FileAPI/file/send-file-formdata-controls.html [ Failure Crash ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-1000-verify-code.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-1000-verify-code.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-1000-verify-code.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-1000-verify-code.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/stream/tentative/abort.any.serviceworker.html?wpt_flags=h2 [ Failure Crash ] crbug.com/626703 [ Win10 ] external/wpt/websockets/stream/tentative/abort.any.serviceworker.html?wpt_flags=h2 [ Failure Crash ] @@ -2967,8 +2917,6 @@ crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-1000-reason.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-1000-reason.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Create-valid-url-array-protocols.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Create-valid-url-array-protocols.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Create-valid-url-array-protocols.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Create-valid-url-array-protocols.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/stream/tentative/backpressure-send.any.html?wpt_flags=h2 [ Failure Timeout ] crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/stream/tentative/backpressure-send.any.html?wpt_flags=h2 [ Failure Timeout ] @@ -2978,9 +2926,6 @@ crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-0byte-data.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-0byte-data.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-server-initiated-close.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-server-initiated-close.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Close-server-initiated-close.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-server-initiated-close.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-server-initiated-close.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-binary-arraybufferview-float32.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-binary-arraybufferview-float32.any.html?wpt_flags=h2 [ Timeout ] @@ -2988,8 +2933,6 @@ crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-binary-arraybufferview-float32.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-binary-arraybufferview-float32.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-1000.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-1000.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-1000.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-1000.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-binary-blob.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-binary-blob.any.html?wpt_flags=h2 [ Timeout ] @@ -3018,14 +2961,12 @@ crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Create-valid-url-protocol-string.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Create-valid-url-protocol-string.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-unpaired-surrogates.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-unpaired-surrogates.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-unpaired-surrogates.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/binaryType-wrong-value.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/binaryType-wrong-value.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/binaryType-wrong-value.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/binaryType-wrong-value.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Create-valid-url-binaryType-blob.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Create-valid-url-binaryType-blob.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Create-valid-url-binaryType-blob.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-binary-arraybufferview-int32.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-binary-arraybufferview-int32.any.worker.html?wpt_flags=h2 [ Timeout ] @@ -3033,13 +2974,8 @@ crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-binary-arraybufferview-int32.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-binary-arraybufferview-int32.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-65K-data.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-65K-data.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Send-65K-data.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-65K-data.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-65K-data.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-data.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-data.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-data.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-data.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/css/css-sizing/aspect-ratio/grid-aspect-ratio-021.html [ Failure ] crbug.com/626703 [ Mac10.12 ] external/wpt/css/css-sizing/aspect-ratio/grid-aspect-ratio-021.html [ Failure ] @@ -3057,21 +2993,12 @@ crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-binary-65K-arraybuffer.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-binary-65K-arraybuffer.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Create-valid-url-protocol.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Create-valid-url-protocol.any.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Create-valid-url-protocol.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Create-valid-url-protocol.any.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-data.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-data.worker.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-data.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-data.worker.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Send-binary-arraybufferview-uint32-offset.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Send-binary-arraybufferview-uint32-offset.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/websockets/Send-binary-arraybufferview-uint32-offset.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Send-binary-arraybufferview-uint32-offset.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Send-binary-arraybufferview-uint32-offset.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/websockets/Close-3000-verify-code.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.12 ] external/wpt/websockets/Close-3000-verify-code.any.html?wpt_flags=h2 [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/websockets/Close-3000-verify-code.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 [ Win ] external/wpt/websockets/Close-3000-verify-code.any.html?wpt_flags=h2 [ Timeout ] crbug.com/626703 external/wpt/websockets/stream/tentative/close.any.html?wpt_flags=h2 [ Failure Timeout ] crbug.com/626703 external/wpt/websockets/stream/tentative/close.any.sharedworker.html?wpt_flags=h2 [ Failure Timeout ] @@ -4254,6 +4181,7 @@ virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-031.html [ Pass ] virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-035.html [ Pass ] virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-036.html [ Pass ] +virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-baseline-align-cycles-001.html [ Pass ] virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-001.html [ Pass ] virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-002.html [ Pass ] virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-006.html [ Pass ] @@ -4301,7 +4229,6 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-005.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html [ Crash Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html [ Failure ] @@ -6312,6 +6239,9 @@ crbug.com/1046784 http/tests/devtools/oopif/oopif-storage.js [ Pass Failure ] crbug.com/1046784 http/tests/inspector-protocol/service-worker/target-reloaded-after-crash.js [ Pass Failure Timeout ] +# Disabled to unblock https://crrev.com/c/2846892 +crbug.com/1195927 http/tests/devtools/sources/debugger/live-edit.js [ Pass Failure ] + # Sheriff 2020-01-28 crbug.com/1046201 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Pass Failure ] crbug.com/1046440 fast/loader/submit-form-while-parsing-2.html [ Pass Failure Timeout ] @@ -7319,3 +7249,31 @@ # Sheriff 2021-04-27 crbug.com/1203309 [ Linux ] http/tests/devtools/tracing/trace-event-self-time.js [ Pass Failure ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-1000-reason.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-1000-verify-code.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-1000.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-1005-verify-code.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-1005.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-3000-reason.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-3000-verify-code.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-4999-reason.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-Reason-124Bytes.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-onlyReason.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Close-server-initiated-close.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Create-extensions-empty.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Create-valid-url-array-protocols.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Create-valid-url-binaryType-blob.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Create-valid-url-protocol.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Create-valid-url.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-0byte-data.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-65K-data.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-binary-arraybufferview-float64.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-binary-arraybufferview-uint32-offset.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-data.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-data.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-null.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-paired-surrogates.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-unicode-data.any.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-unicode-data.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ] +crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-unpaired-surrogates.any.html?wpt_flags=h2 [ Pass Failure Timeout ]
diff --git a/third_party/blink/web_tests/WebGPUExpectations b/third_party/blink/web_tests/WebGPUExpectations index 4e31478..caee6f3 100644 --- a/third_party/blink/web_tests/WebGPUExpectations +++ b/third_party/blink/web_tests/WebGPUExpectations
@@ -29,7 +29,6 @@ wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,compressed,non_array:format="bc7-rgba-unorm";* [ Failure ] wpt_internal/webgpu/cts.html?q=webgpu:api,validation,createTexture:sampleCount,various_sampleCount_with_all_formats:* [ Failure Crash ] crbug.com/dawn/759 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,rendering,draw:vertex_attributes,basic:* [ Failure ] -crbug.com/1203413 [ Mac ] wpt_internal/webgpu/cts.html?worker=1&q=webgpu:api,validation,buffer,mapping:* [ Crash ] # Fails or crashes on numerous combinations of backends, hardware, and validation layers wpt_internal/webgpu/cts.html?q=webgpu:api,operation,render_pass,resolve:* [ Skip ] @@ -123,11 +122,13 @@ # These tests aren't working on CQ, unclear whether the test or harness (or Chrome) is broken. # Mac: mostly works # Linux: actual is white/blank - is actually crashing silently -crbug.com/1083478 [ Linux ] wpt_internal/webgpu/webgpu/web_platform/reftests/canvas_clear.html [ Skip ] -crbug.com/1083478 [ Linux ] wpt_internal/webgpu/webgpu/web_platform/reftests/canvas_complex_bgra8unorm.html [ Skip ] +crbug.com/1083478 [ Linux ] wpt_internal/webgpu/web_platform/reftests/canvas_clear.html [ Skip ] +crbug.com/1083478 [ Linux ] wpt_internal/webgpu/web_platform/reftests/canvas_complex_bgra8unorm.html [ Skip ] # Win: takeScreenshot crashes -crbug.com/1083478 [ Win ] wpt_internal/webgpu/webgpu/web_platform/reftests/canvas_clear.html [ Skip ] -crbug.com/1083478 [ Win ] wpt_internal/webgpu/webgpu/web_platform/reftests/canvas_complex_bgra8unorm.html [ Skip ] +crbug.com/1083478 [ Win ] wpt_internal/webgpu/web_platform/reftests/canvas_clear.html [ Skip ] +crbug.com/1083478 [ Win ] wpt_internal/webgpu/web_platform/reftests/canvas_complex_bgra8unorm.html [ Skip ] +# Mac: Shifted by about half a pixel +crbug.com/1083478 [ Mac ] wpt_internal/webgpu/web_platform/reftests/canvas_complex_bgra8unorm.html [ Failure ] # Spec was changed so BGLs should eagerly apply per-pipeline limits. Tests need fixing, then Dawn # needs to pass them. https://github.com/gpuweb/cts/issues/230 @@ -181,8 +182,9 @@ # Failure in both D3D12 and Vulkan validation layers wpt_internal/webgpu/cts.html?q=webgpu:api,validation,encoding,cmds,index_access:* [ Skip ] -# Assert in debug build -crbug.com/dawn/614 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,createBindGroup:* [ Crash ] +# Assert in debug builds +crbug.com/dawn/614 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="sampledTexMS" [ Crash ] +crbug.com/dawn/614 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="sampledTexMS" [ Crash ] # Crash with validation layers (Vulkan/D3D12). crbug.com/dawn/615 wpt_internal/webgpu/cts.html?q=webgpu:api,operation,vertex_state,index_format:* [ Skip ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-tables/tentative/tbody-height-redistribution.html b/third_party/blink/web_tests/external/wpt/css/css-tables/tentative/tbody-height-redistribution.html new file mode 100644 index 0000000..61b304ff --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-tables/tentative/tbody-height-redistribution.html
@@ -0,0 +1,144 @@ +<!doctype html> +<title>TBODY redistribution</title> +<script src='/resources/testharness.js'></script> +<script src='/resources/testharnessreport.js'></script> +<script src="/resources/check-layout-th.js"></script> +<link rel='stylesheet' href='../support/base.css' /> +<link rel="author" title="Aleks Totic" href="atotic@chromium.org" /> +<link rel="help" href="https://www.w3.org/TR/css-tables-3/#height-distribution-algorithm" /> +<style> + main table { + border-collapse: collapse; + background: #DDD; + } + main td { + padding: 0; + } + main td .empty { + line-height: 0; + } + main tbody tr:nth-child(1) { + background: rgba(255, 156, 0, 0.5); + } + main tbody tr:nth-child(2) { + background: rgba(255, 255, 0, 0.5); + } + main tbody tr:nth-child(3) { + background: rgba(0, 255, 0, 0.5); + } +</style> +<main> +<h1>TBODY/THEAD/TFOOT height redistribution.</h1> +<li>FF passes most of the tests. +<li>Legacy Chrome does not distribute TBODY height to rows. +<li>At the time this test was written, there was no spec. Currently, spec is in the process of being written. + +<p>1) Empty row group's size is 0 with collapsed borders</p> +<table id="one" style="border-collapse: collapse;border-spacing: 10px 10px;border:10px solid green" + data-expected-width="0" data-expected-height="0"> + <tbody> + <tr> </tr> + </tbody> +</table> +<p>2) Empty row group's size is 0 with separate borders.</p> +<table id="two" style="border-collapse: separate;border-spacing: 10px 10px;border:10px solid green" + data-expected-width="20" data-expected-height="20"> + <tbody> + <tr> </tr> + </tbody> +</table> +<p>3) Row group height is redistributed to unconstrained rows in proportion to their size.</p> +<table id="three"> + <tbody style="height:100px" data-expected-height="100"> + <tr data-expected-height="25"> + <td><div style="height:10px" >0,0</div></td> + </tr> + <tr data-expected-height="75"> + <td><div style="height:30px" >0,0</div></td> + </tr> + </tbody> +</table> +<p>4) Constrained fixed rows do not grow if there are unconstrained rows</p> +<table id="four"> + <tbody style="height:100px"> + <tr style="height: 10px" data-expected-height="10"> + <td></td> + </tr> + <tr data-expected-height="90"> + <td>0,1</td> + </tr> + </tbody> +</table> +<p>5) Constrained percentage are resolved against row group height.</p> +<table id="five"> + <tbody style="height:100px"> + <tr style="height:25%" data-expected-height="25"> + <td>0,0</td> + </tr> + <tr style="height:50%" data-expected-height="50"> + <td>0,0</td> + </tr> + <tr data-expected-height="25"> + <td>0,2</td> + </tr> + </tbody> +</table> +<p>6) Row group height is treated as min-height.</p> +<table id="six"> + <tbody style="height:100px" data-expected-height="125"> + <tr style="height:125px"> + <td>0,0</td> + </tr> + </tbody> +</table> +<p>7) Constrained/unconstrained mix: row group height is distributed to unconstrained cells.</p> +<table id="seven"> + <tbody style="height:100px"> + <tr style="height:20px" data-expected-height="20"><td>0,0</td></tr> + <tr style="height:30px" data-expected-height="30"><td>0,1</td></tr> + <tr data-expected-height="25"><td>0,2</td></tr> + <tr data-expected-height="25"><td>0,3</td></tr> + </tbody> +</table> +<p>8) Unconstrained empty rows grow to fill table if all other rows are constrained. Not in FF.</p> +<table id="eight"> + <tbody style="height:100px"> + <tr style="height:20px" data-expected-height="20"><td>0,0</td></tr> + <tr style="height:30px" data-expected-height="30"><td>0,1</td></tr> + <tr data-expected-height="50"><td></td></tr> + </tbody> +</table> +<br> +<table id="eightplus"> + <tbody style="height:100px"> + <tr data-expected-height="50"><td></td></tr> + <tr style="height:20px" data-expected-height="20"><td>0,1</td></tr> + <tr style="height:30px" data-expected-height="30"><td>0,2</td></tr> + </tbody> +</table> +<p>9) Empty section's height is ignored.</p> +<table id="nine" > + <tbody style="height:75px" data-expected-height="0"> + </tbody> +</table> +<p>10) Section with empty rows is not considered empty.</p> +<p>In FF, empty section height is 100, but table's height is 0?</p> +<table id="nine" > + <tbody style="height:75px" data-expected-height="75"> + <tr data-expected-height="25"></tr> + <tr data-expected-height="25"></tr> + <tr data-expected-height="25"></tr> + </tbody> +</table> +<p>11) Mixed constrained and unconstrained empty rows: only unconstrained rows grow.</p> + <table id="ten" style="width:50px"> + <tbody style="height:50px" data-expected-height="50"> + <tr style="height:0" data-expected-height="0"><td></td></tr> + <tr data-expected-height="25"><td></td></tr> + <tr data-expected-height="25"><td></td></tr> + </tbody> +</table> +</main> +<script> + checkLayout("table"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/audio-decoder.any.js b/third_party/blink/web_tests/external/wpt/webcodecs/audio-decoder.any.js index 35db6de..9cb08d8 100644 --- a/third_party/blink/web_tests/external/wpt/webcodecs/audio-decoder.any.js +++ b/third_party/blink/web_tests/external/wpt/webcodecs/audio-decoder.any.js
@@ -229,6 +229,35 @@ description: view(buffer, opus.description) }); + let ts = 0; + opus.frames.forEach(chunk => { + decoder.decode(new EncodedAudioChunk( + {type: 'key', timestamp: -ts, data: view(buffer, chunk)})); + ts += opus.duration; + }); + + await decoder.flush(); + assert_equals(numOutputs, opus.frames.length, 'outputs'); +}, 'Test Opus decoding with a negative timestamp'); + +promise_test(async t => { + let buffer = await opus.buffer(); + let numOutputs = 0; + let decoder = new AudioDecoder({ + output: t.step_func(frame => { + frame.close(); + ++numOutputs; + }), + error: t.unreached_func() + }); + + decoder.configure({ + codec: opus.codec, + sampleRate: opus.sampleRate, + numberOfChannels: opus.numberOfChannels, + description: view(buffer, opus.description) + }); + decoder.decode(new EncodedAudioChunk( {type: 'key', timestamp: 0, data: view(buffer, opus.frames[0])}));
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/audio-encoder.any.js b/third_party/blink/web_tests/external/wpt/webcodecs/audio-encoder.any.js index 2aece5d0..654c301 100644 --- a/third_party/blink/web_tests/external/wpt/webcodecs/audio-encoder.any.js +++ b/third_party/blink/web_tests/external/wpt/webcodecs/audio-encoder.any.js
@@ -74,10 +74,50 @@ assert_equals(outputs[0].timestamp, 0, "first chunk timestamp"); for (chunk of outputs) { assert_greater_than(chunk.data.byteLength, 0); - assert_greater_than(timestamp_us, chunk.timestamp); + assert_greater_than_equal(timestamp_us, chunk.timestamp); } }, 'Simple audio encoding'); +promise_test(async t => { + let sample_rate = 48000; + let total_duration_s = 1; + let frame_count = 10; + let outputs = []; + let init = { + error: e => { + assert_unreached('error: ' + e); + }, + output: chunk => { + outputs.push(chunk); + } + }; + + let encoder = new AudioEncoder(init); + + assert_equals(encoder.state, 'unconfigured'); + let config = { + codec: 'opus', + sampleRate: sample_rate, + numberOfChannels: 2, + bitrate: 256000 // 256kbit + }; + + encoder.configure(config); + + let timestamp_us = -10000; + let frame = make_audio_frame( + timestamp_us, config.numberOfChannels, config.sampleRate, 10000); + encoder.encode(frame); + frame.close(); + await encoder.flush(); + encoder.close(); + assert_greater_than_equal(outputs.length, 1); + assert_equals(outputs[0].timestamp, -10000, 'first chunk timestamp'); + for (chunk of outputs) { + assert_greater_than(chunk.data.byteLength, 0); + assert_greater_than_equal(chunk.timestamp, timestamp_us); + } +}, 'Encode audio with negative timestamp'); async function checkEncodingError(config, good_frames, bad_frame) { let error = null;
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/audio-frame.any.js b/third_party/blink/web_tests/external/wpt/webcodecs/audio-frame.any.js index fe8ab84..039a6d1 100644 --- a/third_party/blink/web_tests/external/wpt/webcodecs/audio-frame.any.js +++ b/third_party/blink/web_tests/external/wpt/webcodecs/audio-frame.any.js
@@ -2,18 +2,19 @@ // META: script=/common/media.js // META: script=/webcodecs/utils.js -var defaultInit = { - timestamp: 1234, - channels: 2, - sampleRate: 8000, - frames: 100, -} +var defaultInit = + { + timestamp: 1234, + channels: 2, + sampleRate: 8000, + frames: 100, + } -function createDefaultAudioFrame() { - return make_audio_frame(defaultInit.timestamp, - defaultInit.channels, - defaultInit.sampleRate, - defaultInit.frames); +function +createDefaultAudioFrame() { + return make_audio_frame( + defaultInit.timestamp, defaultInit.channels, defaultInit.sampleRate, + defaultInit.frames); } test(t => { @@ -23,30 +24,24 @@ sampleRate: defaultInit.sampleRate }); - let audioFrameInit = { - timestamp : defaultInit.timestamp, - buffer: localBuffer - } + let audioFrameInit = {timestamp: defaultInit.timestamp, buffer: localBuffer} let frame = new AudioFrame(audioFrameInit); - assert_equals(frame.timestamp, defaultInit.timestamp, "timestamp"); - assert_equals(frame.buffer.length, defaultInit.frames, "frames"); - assert_equals(frame.buffer.numberOfChannels, defaultInit.channels, "channels"); - assert_equals(frame.buffer.sampleRate, defaultInit.sampleRate, "sampleRate"); + assert_equals(frame.timestamp, defaultInit.timestamp, 'timestamp'); + assert_equals(frame.buffer.length, defaultInit.frames, 'frames'); + assert_equals( + frame.buffer.numberOfChannels, defaultInit.channels, 'channels'); + assert_equals(frame.buffer.sampleRate, defaultInit.sampleRate, 'sampleRate'); - assert_throws_js(TypeError, () => { - let frame = new AudioFrame({ - buffer: localBuffer - }) - }, "AudioFrames require 'timestamp'") + assert_throws_js( + TypeError, () => {let frame = new AudioFrame({buffer: localBuffer})}, + 'AudioFrames require \'timestamp\'') - assert_throws_js(TypeError, () => { - let frame = new AudioFrame({ - timestamp: defaultInit.timestamp - }) - }, "AudioFrames require 'buffer'") - + assert_throws_js( + TypeError, + () => {let frame = new AudioFrame({timestamp: defaultInit.timestamp})}, + 'AudioFrames require \'buffer\'') }, 'Verify AudioFrame constructors'); test(t => { @@ -55,27 +50,27 @@ let clone = frame.clone(); // Verify the parameters match. - assert_equals(frame.timestamp, clone.timestamp, "timestamp"); - assert_equals(frame.buffer.length, clone.buffer.length, "frames"); - assert_equals(frame.buffer.numberOfChannels, - clone.buffer.numberOfChannels, "channels"); - assert_equals(frame.buffer.sampleRate, clone.buffer.sampleRate, "sampleRate"); + assert_equals(frame.timestamp, clone.timestamp, 'timestamp'); + assert_equals(frame.buffer.length, clone.buffer.length, 'frames'); + assert_equals( + frame.buffer.numberOfChannels, clone.buffer.numberOfChannels, 'channels'); + assert_equals(frame.buffer.sampleRate, clone.buffer.sampleRate, 'sampleRate'); // Verify the data matches. for (var channel = 0; channel < frame.buffer.numberOfChannels; channel++) { var orig_ch = frame.buffer.getChannelData(channel); var cloned_ch = clone.buffer.getChannelData(channel); - assert_array_equals(orig_ch, cloned_ch, "Cloned data ch=" + channel); + assert_array_equals(orig_ch, cloned_ch, 'Cloned data ch=' + channel); } // Verify closing the original frame doesn't close the clone. frame.close(); - assert_equals(frame.buffer, null, "frame.buffer (closed)"); - assert_not_equals(clone.buffer, null, "clone.buffer (not closed)"); + assert_equals(frame.buffer, null, 'frame.buffer (closed)'); + assert_not_equals(clone.buffer, null, 'clone.buffer (not closed)'); clone.close(); - assert_equals(clone.buffer, null, "clone.buffer (closed)"); + assert_equals(clone.buffer, null, 'clone.buffer (closed)'); // Verify closing a closed frame does not throw. frame.close(); @@ -106,7 +101,13 @@ var pre_ch = pre_modification_clone.buffer.getChannelData(channel); var post_ch = post_modification_clone.buffer.getChannelData(channel); - assert_array_equals(pre_ch, post_ch, "Cloned data ch=" + channel); + assert_array_equals(pre_ch, post_ch, 'Cloned data ch=' + channel); } }, 'Verify frame data is snapshotted and internally immutable'); +test(t => { + let frame = make_audio_frame( + -10, defaultInit.channels, defaultInit.sampleRate, defaultInit.frames); + assert_equals(frame.timestamp, -10, 'timestamp'); + frame.close(); +}, 'Test we can construct a AudioFrame with a negative timestamp.');
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/video-decoder.any.js b/third_party/blink/web_tests/external/wpt/webcodecs/video-decoder.any.js index 1f53409..0f562e3 100644 --- a/third_party/blink/web_tests/external/wpt/webcodecs/video-decoder.any.js +++ b/third_party/blink/web_tests/external/wpt/webcodecs/video-decoder.any.js
@@ -417,6 +417,26 @@ decoder.configure({codec: vp9.codec}); decoder.decode(new EncodedVideoChunk( + {type: 'key', timestamp: -25, data: view(buffer, vp9.frames[0])})); + + await decoder.flush(); + assert_equals(numOutputs, 1, 'outputs'); +}, 'Test decoding a frame with a negative timestamp.'); + +promise_test(async t => { + let buffer = await vp9.buffer(); + + let numOutputs = 0; + let decoder = new VideoDecoder({ + output: t.step_func(frame => { + frame.close(); + ++numOutputs; + }), + error: t.unreached_func() + }); + + decoder.configure({codec: vp9.codec}); + decoder.decode(new EncodedVideoChunk( {type: 'key', timestamp: 0, data: view(buffer, vp9.frames[0])})); // Wait for the first frame to be decoded.
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/video-encoder.any.js b/third_party/blink/web_tests/external/wpt/webcodecs/video-encoder.any.js index 210ea77..2bacea0e 100644 --- a/third_party/blink/web_tests/external/wpt/webcodecs/video-encoder.any.js +++ b/third_party/blink/web_tests/external/wpt/webcodecs/video-encoder.any.js
@@ -274,3 +274,22 @@ encoder.encode(frame); }); }, 'Verify encoding closed frames throws.'); + +promise_test(async t => { + let output_chunks = []; + let codecInit = getDefaultCodecInit(t); + codecInit.output = chunk => output_chunks.push(chunk); + + let encoder = new VideoEncoder(codecInit); + let config = defaultConfig; + encoder.configure(config); + + let frame = await createVideoFrame(640, 480, -10000); + encoder.encode(frame); + frame.close(); + await encoder.flush(); + encoder.close(); + assert_equals(output_chunks.length, 1); + assert_equals(output_chunks[0].timestamp, -10000, "first chunk timestamp"); + assert_greater_than(output_chunks[0].data.byteLength, 0); +}, 'Encode video with negative timestamp');
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/video-frame.any.js b/third_party/blink/web_tests/external/wpt/webcodecs/video-frame.any.js index 1d4b197..bb94e016 100644 --- a/third_party/blink/web_tests/external/wpt/webcodecs/video-frame.any.js +++ b/third_party/blink/web_tests/external/wpt/webcodecs/video-frame.any.js
@@ -16,6 +16,13 @@ }, 'Test we can construct a VideoFrame.'); test(t => { + let image = makeImageBitmap(32, 16); + let frame = new VideoFrame(image, {timestamp: -10}); + assert_equals(frame.timestamp, -10, 'timestamp'); + frame.close(); +}, 'Test we can construct a VideoFrame with a negative timestamp.'); + +test(t => { let image = makeImageBitmap(1, 1); let frame = new VideoFrame(image, {timestamp: 10});
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/canvas-putImageData-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/canvas-putImageData-expected.txt index 729c46ba..ae2e746 100644 --- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/canvas-putImageData-expected.txt +++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/canvas-putImageData-expected.txt
@@ -6,7 +6,7 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "invalidations": [ - [8, 8, 90, 90] + [8, 8, 100, 100] ] } ]
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt index 2df3b9837..de0c785 100644 --- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -6,50 +6,50 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "invalidations": [ - [571, 515, 80, 40], - [571, 415, 80, 40], - [571, 315, 80, 40], - [571, 165, 80, 40], - [571, 115, 80, 40], - [429, 515, 80, 40], - [429, 415, 80, 40], - [429, 315, 80, 40], - [429, 165, 80, 40], - [429, 115, 80, 40], - [287, 515, 80, 40], - [287, 415, 80, 40], - [287, 315, 80, 40], - [287, 165, 80, 40], - [287, 115, 80, 40], - [145, 515, 80, 40], - [145, 415, 80, 40], - [145, 315, 80, 40], - [145, 165, 80, 40], - [145, 115, 80, 40], - [601, 565, 50, 40], - [601, 465, 50, 40], - [601, 365, 50, 40], - [601, 265, 50, 40], - [601, 215, 50, 40], - [601, 65, 50, 40], - [459, 565, 50, 40], - [459, 465, 50, 40], - [459, 365, 50, 40], - [459, 265, 50, 40], - [459, 215, 50, 40], - [459, 65, 50, 40], - [317, 565, 50, 40], - [317, 465, 50, 40], - [317, 365, 50, 40], - [317, 265, 50, 40], - [317, 215, 50, 40], - [317, 65, 50, 40], - [175, 565, 50, 40], - [175, 465, 50, 40], - [175, 365, 50, 40], - [175, 265, 50, 40], - [175, 215, 50, 40], - [175, 65, 50, 40] + [570, 564, 132, 42], + [570, 514, 132, 42], + [570, 464, 132, 42], + [570, 414, 132, 42], + [570, 364, 132, 42], + [570, 314, 132, 42], + [570, 264, 132, 42], + [570, 214, 132, 42], + [570, 164, 132, 42], + [570, 114, 132, 42], + [570, 64, 132, 42], + [428, 564, 132, 42], + [428, 514, 132, 42], + [428, 464, 132, 42], + [428, 414, 132, 42], + [428, 364, 132, 42], + [428, 314, 132, 42], + [428, 264, 132, 42], + [428, 214, 132, 42], + [428, 164, 132, 42], + [428, 114, 132, 42], + [428, 64, 132, 42], + [286, 564, 132, 42], + [286, 514, 132, 42], + [286, 464, 132, 42], + [286, 414, 132, 42], + [286, 364, 132, 42], + [286, 314, 132, 42], + [286, 264, 132, 42], + [286, 214, 132, 42], + [286, 164, 132, 42], + [286, 114, 132, 42], + [286, 64, 132, 42], + [144, 564, 132, 42], + [144, 514, 132, 42], + [144, 464, 132, 42], + [144, 414, 132, 42], + [144, 364, 132, 42], + [144, 314, 132, 42], + [144, 264, 132, 42], + [144, 214, 132, 42], + [144, 164, 132, 42], + [144, 114, 132, 42], + [144, 64, 132, 42] ] }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt index 107fd22..5d5413de 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -6,50 +6,50 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "invalidations": [ - [571, 515, 80, 40], - [571, 415, 80, 40], - [571, 315, 80, 40], - [571, 165, 80, 40], - [571, 115, 80, 40], - [429, 515, 80, 40], - [429, 415, 80, 40], - [429, 315, 80, 40], - [429, 165, 80, 40], - [429, 115, 80, 40], - [287, 515, 80, 40], - [287, 415, 80, 40], - [287, 315, 80, 40], - [287, 165, 80, 40], - [287, 115, 80, 40], - [145, 515, 80, 40], - [145, 415, 80, 40], - [145, 315, 80, 40], - [145, 165, 80, 40], - [145, 115, 80, 40], - [601, 565, 50, 40], - [601, 465, 50, 40], - [601, 365, 50, 40], - [601, 265, 50, 40], - [601, 215, 50, 40], - [601, 65, 50, 40], - [459, 565, 50, 40], - [459, 465, 50, 40], - [459, 365, 50, 40], - [459, 265, 50, 40], - [459, 215, 50, 40], - [459, 65, 50, 40], - [317, 565, 50, 40], - [317, 465, 50, 40], - [317, 365, 50, 40], - [317, 265, 50, 40], - [317, 215, 50, 40], - [317, 65, 50, 40], - [175, 565, 50, 40], - [175, 465, 50, 40], - [175, 365, 50, 40], - [175, 265, 50, 40], - [175, 215, 50, 40], - [175, 65, 50, 40] + [570, 564, 132, 42], + [570, 514, 132, 42], + [570, 464, 132, 42], + [570, 414, 132, 42], + [570, 364, 132, 42], + [570, 314, 132, 42], + [570, 264, 132, 42], + [570, 214, 132, 42], + [570, 164, 132, 42], + [570, 114, 132, 42], + [570, 64, 132, 42], + [428, 564, 132, 42], + [428, 514, 132, 42], + [428, 464, 132, 42], + [428, 414, 132, 42], + [428, 364, 132, 42], + [428, 314, 132, 42], + [428, 264, 132, 42], + [428, 214, 132, 42], + [428, 164, 132, 42], + [428, 114, 132, 42], + [428, 64, 132, 42], + [286, 564, 132, 42], + [286, 514, 132, 42], + [286, 464, 132, 42], + [286, 414, 132, 42], + [286, 364, 132, 42], + [286, 314, 132, 42], + [286, 264, 132, 42], + [286, 214, 132, 42], + [286, 164, 132, 42], + [286, 114, 132, 42], + [286, 64, 132, 42], + [144, 564, 132, 42], + [144, 514, 132, 42], + [144, 464, 132, 42], + [144, 414, 132, 42], + [144, 364, 132, 42], + [144, 314, 132, 42], + [144, 264, 132, 42], + [144, 214, 132, 42], + [144, 164, 132, 42], + [144, 114, 132, 42], + [144, 64, 132, 42] ] }, {
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/conversion/impression-invalid-data-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/conversion/impression-invalid-data-expected.txt index 2e2bc964..7a7278a 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/conversion/impression-invalid-data-expected.txt +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/conversion/impression-invalid-data-expected.txt
@@ -6,7 +6,7 @@ frame : <object> invalidParameter : Must be a number, not a string violatingNodeId : <number> - violationType : InvalidAttributionData + violationType : InvalidAttributionSourceEventId } } }
diff --git a/third_party/blink/web_tests/paint/invalidation/canvas-putImageData-expected.txt b/third_party/blink/web_tests/paint/invalidation/canvas-putImageData-expected.txt index 3f0d30b..e6987437 100644 --- a/third_party/blink/web_tests/paint/invalidation/canvas-putImageData-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/canvas-putImageData-expected.txt
@@ -6,7 +6,7 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "invalidations": [ - [8, 8, 90, 90] + [8, 8, 100, 100] ] } ]
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt index a7f97eb8..6bb81bc 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -6,50 +6,50 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "invalidations": [ - [571, 515, 80, 40], - [571, 415, 80, 40], - [571, 315, 80, 40], - [571, 165, 80, 40], - [571, 115, 80, 40], - [429, 515, 80, 40], - [429, 415, 80, 40], - [429, 315, 80, 40], - [429, 165, 80, 40], - [429, 115, 80, 40], - [287, 515, 80, 40], - [287, 415, 80, 40], - [287, 315, 80, 40], - [287, 165, 80, 40], - [287, 115, 80, 40], - [145, 515, 80, 40], - [145, 415, 80, 40], - [145, 315, 80, 40], - [145, 165, 80, 40], - [145, 115, 80, 40], - [601, 565, 50, 40], - [601, 465, 50, 40], - [601, 365, 50, 40], - [601, 265, 50, 40], - [601, 215, 50, 40], - [601, 65, 50, 40], - [459, 565, 50, 40], - [459, 465, 50, 40], - [459, 365, 50, 40], - [459, 265, 50, 40], - [459, 215, 50, 40], - [459, 65, 50, 40], - [317, 565, 50, 40], - [317, 465, 50, 40], - [317, 365, 50, 40], - [317, 265, 50, 40], - [317, 215, 50, 40], - [317, 65, 50, 40], - [175, 565, 50, 40], - [175, 465, 50, 40], - [175, 365, 50, 40], - [175, 265, 50, 40], - [175, 215, 50, 40], - [175, 65, 50, 40] + [570, 564, 132, 42], + [570, 514, 132, 42], + [570, 464, 132, 42], + [570, 414, 132, 42], + [570, 364, 132, 42], + [570, 314, 132, 42], + [570, 264, 132, 42], + [570, 214, 132, 42], + [570, 164, 132, 42], + [570, 114, 132, 42], + [570, 64, 132, 42], + [428, 564, 132, 42], + [428, 514, 132, 42], + [428, 464, 132, 42], + [428, 414, 132, 42], + [428, 364, 132, 42], + [428, 314, 132, 42], + [428, 264, 132, 42], + [428, 214, 132, 42], + [428, 164, 132, 42], + [428, 114, 132, 42], + [428, 64, 132, 42], + [286, 564, 132, 42], + [286, 514, 132, 42], + [286, 464, 132, 42], + [286, 414, 132, 42], + [286, 364, 132, 42], + [286, 314, 132, 42], + [286, 264, 132, 42], + [286, 214, 132, 42], + [286, 164, 132, 42], + [286, 114, 132, 42], + [286, 64, 132, 42], + [144, 564, 132, 42], + [144, 514, 132, 42], + [144, 464, 132, 42], + [144, 414, 132, 42], + [144, 364, 132, 42], + [144, 314, 132, 42], + [144, 264, 132, 42], + [144, 214, 132, 42], + [144, 164, 132, 42], + [144, 114, 132, 42], + [144, 64, 132, 42] ] }, {
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt deleted file mode 100644 index 3cccf3e..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ /dev/null
@@ -1,95 +0,0 @@ -{ - "layers": [ - { - "name": "Scrolling Contents Layer", - "bounds": [785, 928], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "invalidations": [ - [570, 513, 81, 40], - [570, 413, 81, 40], - [570, 313, 81, 40], - [570, 163, 81, 40], - [570, 113, 81, 40], - [428, 513, 81, 40], - [428, 413, 81, 40], - [428, 313, 81, 40], - [428, 163, 81, 40], - [428, 113, 81, 40], - [286, 513, 81, 40], - [286, 413, 81, 40], - [286, 313, 81, 40], - [286, 163, 81, 40], - [286, 113, 81, 40], - [144, 513, 81, 40], - [144, 413, 81, 40], - [144, 313, 81, 40], - [144, 163, 81, 40], - [144, 113, 81, 40], - [600, 563, 51, 40], - [600, 463, 51, 40], - [600, 363, 51, 40], - [600, 263, 51, 40], - [600, 213, 51, 40], - [600, 63, 51, 40], - [458, 563, 51, 40], - [458, 463, 51, 40], - [458, 363, 51, 40], - [458, 263, 51, 40], - [458, 213, 51, 40], - [458, 63, 51, 40], - [316, 563, 51, 40], - [316, 463, 51, 40], - [316, 363, 51, 40], - [316, 263, 51, 40], - [316, 213, 51, 40], - [316, 63, 51, 40], - [174, 563, 51, 40], - [174, 463, 51, 40], - [174, 363, 51, 40], - [174, 263, 51, 40], - [174, 213, 51, 40], - [174, 63, 51, 40] - ] - }, - { - "name": "LayoutVideo VIDEO id='video'", - "bounds": [150, 60], - "drawsContent": false, - "transform": 1 - }, - { - "name": "ContentsLayer for LayoutVideo VIDEO id='video'", - "bounds": [150, 60], - "transform": 1 - }, - { - "name": "LayoutNGFlexibleBox (relative positioned) DIV class='sizing-small phase-ready state-stopped'", - "bounds": [150, 60], - "transform": 1 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)", - "bounds": [150, 60], - "transform": 1 - }, - { - "name": "ContentsLayer for Vertical Scrollbar Layer", - "position": [785, 0], - "bounds": [15, 600], - "contentsOpaque": true - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [15, 854, 0, 1] - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt deleted file mode 100644 index 3cccf3e..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ /dev/null
@@ -1,95 +0,0 @@ -{ - "layers": [ - { - "name": "Scrolling Contents Layer", - "bounds": [785, 928], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "invalidations": [ - [570, 513, 81, 40], - [570, 413, 81, 40], - [570, 313, 81, 40], - [570, 163, 81, 40], - [570, 113, 81, 40], - [428, 513, 81, 40], - [428, 413, 81, 40], - [428, 313, 81, 40], - [428, 163, 81, 40], - [428, 113, 81, 40], - [286, 513, 81, 40], - [286, 413, 81, 40], - [286, 313, 81, 40], - [286, 163, 81, 40], - [286, 113, 81, 40], - [144, 513, 81, 40], - [144, 413, 81, 40], - [144, 313, 81, 40], - [144, 163, 81, 40], - [144, 113, 81, 40], - [600, 563, 51, 40], - [600, 463, 51, 40], - [600, 363, 51, 40], - [600, 263, 51, 40], - [600, 213, 51, 40], - [600, 63, 51, 40], - [458, 563, 51, 40], - [458, 463, 51, 40], - [458, 363, 51, 40], - [458, 263, 51, 40], - [458, 213, 51, 40], - [458, 63, 51, 40], - [316, 563, 51, 40], - [316, 463, 51, 40], - [316, 363, 51, 40], - [316, 263, 51, 40], - [316, 213, 51, 40], - [316, 63, 51, 40], - [174, 563, 51, 40], - [174, 463, 51, 40], - [174, 363, 51, 40], - [174, 263, 51, 40], - [174, 213, 51, 40], - [174, 63, 51, 40] - ] - }, - { - "name": "LayoutVideo VIDEO id='video'", - "bounds": [150, 60], - "drawsContent": false, - "transform": 1 - }, - { - "name": "ContentsLayer for LayoutVideo VIDEO id='video'", - "bounds": [150, 60], - "transform": 1 - }, - { - "name": "LayoutNGFlexibleBox (relative positioned) DIV class='sizing-small phase-ready state-stopped'", - "bounds": [150, 60], - "transform": 1 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)", - "bounds": [150, 60], - "transform": 1 - }, - { - "name": "ContentsLayer for Vertical Scrollbar Layer", - "position": [785, 0], - "bounds": [15, 600], - "contentsOpaque": true - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [15, 854, 0, 1] - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.14/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt deleted file mode 100644 index 3cccf3e..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ /dev/null
@@ -1,95 +0,0 @@ -{ - "layers": [ - { - "name": "Scrolling Contents Layer", - "bounds": [785, 928], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "invalidations": [ - [570, 513, 81, 40], - [570, 413, 81, 40], - [570, 313, 81, 40], - [570, 163, 81, 40], - [570, 113, 81, 40], - [428, 513, 81, 40], - [428, 413, 81, 40], - [428, 313, 81, 40], - [428, 163, 81, 40], - [428, 113, 81, 40], - [286, 513, 81, 40], - [286, 413, 81, 40], - [286, 313, 81, 40], - [286, 163, 81, 40], - [286, 113, 81, 40], - [144, 513, 81, 40], - [144, 413, 81, 40], - [144, 313, 81, 40], - [144, 163, 81, 40], - [144, 113, 81, 40], - [600, 563, 51, 40], - [600, 463, 51, 40], - [600, 363, 51, 40], - [600, 263, 51, 40], - [600, 213, 51, 40], - [600, 63, 51, 40], - [458, 563, 51, 40], - [458, 463, 51, 40], - [458, 363, 51, 40], - [458, 263, 51, 40], - [458, 213, 51, 40], - [458, 63, 51, 40], - [316, 563, 51, 40], - [316, 463, 51, 40], - [316, 363, 51, 40], - [316, 263, 51, 40], - [316, 213, 51, 40], - [316, 63, 51, 40], - [174, 563, 51, 40], - [174, 463, 51, 40], - [174, 363, 51, 40], - [174, 263, 51, 40], - [174, 213, 51, 40], - [174, 63, 51, 40] - ] - }, - { - "name": "LayoutVideo VIDEO id='video'", - "bounds": [150, 60], - "drawsContent": false, - "transform": 1 - }, - { - "name": "ContentsLayer for LayoutVideo VIDEO id='video'", - "bounds": [150, 60], - "transform": 1 - }, - { - "name": "LayoutNGFlexibleBox (relative positioned) DIV class='sizing-small phase-ready state-stopped'", - "bounds": [150, 60], - "transform": 1 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)", - "bounds": [150, 60], - "transform": 1 - }, - { - "name": "ContentsLayer for Vertical Scrollbar Layer", - "position": [785, 0], - "bounds": [15, 600], - "contentsOpaque": true - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [15, 854, 0, 1] - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.15/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt index 3cccf3e..1cb82e7 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.15/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/blink/web_tests/platform/mac-mac10.15/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -6,50 +6,50 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "invalidations": [ - [570, 513, 81, 40], - [570, 413, 81, 40], - [570, 313, 81, 40], - [570, 163, 81, 40], - [570, 113, 81, 40], - [428, 513, 81, 40], - [428, 413, 81, 40], - [428, 313, 81, 40], - [428, 163, 81, 40], - [428, 113, 81, 40], - [286, 513, 81, 40], - [286, 413, 81, 40], - [286, 313, 81, 40], - [286, 163, 81, 40], - [286, 113, 81, 40], - [144, 513, 81, 40], - [144, 413, 81, 40], - [144, 313, 81, 40], - [144, 163, 81, 40], - [144, 113, 81, 40], - [600, 563, 51, 40], - [600, 463, 51, 40], - [600, 363, 51, 40], - [600, 263, 51, 40], - [600, 213, 51, 40], - [600, 63, 51, 40], - [458, 563, 51, 40], - [458, 463, 51, 40], - [458, 363, 51, 40], - [458, 263, 51, 40], - [458, 213, 51, 40], - [458, 63, 51, 40], - [316, 563, 51, 40], - [316, 463, 51, 40], - [316, 363, 51, 40], - [316, 263, 51, 40], - [316, 213, 51, 40], - [316, 63, 51, 40], - [174, 563, 51, 40], - [174, 463, 51, 40], - [174, 363, 51, 40], - [174, 263, 51, 40], - [174, 213, 51, 40], - [174, 63, 51, 40] + [569, 562, 133, 42], + [569, 512, 133, 42], + [569, 462, 133, 42], + [569, 412, 133, 42], + [569, 362, 133, 42], + [569, 312, 133, 42], + [569, 262, 133, 42], + [569, 212, 133, 42], + [569, 162, 133, 42], + [569, 112, 133, 42], + [569, 62, 133, 42], + [427, 562, 133, 42], + [427, 512, 133, 42], + [427, 462, 133, 42], + [427, 412, 133, 42], + [427, 362, 133, 42], + [427, 312, 133, 42], + [427, 262, 133, 42], + [427, 212, 133, 42], + [427, 162, 133, 42], + [427, 112, 133, 42], + [427, 62, 133, 42], + [285, 562, 133, 42], + [285, 512, 133, 42], + [285, 462, 133, 42], + [285, 412, 133, 42], + [285, 362, 133, 42], + [285, 312, 133, 42], + [285, 262, 133, 42], + [285, 212, 133, 42], + [285, 162, 133, 42], + [285, 112, 133, 42], + [285, 62, 133, 42], + [143, 562, 133, 42], + [143, 512, 133, 42], + [143, 462, 133, 42], + [143, 412, 133, 42], + [143, 362, 133, 42], + [143, 312, 133, 42], + [143, 262, 133, 42], + [143, 212, 133, 42], + [143, 162, 133, 42], + [143, 112, 133, 42], + [143, 62, 133, 42] ] }, {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt index 473131387..fa66bc7 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -6,50 +6,50 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "invalidations": [ - [569, 515, 80, 40], - [569, 415, 80, 40], - [569, 315, 80, 40], - [569, 165, 80, 40], - [569, 115, 80, 40], - [427, 515, 80, 40], - [427, 415, 80, 40], - [427, 315, 80, 40], - [427, 165, 80, 40], - [427, 115, 80, 40], - [285, 515, 80, 40], - [285, 415, 80, 40], - [285, 315, 80, 40], - [285, 165, 80, 40], - [285, 115, 80, 40], - [143, 515, 80, 40], - [143, 415, 80, 40], - [143, 315, 80, 40], - [143, 165, 80, 40], - [143, 115, 80, 40], - [599, 565, 50, 40], - [599, 465, 50, 40], - [599, 365, 50, 40], - [599, 265, 50, 40], - [599, 215, 50, 40], - [599, 65, 50, 40], - [457, 565, 50, 40], - [457, 465, 50, 40], - [457, 365, 50, 40], - [457, 265, 50, 40], - [457, 215, 50, 40], - [457, 65, 50, 40], - [315, 565, 50, 40], - [315, 465, 50, 40], - [315, 365, 50, 40], - [315, 265, 50, 40], - [315, 215, 50, 40], - [315, 65, 50, 40], - [173, 565, 50, 40], - [173, 465, 50, 40], - [173, 365, 50, 40], - [173, 265, 50, 40], - [173, 215, 50, 40], - [173, 65, 50, 40] + [568, 564, 132, 42], + [568, 514, 132, 42], + [568, 464, 132, 42], + [568, 414, 132, 42], + [568, 364, 132, 42], + [568, 314, 132, 42], + [568, 264, 132, 42], + [568, 214, 132, 42], + [568, 164, 132, 42], + [568, 114, 132, 42], + [568, 64, 132, 42], + [426, 564, 132, 42], + [426, 514, 132, 42], + [426, 464, 132, 42], + [426, 414, 132, 42], + [426, 364, 132, 42], + [426, 314, 132, 42], + [426, 264, 132, 42], + [426, 214, 132, 42], + [426, 164, 132, 42], + [426, 114, 132, 42], + [426, 64, 132, 42], + [284, 564, 132, 42], + [284, 514, 132, 42], + [284, 464, 132, 42], + [284, 414, 132, 42], + [284, 364, 132, 42], + [284, 314, 132, 42], + [284, 264, 132, 42], + [284, 214, 132, 42], + [284, 164, 132, 42], + [284, 114, 132, 42], + [284, 64, 132, 42], + [142, 564, 132, 42], + [142, 514, 132, 42], + [142, 464, 132, 42], + [142, 414, 132, 42], + [142, 364, 132, 42], + [142, 314, 132, 42], + [142, 264, 132, 42], + [142, 214, 132, 42], + [142, 164, 132, 42], + [142, 114, 132, 42], + [142, 64, 132, 42] ] }, { @@ -64,7 +64,7 @@ "transform": 1 }, { - "name": "LayoutFlexibleBox (relative positioned) DIV class='sizing-small phase-ready state-stopped'", + "name": "LayoutNGFlexibleBox (relative positioned) DIV class='sizing-small phase-ready state-stopped'", "bounds": [150, 60], "transform": 1 },
diff --git a/third_party/blink/web_tests/webgpu/ctshtml-template.txt b/third_party/blink/web_tests/webgpu/ctshtml-template.txt index 2f1a3da..601075fe 100644 --- a/third_party/blink/web_tests/webgpu/ctshtml-template.txt +++ b/third_party/blink/web_tests/webgpu/ctshtml-template.txt
@@ -32,7 +32,7 @@ <meta name=variant content='?worker=1&q=webgpu:api,operation,rendering,basic:*'> <meta name=variant content='?worker=1&q=webgpu:api,operation,render_pass,storeOp:*'> <meta name=variant content='?worker=1&q=webgpu:api,operation,render_pass,storeop2:*'> -<meta name=variant content='?worker=1&q=webgpu:api,operation,onSubmittedWorkDone:*'> +<meta name=variant content='?worker=1&q=webgpu:api,operation,fences:*'> <meta name=variant content='?worker=1&q=webgpu:api,validation,buffer,create:*'> <meta name=variant content='?worker=1&q=webgpu:api,validation,buffer,destroy:*'> <meta name=variant content='?worker=1&q=webgpu:api,validation,buffer,mapping:*'>
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/restriction-element-request-fullscreen.html b/third_party/blink/web_tests/wpt_internal/prerender/restriction-element-request-fullscreen.html index 009df6b..c578739 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/restriction-element-request-fullscreen.html +++ b/third_party/blink/web_tests/wpt_internal/prerender/restriction-element-request-fullscreen.html
@@ -1,12 +1,8 @@ +<!DOCTYPE html> <!-- This file cannot be upstreamed to WPT until: * startPrerendering() usage is replaced with a WebDriver API -* internals.setPermission() usage is replaced with a WebDriver API -* The defer expectation is replaced with rejecting the promise with - “SecurityError” to match the specification at: - https://jeremyroman.github.io/alternate-loading-modes/#patch-serial --> -<!DOCTYPE html> <title>Prerendering cannot invoke Element.requestFullscreen</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script>
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/restriction-web-hid.https.html b/third_party/blink/web_tests/wpt_internal/prerender/restriction-web-hid.https.html index 2eb4ed3d..19622f0 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/restriction-web-hid.https.html +++ b/third_party/blink/web_tests/wpt_internal/prerender/restriction-web-hid.https.html
@@ -1,12 +1,11 @@ +<!DOCTYPE html> <!-- This file cannot be upstreamed to WPT until: * startPrerendering() usage is replaced with a WebDriver API -* internals.setPermission() usage is replaced with a WebDriver API -* The defer expectation is replaced with rejecting the promise with - “SecurityError” to match the specification at: - https://jeremyroman.github.io/alternate-loading-modes/#patch-serial +* The spec describes the expected behavior at + https://jeremyroman.github.io/alternate-loading-modes/ and implementation + matches. --> -<!DOCTYPE html> <title>Access to the Web HID API is deferred</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script>
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/restriction-web-serial.https.html b/third_party/blink/web_tests/wpt_internal/prerender/restriction-web-serial.https.html index 865861a..d5b4469 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/restriction-web-serial.https.html +++ b/third_party/blink/web_tests/wpt_internal/prerender/restriction-web-serial.https.html
@@ -1,12 +1,11 @@ +<!DOCTYPE html> <!-- This file cannot be upstreamed to WPT until: * startPrerendering() usage is replaced with a WebDriver API -* internals.setPermission() usage is replaced with a WebDriver API * The defer expectation is replaced with rejecting the promise with “SecurityError” to match the specification at: https://jeremyroman.github.io/alternate-loading-modes/#patch-serial --> -<!DOCTYPE html> <title>Access to the Web Serial API is deferred</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script>
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/cts.html b/third_party/blink/web_tests/wpt_internal/webgpu/cts.html index 6238a0b..2f98535 100644 --- a/third_party/blink/web_tests/wpt_internal/webgpu/cts.html +++ b/third_party/blink/web_tests/wpt_internal/webgpu/cts.html
@@ -33,7 +33,7 @@ <meta name=variant content='?worker=1&q=webgpu:api,operation,rendering,basic:*'> <meta name=variant content='?worker=1&q=webgpu:api,operation,render_pass,storeOp:*'> <meta name=variant content='?worker=1&q=webgpu:api,operation,render_pass,storeop2:*'> -<meta name=variant content='?worker=1&q=webgpu:api,operation,onSubmittedWorkDone:*'> +<meta name=variant content='?worker=1&q=webgpu:api,operation,fences:*'> <meta name=variant content='?worker=1&q=webgpu:api,validation,buffer,create:*'> <meta name=variant content='?worker=1&q=webgpu:api,validation,buffer,destroy:*'> <meta name=variant content='?worker=1&q=webgpu:api,validation,buffer,mapping:*'> @@ -150,8 +150,8 @@ <meta name=variant content='?q=webgpu:api,operation,command_buffer,image_copy:*'> <meta name=variant content='?q=webgpu:api,operation,compute,basic:*'> <meta name=variant content='?q=webgpu:api,operation,device,lost:*'> +<meta name=variant content='?q=webgpu:api,operation,fences:*'> <meta name=variant content='?q=webgpu:api,operation,memory_sync,buffer,ww:*'> -<meta name=variant content='?q=webgpu:api,operation,onSubmittedWorkDone:*'> <meta name=variant content='?q=webgpu:api,operation,queue,writeBuffer:*'> <meta name=variant content='?q=webgpu:api,operation,render_pass,resolve:*'> <meta name=variant content='?q=webgpu:api,operation,render_pass,storeOp:*'> @@ -161,31 +161,32 @@ <meta name=variant content='?q=webgpu:api,operation,rendering,basic:*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="zero";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="one";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="src";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="one-minus-src";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="src-color";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="one-minus-src-color";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="src-alpha";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="one-minus-src-alpha";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="dst";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="one-minus-dst";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="dst-color";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="one-minus-dst-color";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="dst-alpha";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="one-minus-dst-alpha";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="src-alpha-saturated";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="constant";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="one-minus-constant";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="blend-color";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="color";srcFactor="one-minus-blend-color";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="zero";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="one";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="src";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="one-minus-src";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="src-color";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="one-minus-src-color";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="src-alpha";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="one-minus-src-alpha";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="dst";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="one-minus-dst";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="dst-color";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="one-minus-dst-color";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="dst-alpha";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="one-minus-dst-alpha";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="src-alpha-saturated";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="constant";*'> -<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="one-minus-constant";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="blend-color";*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:GPUBlendComponent:component="alpha";srcFactor="one-minus-blend-color";*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:formats,*'> +<meta name=variant content='?q=webgpu:api,operation,rendering,blending:multiple_color_attachments,*'> <meta name=variant content='?q=webgpu:api,operation,rendering,blending:clamp,*'> <meta name=variant content='?q=webgpu:api,operation,rendering,depth:*'> <meta name=variant content='?q=webgpu:api,operation,rendering,draw:arguments:first=0;count=0;*'> @@ -334,9 +335,43 @@ <meta name=variant content='?q=webgpu:api,validation,buffer,destroy:*'> <meta name=variant content='?q=webgpu:api,validation,buffer,mapping:*'> <meta name=variant content='?q=webgpu:api,validation,capability_checks,features,query_types:createQuerySet:*'> -<meta name=variant content='?q=webgpu:api,validation,createBindGroup:*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:binding_count_mismatch,*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:binding_must_be_present_in_layout,*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="uniform-buffer";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="storage-buffer";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-buffer";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="sampler";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="comparison-sampler";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="sampled-texture";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="multisampled-texture";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="uniformBuf";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="storageBuf";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="plainSamp";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="compareSamp";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="sampledTex";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="sampledTexMS"'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="storageTex";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="errorBuf";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="errorSamp";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="writeonly-storage-texture";resourceType="errorTex";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="uniformBuf";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="storageBuf";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="plainSamp";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="compareSamp";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="sampledTex";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="sampledTexMS"'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="storageTex";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="errorBuf";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="errorSamp";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_binding_must_contain_exactly_one_buffer_of_its_type:bindingType="readonly-storage-texture";resourceType="errorTex";*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:texture_binding_must_have_correct_usage,*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:texture_must_have_correct_component_type,*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:texture_must_have_correct_dimension,*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:buffer_offset_and_size_for_bind_groups_match,*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:minBindingSize,*'> <meta name=variant content='?q=webgpu:api,validation,createBindGroupLayout:some_binding_index_was_specified_more_than_once,*'> <meta name=variant content='?q=webgpu:api,validation,createBindGroupLayout:visibility,*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroupLayout:bindingTypeSpecific_optional_members,*'> <meta name=variant content='?q=webgpu:api,validation,createBindGroupLayout:multisample_requires_2d_view_dimension,*'> <meta name=variant content='?q=webgpu:api,validation,createBindGroupLayout:number_of_dynamic_buffers_exceeds_the_maximum_value,*'> <meta name=variant content='?q=webgpu:api,validation,createBindGroupLayout:max_resources_per_stage,in_bind_group_layout,*'> @@ -410,6 +445,7 @@ <meta name=variant content='?q=webgpu:api,validation,encoding,queries,general:*'> <meta name=variant content='?q=webgpu:api,validation,encoding,queries,resolveQuerySet:*'> <meta name=variant content='?q=webgpu:api,validation,error_scope:*'> +<meta name=variant content='?q=webgpu:api,validation,fences:*'> <meta name=variant content='?q=webgpu:api,validation,image_copy,layout_related:*'> <meta name=variant content='?q=webgpu:api,validation,image_copy,texture_related:*'> <meta name=variant content='?q=webgpu:api,validation,initialization,requestDevice:*'>
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/canvas_clear.html b/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/canvas_clear.html new file mode 100644 index 0000000..83a7535b --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/canvas_clear.html
@@ -0,0 +1,11 @@ +<html class="reftest-wait"> + <base href="/gen/third_party/webgpu-cts/src/webgpu/web_platform/reftests/" /> + <title>WebGPU canvas_clear</title> + <meta charset="utf-8" /> + <link rel="help" href="https://gpuweb.github.io/gpuweb/" /> + <meta name="assert" content="WebGPU cleared canvas should be presented correctly" /> + <link rel="match" href="./ref/canvas_clear-ref.html" /> + <canvas id="gpucanvas" width="10" height="10"></canvas> + <script src="/common/reftest-wait.js"></script> + <script type="module" src="canvas_clear.js"></script> +</html>
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/canvas_complex_bgra8unorm.html b/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/canvas_complex_bgra8unorm.html new file mode 100644 index 0000000..0d3b163 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/canvas_complex_bgra8unorm.html
@@ -0,0 +1,19 @@ +<html class="reftest-wait"> + <base href="/gen/third_party/webgpu-cts/src/webgpu/web_platform/reftests/" /> + <title>WebGPU canvas_complex_bgra8unorm</title> + <meta charset="utf-8" /> + <link rel="help" href="https://gpuweb.github.io/gpuweb/" /> + <meta + name="assert" + content="WebGPU canvas should have correct orientation, components, scaling, filtering, color space" + /> + <link rel="match" href="./ref/canvas_complex-ref.html" /> + + <canvas id="cvs" width="2" height="2" style="width: 20px; height: 20px;"></canvas> + <script src="/common/reftest-wait.js"></script> + <script type="module"> + import { run } from './canvas_complex.js'; + run('bgra8unorm'); + // TODO: make a copy of this test for rgba16float + </script> +</html>
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/ref/canvas_clear-ref.html b/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/ref/canvas_clear-ref.html new file mode 100644 index 0000000..a3b8706 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/ref/canvas_clear-ref.html
@@ -0,0 +1,13 @@ +<html> + <base href="/gen/third_party/webgpu-cts/src/webgpu/web_platform/reftests/ref/" /> + <title>WebGPU canvas_clear (ref)</title> + <meta charset="utf-8" /> + <link rel="help" href="https://gpuweb.github.io/gpuweb/" /> + <canvas id="myCanvas" width="10" height="10"></canvas> + <script> + var c = document.getElementById('myCanvas'); + var ctx = c.getContext('2d'); + ctx.fillStyle = '#00FF00'; + ctx.fillRect(0, 0, c.width, c.height); + </script> +</html>
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/ref/canvas_complex-ref.html b/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/ref/canvas_complex-ref.html new file mode 100644 index 0000000..15b1687 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/webgpu/web_platform/reftests/ref/canvas_complex-ref.html
@@ -0,0 +1,18 @@ +<html> + <base href="/gen/third_party/webgpu-cts/src/webgpu/web_platform/reftests/ref/" /> + <title>WebGPU canvas_complex (ref)</title> + <meta charset="utf-8" /> + <link rel="help" href="https://gpuweb.github.io/gpuweb/" /> + <canvas id="cvs" width="2" height="2" style="width: 20px; height: 20px;"></canvas> + <script> + const ctx = cvs.getContext('2d'); + ctx.fillStyle = '#7F0000'; + ctx.fillRect(0, 0, 1, 1); + ctx.fillStyle = '#007F00'; + ctx.fillRect(1, 0, 1, 1); + ctx.fillStyle = '#00007F'; + ctx.fillRect(0, 1, 1, 1); + ctx.fillStyle = '#7F7F00'; + ctx.fillRect(1, 1, 1, 1); + </script> +</html>
diff --git a/third_party/libaom/README.chromium b/third_party/libaom/README.chromium index 2ac6571..e37cdf4 100644 --- a/third_party/libaom/README.chromium +++ b/third_party/libaom/README.chromium
@@ -2,9 +2,9 @@ Short Name: libaom URL: https://aomedia.googlesource.com/aom/ Version: 0 -Date: Thursday April 08 2021 +Date: Monday April 19 2021 Branch: master -Commit: 6c93db7ff63430d2e5dcdfc42e84e3a0514da608 +Commit: 1431f93c1ebb5fa5107a5f3218b68501b1bb1c6c License: BSD License File: source/libaom/LICENSE Security Critical: yes
diff --git a/third_party/libaom/source/config/config/aom_version.h b/third_party/libaom/source/config/config/aom_version.h index e8bad2064..2f9fa36 100644 --- a/third_party/libaom/source/config/config/aom_version.h +++ b/third_party/libaom/source/config/config/aom_version.h
@@ -12,8 +12,8 @@ #define VERSION_MAJOR 3 #define VERSION_MINOR 0 #define VERSION_PATCH 0 -#define VERSION_EXTRA "258-g6c93db7ff" +#define VERSION_EXTRA "304-g1431f93c1" #define VERSION_PACKED \ ((VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | (VERSION_PATCH)) -#define VERSION_STRING_NOSP "3.0.0-258-g6c93db7ff" -#define VERSION_STRING " 3.0.0-258-g6c93db7ff" +#define VERSION_STRING_NOSP "3.0.0-304-g1431f93c1" +#define VERSION_STRING " 3.0.0-304-g1431f93c1"
diff --git a/third_party/polymer/v3_0/BUILD.gn b/third_party/polymer/v3_0/BUILD.gn index e6dbfabc..05b7803 100644 --- a/third_party/polymer/v3_0/BUILD.gn +++ b/third_party/polymer/v3_0/BUILD.gn
@@ -154,6 +154,7 @@ "components-chromium/polymer/lib/utils/templatize.d.ts", "components-chromium/polymer/lib/utils/unresolved.d.ts", "components-chromium/polymer/lib/utils/wrap.d.ts", + "components-chromium/polymer/polymer.d.ts", "components-chromium/polymer/polymer-element.d.ts", "components-chromium/polymer/polymer-legacy.d.ts", ]
diff --git a/third_party/polymer/v3_0/chromium_dts.patch b/third_party/polymer/v3_0/chromium_dts.patch new file mode 100644 index 0000000..096105e --- /dev/null +++ b/third_party/polymer/v3_0/chromium_dts.patch
@@ -0,0 +1,27 @@ +diff --git a/components-chromium/iron-a11y-announcer/iron-a11y-announcer.d.ts b/components-chromium/iron-a11y-announcer/iron-a11y-announcer.d.ts +index b60ac3ba18a0..64aa9a729184 100644 +--- a/components-chromium/iron-a11y-announcer/iron-a11y-announcer.d.ts ++++ b/components-chromium/iron-a11y-announcer/iron-a11y-announcer.d.ts +@@ -34,6 +34,9 @@ declare class IronA11yAnnouncer { + */ + announce(text: string): void; + _onIronAnnounce(event: any): void; ++ // TODO: Delete when following issue is fixed ++ // https://github.com/PolymerElements/iron-a11y-announcer/issues/52 ++ static requestAvailability(): void; + } + + interface IronA11yAnnouncer extends LegacyElementMixin, HTMLElement { +diff --git a/components-chromium/polymer/polymer.d.ts b/components-chromium/polymer/polymer.d.ts +index a9f1aa64c5b8..a202c7fb06ba 100644 +--- a/components-chromium/polymer/polymer.d.ts ++++ b/components-chromium/polymer/polymer.d.ts +@@ -24,8 +24,6 @@ export {Debouncer, enqueueDebouncer} from './lib/utils/debounce.js'; + export {html} from './lib/utils/html-tag.js'; + export {matches, translate} from './lib/utils/path.js'; + export {afterNextRender, beforeNextRender} from './lib/utils/render-status.js'; +-export {useShadow} from './lib/utils/settings.js'; + export {TemplateInstanceBase, templatize} from './lib/utils/templatize.js'; + export {PolymerElement} from './polymer-element.js'; +-export {Base} from './polymer-legacy.js'; + export {gestures};
diff --git a/third_party/polymer/v3_0/components-chromium/iron-a11y-announcer/iron-a11y-announcer.d.ts b/third_party/polymer/v3_0/components-chromium/iron-a11y-announcer/iron-a11y-announcer.d.ts index b60ac3ba..64aa9a7 100644 --- a/third_party/polymer/v3_0/components-chromium/iron-a11y-announcer/iron-a11y-announcer.d.ts +++ b/third_party/polymer/v3_0/components-chromium/iron-a11y-announcer/iron-a11y-announcer.d.ts
@@ -34,6 +34,9 @@ */ announce(text: string): void; _onIronAnnounce(event: any): void; + // TODO: Delete when following issue is fixed + // https://github.com/PolymerElements/iron-a11y-announcer/issues/52 + static requestAvailability(): void; } interface IronA11yAnnouncer extends LegacyElementMixin, HTMLElement {
diff --git a/third_party/polymer/v3_0/components-chromium/polymer/polymer.d.ts b/third_party/polymer/v3_0/components-chromium/polymer/polymer.d.ts new file mode 100644 index 0000000..510ef77d --- /dev/null +++ b/third_party/polymer/v3_0/components-chromium/polymer/polymer.d.ts
@@ -0,0 +1,30 @@ +/** +@license +Copyright (c) 2019 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +*/ + +import * as gestures from './lib/utils/gestures.js'; + +export {DomIf} from './lib/elements/dom-if.js'; +export {DomRepeat} from './lib/elements/dom-repeat.js'; +export {mixinBehaviors} from './lib/legacy/class.js'; +export {OptionalMutableDataBehavior} from './lib/legacy/mutable-data-behavior.js'; +export {Polymer} from './lib/legacy/polymer-fn.js'; +export {dom, flush} from './lib/legacy/polymer.dom.js'; +export {Templatizer} from './lib/legacy/templatizer-behavior.js'; +export {calculateSplices} from './lib/utils/array-splice.js'; +export {animationFrame, idlePeriod, microTask} from './lib/utils/async.js'; +export {dashToCamelCase} from './lib/utils/case-map.js'; +export {Debouncer, enqueueDebouncer} from './lib/utils/debounce.js'; +export {html} from './lib/utils/html-tag.js'; +export {dedupingMixin} from './lib/utils/mixin.js'; +export {matches, translate} from './lib/utils/path.js'; +export {afterNextRender, beforeNextRender} from './lib/utils/render-status.js'; +export {TemplateInstanceBase, templatize} from './lib/utils/templatize.js'; +export {PolymerElement} from './polymer-element.js'; +export {gestures};
diff --git a/third_party/polymer/v3_0/reproduce.sh b/third_party/polymer/v3_0/reproduce.sh index e5fbc5e..abc40d7 100755 --- a/third_party/polymer/v3_0/reproduce.sh +++ b/third_party/polymer/v3_0/reproduce.sh
@@ -62,6 +62,12 @@ --include="*/" --include="*.d.ts" --exclude="*" \ "node_modules/@polymer/polymer/" "components-chromium/polymer/" +echo 'Generating polymer.d.ts file for Polymer bundle.' +cp polymer.js components-chromium/polymer/polymer.d.ts + +# Apply additional chrome specific patches for the .d.ts files. +patch -p1 --forward -r - < chromium_dts.patch + echo 'Updating paper/iron elements to point to the minified file.' # Replace all paths that point to within polymer/ to point to the bundle. find components-chromium/ -name '*.js' -exec sed -i \
diff --git a/third_party/webgpu-cts/scripts/regenerate_internal_cts_html.py b/third_party/webgpu-cts/scripts/regenerate_internal_cts_html.py index cb6778c..d3309b253 100755 --- a/third_party/webgpu-cts/scripts/regenerate_internal_cts_html.py +++ b/third_party/webgpu-cts/scripts/regenerate_internal_cts_html.py
@@ -5,6 +5,7 @@ import argparse import ast +import errno import tempfile import os import shutil @@ -17,10 +18,23 @@ from compile_src import compile_src_for_node -def generate_internal_cts_html(): +def check_or_write_file(filepath, content, check): + if check: + with open(filepath, 'rb') as dst: + if dst.read() != content: + raise RuntimeError( + '%s is out of date. Please re-run //third_party/webgpu-cts/scripts/run_regenerate_internal_cts_html.py\n' + % filepath) + else: + with open(filepath, 'wb') as dst: + dst.write(content) + + +def generate_internal_cts_html(check): split_list_fd, split_list_fname = tempfile.mkstemp() cts_html_fd, cts_html_fname = tempfile.mkstemp() js_out_dir = tempfile.mkdtemp() + contents = None try: print('WebGPU CTS: Extracting expectation names...') old_sys_path = sys.path @@ -62,7 +76,7 @@ finally: sys.path = old_sys_path - print('WebGPU CTS: Generating cts.html contents...') + print('WebGPU CTS: Generating cts.html...') cmd = [ os.path.join(js_out_dir, 'common/tools/gen_wpt_cts_html.js'), cts_html_fname, @@ -75,13 +89,76 @@ print(RunNode(cmd)) with open(cts_html_fname, 'rb') as f: - return f.read() + contents = f.read() finally: os.close(split_list_fd) os.close(cts_html_fd) shutil.rmtree(js_out_dir) + out_cts_html = os.path.join(third_party_dir, 'blink', 'web_tests', + 'wpt_internal', 'webgpu', 'cts.html') + + if not contents: + raise RuntimeError('Failed to generate %s' % out_cts_html) + + check_or_write_file(out_cts_html, contents, check=check) + + +def generate_reftest_html(check): + # Update this to add/remove subdirectories to check. + sub_dirs = ['web_platform'] + + for sub_dir in sub_dirs: + html_search_dir = os.path.join(third_party_dir, 'webgpu-cts', 'src', + 'src', 'webgpu', sub_dir) + wpt_internal_dir = os.path.join(third_party_dir, 'blink', 'web_tests', + 'wpt_internal', 'webgpu', sub_dir) + + if not check: + shutil.rmtree(wpt_internal_dir) + print('WebGPU CTS: Generating HTML tests from %s...' % html_search_dir) + for root, dirnames, filenames in os.walk(html_search_dir): + for filename in filenames: + if filename.endswith('.html'): + filepath = os.path.join(root, filename) + relative_dir = os.path.relpath(os.path.dirname(filepath), + html_search_dir) + dst_dir = os.path.join(wpt_internal_dir, relative_dir) + gen_base_dir = os.path.join( + '/gen/third_party/webgpu-cts/src/webgpu', sub_dir, + relative_dir) + gen_base_dir = gen_base_dir.replace('\\', '/') + '/' + + try: + os.makedirs(dst_dir) + except OSError as e: + if e.errno == errno.EEXIST and os.path.isdir(dst_dir): + pass + else: + raise + + with open(filepath, 'rb') as src: + src_content = src.read() + + # Find the starting html tag + i = src_content.find('<html') + assert i != -1 + + # Then find the end of the starting html tag + i = src_content.find('>', i) + assert i != -1 + + # Bump the index just past the starting <html> tag + i = i + 1 + + base_tag = b'\n <base href="%s" />' % gen_base_dir + dst_content = src_content[:i] + base_tag + src_content[i:] + + check_or_write_file(os.path.join(dst_dir, filename), + dst_content, + check=check) + if __name__ == '__main__': parser = argparse.ArgumentParser() @@ -91,22 +168,8 @@ parser.add_argument('--stamp', help='Stamp file to write after success.') args = parser.parse_args() - out_cts_html = os.path.join(third_party_dir, 'blink', 'web_tests', - 'wpt_internal', 'webgpu', 'cts.html') - contents = generate_internal_cts_html() - if not contents: - raise RuntimeError('Failed to generate %s' % out_cts_html) - - if args.check: - with open(out_cts_html, 'rb') as f: - if f.read() != contents: - print(contents) - raise RuntimeError( - '%s is out of date. Please re-run //third_party/webgpu-cts/scripts/regenerate_internal_cts_html.py\n' - % out_cts_html) - else: - with open(out_cts_html, 'wb') as f: - f.write(contents) + generate_internal_cts_html(check=args.check) + generate_reftest_html(check=args.check) if args.stamp: with open(args.stamp, 'w') as f:
diff --git a/third_party/webgpu-cts/ts_sources.txt b/third_party/webgpu-cts/ts_sources.txt index 983e4132..10ef309 100644 --- a/third_party/webgpu-cts/ts_sources.txt +++ b/third_party/webgpu-cts/ts_sources.txt
@@ -71,8 +71,8 @@ src/webgpu/util/texture/texel_data.ts src/webgpu/gpu_test.ts src/webgpu/examples.spec.ts +src/webgpu/api/operation/fences.spec.ts src/webgpu/api/operation/labels.spec.ts -src/webgpu/api/operation/onSubmittedWorkDone.spec.ts src/webgpu/api/operation/uncapturederror.spec.ts src/webgpu/api/operation/buffers/mapping_test.ts src/webgpu/api/operation/buffers/map.spec.ts @@ -134,6 +134,7 @@ src/webgpu/api/validation/createView.spec.ts src/webgpu/api/validation/create_pipeline.spec.ts src/webgpu/api/validation/error_scope.spec.ts +src/webgpu/api/validation/fences.spec.ts src/webgpu/api/validation/layout_shader_compat.spec.ts src/webgpu/api/validation/render_pass_descriptor.spec.ts src/webgpu/api/validation/vertex_access.spec.ts @@ -160,7 +161,6 @@ src/webgpu/api/validation/encoding/cmds/render/other.spec.ts src/webgpu/api/validation/encoding/cmds/render/state_tracking.spec.ts src/webgpu/api/validation/encoding/programmable/pipeline_bind_group_compat.spec.ts -src/webgpu/api/validation/encoding/queries/common.ts src/webgpu/api/validation/encoding/queries/begin_end.spec.ts src/webgpu/api/validation/encoding/queries/general.spec.ts src/webgpu/api/validation/encoding/queries/pipeline_statistics.spec.ts
diff --git a/third_party/widevine/cdm/BUILD.gn b/third_party/widevine/cdm/BUILD.gn index e5009f30..24668a4a 100644 --- a/third_party/widevine/cdm/BUILD.gn +++ b/third_party/widevine/cdm/BUILD.gn
@@ -18,6 +18,7 @@ "ENABLE_WIDEVINE=$enable_widevine", "BUNDLE_WIDEVINE_CDM=$bundle_widevine_cdm", "ENABLE_WIDEVINE_CDM_COMPONENT=$enable_widevine_cdm_component", + "ENABLE_MEDIA_FOUNDATION_WIDEVINE_CDM=$enable_media_foundation_widevine_cdm", ] } @@ -88,6 +89,7 @@ public = [ "widevine_cdm_common.h" ] public_deps = [ + ":buildflags", ":version_h", # Forward permission to use version header. "//base", "//media:media_buildflags",
diff --git a/third_party/widevine/cdm/widevine.gni b/third_party/widevine/cdm/widevine.gni index a81a67e..d676aee 100644 --- a/third_party/widevine/cdm/widevine.gni +++ b/third_party/widevine/cdm/widevine.gni
@@ -44,6 +44,13 @@ enable_library_widevine_cdm && (is_win || is_mac || is_linux || is_chromeos_lacros) +# Enable (Windows) Media Foundation Widevine CDM. Desabled by default for test. +declare_args() { + enable_media_foundation_widevine_cdm = false +} +assert(!enable_media_foundation_widevine_cdm || enable_widevine) +assert(!enable_media_foundation_widevine_cdm || is_win) + declare_args() { # Widevine CDM is bundled as part of Google Chrome builds. bundle_widevine_cdm = enable_library_widevine_cdm && is_chrome_branded
diff --git a/third_party/widevine/cdm/widevine_cdm_common.h b/third_party/widevine/cdm/widevine_cdm_common.h index 5eea5c9..718f8e3 100644 --- a/third_party/widevine/cdm/widevine_cdm_common.h +++ b/third_party/widevine/cdm/widevine_cdm_common.h
@@ -6,15 +6,13 @@ #define WIDEVINE_CDM_WIDEVINE_CDM_COMMON_H_ #include "base/token.h" +#include "third_party/widevine/cdm/buildflags.h" -// This file defines constants common to all Widevine CDM versions. +// Default constants common to all Widevine CDMs. // "alpha" is a temporary name until a convention is defined. const char kWidevineKeySystem[] = "com.widevine.alpha"; -const base::Token kWidevineCdmGuid{0x05d908e5dcca9960ull, - 0xcd92d30eac98157aull}; - // Widevine CDM files are in a directory with this name. This path is also // hardcoded in some build files and changing it requires changing the build // files as well. @@ -23,16 +21,28 @@ // This name is used by UMA. Do not change it! const char kWidevineKeySystemNameForUMA[] = "Widevine"; +// Name of the CDM library. +const char kWidevineCdmLibraryName[] = "widevinecdm"; + const char kWidevineCdmDisplayName[] = "Widevine Content Decryption Module"; +const base::Token kWidevineCdmGuid{0x05d908e5dcca9960ull, + 0xcd92d30eac98157aull}; + // Identifier used by the PluginPrivateFileSystem to identify the files stored // for the Widevine CDM. This is used to store persistent files. As the files // were initially used by the CDM running as a pepper plugin, this ID is based // on the pepper plugin MIME type. Changing this will result in any existing -// saved files becoming inaccesssible. +// saved files becoming inaccessible. const char kWidevineCdmFileSystemId[] = "application_x-ppapi-widevine-cdm"; -// Name of the CDM library. -const char kWidevineCdmLibraryName[] = "widevinecdm"; +// Constants specific to Windows MediaFoundation-based Widevine CDM library. +#if BUILDFLAG(ENABLE_MEDIA_FOUNDATION_WIDEVINE_CDM) +const char kMediaFoundationWidevineCdmLibraryName[] = "Google.Widevine.CDM"; +const char kMediaFoundationWidevineCdmDisplayName[] = + "Google Widevine Windows CDM"; +const base::Token kMediaFoundationWidevineCdmGuid{0x8e73dec793bf5adcull, + 0x27e572c9a1fd930eull}; +#endif #endif // WIDEVINE_CDM_WIDEVINE_CDM_COMMON_H_
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec index 7814dd3..8584fa36 100644 --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec
@@ -254,7 +254,11 @@ "includes": [2050], }, "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/chromeos/network_ui/network_ui_resources.grd": { - "META": {"sizes": {"includes": [10]}}, + "META": {"sizes": {"includes": [5]}}, + "includes": [2060], + }, + "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/chromeos/projector/resources.grd": { + "META": {"sizes": {"includes": [5]}}, "includes": [2065], }, "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/download_internals/resources.grd": {
diff --git a/tools/mb/mb.py b/tools/mb/mb.py index c4caabdb..d302cbc 100755 --- a/tools/mb/mb.py +++ b/tools/mb/mb.py
@@ -1470,7 +1470,7 @@ return err, labels def GNCmd(self, subcommand, path, *args): - if self.platform == 'linux2': + if self.platform.startswith('linux'): subdir, exe = 'linux64', 'gn' elif self.platform == 'darwin': subdir, exe = 'mac', 'gn'
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index f6438ff..5f3c30a 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -6270,6 +6270,24 @@ <description>Please enter the description of this user action.</description> </action> +<action name="Discover.DiscoverTabNotification.Clicked"> + <owner>callistus@google.com</owner> + <owner>showoff-eng@google.com</owner> + <description> + User clicked on the Discover tab notification, which launches the Discover + (internally "Showoff") app. + </description> +</action> + +<action name="Discover.DiscoverTabNotification.Shown" not_user_triggered="true"> + <owner>callistus@google.com</owner> + <owner>showoff-eng@google.com</owner> + <description> + A notification for the Discover tab in the Discover (internally + "Showoff") app was shown. + </description> +</action> + <action name="DockingWindow_Bottom"> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> <description>Please enter the description of this user action.</description>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 09da5200..9c4b26e 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -27198,6 +27198,7 @@ <int value="1551" label="ENTERPRISEREPORTINGPRIVATE_GETCERTIFICATE"/> <int value="1552" label="AUTOTESTPRIVATE_ISSYSTEMWEBAPPOPENFUNCTION"/> <int value="1553" label="TTSENGINE_SENDTTSAUDIO"/> + <int value="1554" label="AUTOTESTPRIVATE_ACTIVATEAPPWINDOW"/> </enum> <enum name="ExtensionIconState"> @@ -47426,6 +47427,7 @@ <int value="681622885" label="FullscreenExitUI:enabled"/> <int value="682549212" label="ash-enable-cursor-motion-blur"/> <int value="683013217" label="AllowPopupsDuringPageUnload:disabled"/> + <int value="683433500" label="CommerceMerchantViewer:disabled"/> <int value="684806628" label="TranslateLanguageByULP:disabled"/> <int value="685406951" label="UseNotificationCompatBuilder:disabled"/> <int value="685916283" label="enable-zip-archiver-on-file-manager"/> @@ -47919,6 +47921,7 @@ <int value="1127085005" label="TreatUnsafeDownloadsAsActive:enabled"/> <int value="1127183523" label="PassiveEventListenersDueToFling:enabled"/> <int value="1127427821" label="OmniboxEntitySuggestions:disabled"/> + <int value="1127954225" label="EnableDnsProxy:enabled"/> <int value="1128874009" label="ScalableStatusArea:disabled"/> <int value="1129542111" label="CastAllowAllIPs:disabled"/> <int value="1129888794" label="ash-touch-hud"/> @@ -47977,6 +47980,7 @@ <int value="1179013979" label="OmniboxUIExperimentMaxAutocompleteMatches:enabled"/> <int value="1179407596" label="PreemptiveLinkToTextGeneration:enabled"/> + <int value="1179587141" label="CommerceMerchantViewer:enabled"/> <int value="1179936481" label="enable-android-pay-integration-v1"/> <int value="1180722846" label="OculusVR:disabled"/> <int value="1181056275" label="enable-cloud-backup"/> @@ -48701,6 +48705,7 @@ <int value="1821723343" label="disable-saml-signin"/> <int value="1823102966" label="disable-ipc-flooding-protection"/> <int value="1823337908" label="SmartDim20190221:enabled"/> + <int value="1824332134" label="EnableDnsProxy:disabled"/> <int value="1824931483" label="EnableHistoryFaviconsGoogleServerQuery:disabled"/> <int value="1825369164" label="EnableNewBadgeOnMenuItems:disabled"/>
diff --git a/tools/metrics/histograms/histograms_xml/ash/histograms.xml b/tools/metrics/histograms/histograms_xml/ash/histograms.xml index 4302e7b..101ae84 100644 --- a/tools/metrics/histograms/histograms_xml/ash/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/ash/histograms.xml
@@ -86,7 +86,7 @@ </histogram> <histogram name="Ash.AmbientMode.Activation.{TabletOrClamshell}" - enum="AmbientUiMode" expires_after="2021-05-01"> + enum="AmbientUiMode" expires_after="2022-05-01"> <owner>cowmoo@google.com</owner> <owner>xiaohuic@chromium.org</owner> <summary> @@ -98,7 +98,7 @@ </histogram> <histogram name="Ash.AmbientMode.AnimationSmoothness.PhotoTransition" units="%" - expires_after="2021-09-05"> + expires_after="2022-05-01"> <owner>wutao@chromium.org</owner> <owner>xiaohuic@chromium.org</owner> <summary> @@ -109,7 +109,7 @@ </histogram> <histogram name="Ash.AmbientMode.Enabled" enum="BooleanEnabled" - expires_after="2021-09-05"> + expires_after="2022-05-01"> <owner>cowmoo@google.com</owner> <owner>xiaohuic@chromium.org</owner> <summary> @@ -122,7 +122,7 @@ </histogram> <histogram name="Ash.AmbientMode.EngagementTime.{TabletOrClamshell}" units="ms" - expires_after="2021-05-01"> + expires_after="2022-05-01"> <owner>cowmoo@google.com</owner> <owner>xiaohuic@chromium.org</owner> <summary> @@ -133,7 +133,7 @@ </histogram> <histogram name="Ash.AmbientMode.PhotoSource" enum="AmbientModePhotoSource" - expires_after="2021-09-05"> + expires_after="2022-05-01"> <owner>cowmoo@google.com</owner> <owner>xiaohuic@chromium.org</owner> <summary> @@ -143,7 +143,7 @@ </histogram> <histogram name="Ash.AmbientMode.SelectedNumberOfAlbums" units="int" - expires_after="2021-09-05"> + expires_after="2022-05-01"> <owner>cowmoo@google.com</owner> <owner>xiaohuic@chromium.org</owner> <summary> @@ -154,7 +154,7 @@ </histogram> <histogram name="Ash.AmbientMode.TotalNumberOfAlbums" units="int" - expires_after="2021-09-05"> + expires_after="2022-05-01"> <owner>cowmoo@google.com</owner> <owner>xiaohuic@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/ios/histograms.xml b/tools/metrics/histograms/histograms_xml/ios/histograms.xml index b562e76..e0be51d2 100644 --- a/tools/metrics/histograms/histograms_xml/ios/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/ios/histograms.xml
@@ -580,6 +580,10 @@ previous recording. All buckets from MetricKitExitData are available on iOS 14 and higher (unless MetricKitExitData bucket comments specify otherwise). + Note that crashes while in the background are not considered crashes / + unclean shutdowns in UMA stability metrics. This is because the + "CleanExitBeacon" is set when Chrome is put in the background. + Recorded only if user opted in for sharing diagnostic data on iOS device. Note: The date the data is reported is later than the day it account for. </summary>
diff --git a/tools/metrics/histograms/histograms_xml/media/histograms.xml b/tools/metrics/histograms/histograms_xml/media/histograms.xml index 2a962f01..39b2a77a 100644 --- a/tools/metrics/histograms/histograms_xml/media/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/media/histograms.xml
@@ -2607,7 +2607,7 @@ </histogram> <histogram name="Media.Midi.SendReceiveUsage" enum="MidiSendReceiveUsage" - expires_after="M85"> + expires_after="M95"> <owner>toyoshim@chromium.org</owner> <owner>midi-dev@chromium.org</owner> <summary> @@ -2615,17 +2615,23 @@ once per MidiManager instantiation, upon destruction. MidiManager is instantiated when the first Web MIDI client starts a session, and destroyed when the last client ends the session. + + Warning: this histogram was expired from M86 to M91; data may be missing. </summary> </histogram> <histogram name="Media.Midi.SysExMessageSizeUpTo1MB" units="bytes" - expires_after="M85"> + expires_after="M95"> <owner>toyoshim@chromium.org</owner> <owner>midi-dev@chromium.org</owner> - <summary>Reports sysex message size.</summary> + <summary> + Reports sysex message size. + + Warning: this histogram was expired from M86 to M91; data may be missing. + </summary> </histogram> -<histogram name="Media.Midi.Usage" enum="MidiUsage" expires_after="M85"> +<histogram name="Media.Midi.Usage" enum="MidiUsage" expires_after="M95"> <owner>toyoshim@chromium.org</owner> <owner>midi-dev@chromium.org</owner> <summary> @@ -2633,6 +2639,8 @@ the real API usage because this can be counted by feature scanning scripts that are often used for footprinting. You may want to track SendReceiveUsage to monitor only instances that actually send or receive MIDI messages. + + Warning: this histogram was expired from M86 to M91; data may be missing. </summary> </histogram>
diff --git a/tools/metrics/histograms/histograms_xml/net/histograms.xml b/tools/metrics/histograms/histograms_xml/net/histograms.xml index 85d8d9a..a9373ff8 100644 --- a/tools/metrics/histograms/histograms_xml/net/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/net/histograms.xml
@@ -1649,6 +1649,9 @@ <histogram name="Net.ErrorCodesForTLS13ExperimentMainFrame2" enum="NetErrorCodes" expires_after="M78"> + <obsolete> + Removed April 2021 + </obsolete> <owner>svaldez@chromium.org</owner> <summary> Positive net error codes that requests for pages end with, including net::OK @@ -5049,6 +5052,9 @@ <histogram name="Net.SSL_Connection_Error_TLS13Experiment" enum="NetErrorCodes" expires_after="M78"> + <obsolete> + Removed April 2021 + </obsolete> <owner>svaldez@chromium.org</owner> <summary> Counts of specific error codes returned when opening an SSL connection for @@ -5065,6 +5071,9 @@ <histogram name="Net.SSL_Connection_Latency_TLS13Experiment" units="ms" expires_after="M85"> + <obsolete> + Removed April 2021 + </obsolete> <owner>svaldez@chromium.org</owner> <summary> Time from when the Connect() starts until it completes for a set of domains
diff --git a/tools/metrics/histograms/histograms_xml/offline/histograms.xml b/tools/metrics/histograms/histograms_xml/offline/histograms.xml index f4e5f4e..67853d6 100644 --- a/tools/metrics/histograms/histograms_xml/offline/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/offline/histograms.xml
@@ -712,6 +712,22 @@ <summary>Result of removing an offline copy for a page.</summary> </histogram> +<histogram name="OfflinePages.DidNavigationThrottleCancelNavigation" + enum="Boolean" expires_after="M94"> + <owner>curranmax@chromium.org</owner> + <owner>tbansal@chromium.org</owner> + <summary> + Whether or not the OfflinePageNavigationThrottle canceled a navigation + request. Requests are only canceled if and only if the navigation request + was initiated by the renderer and the request headers contain the + "X-Chrome-offline" header. + + This histogram is recorded each time Chrome tries to create an + OfflinePageNavigationThrottle, which only happens on Android (since Offline + Pages is on enabled there). + </summary> +</histogram> + <histogram name="OfflinePages.DownloadRequestTimeSinceDuplicateRequested" units="seconds" expires_after="2021-09-05"> <owner>dewittj@chromium.org</owner>
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py index 69559df..291d108 100755 --- a/tools/perf/core/perf_data_generator.py +++ b/tools/perf/core/perf_data_generator.py
@@ -800,6 +800,8 @@ 'platform': 'mac', 'dimension': { + 'cpu': + 'x86-64', 'gpu': '8086:1626', 'os': @@ -876,6 +878,8 @@ 'platform': 'mac', 'dimension': { + 'cpu': + 'x86-64', 'gpu': '1002:6821-4.0.20-3.2.8', 'os':
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 6d1bb89..1e8d0631 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -1,8 +1,8 @@ { "trace_processor_shell": { "win": { - "hash": "68d41a8744343eb9fcadfb004a8eddaf1e8083bc", - "remote_path": "perfetto_binaries/trace_processor_shell/win/dd6f2bc226b22086345c7da0ae62bbc3c3ff850a/trace_processor_shell.exe" + "hash": "0de6582e17aa4582d700e243c3c5ed55174545d3", + "remote_path": "perfetto_binaries/trace_processor_shell/win/e01ad9a6a83bd8df88dc01bc86fd0ec9080296c7/trace_processor_shell.exe" }, "mac": { "hash": "ae04e80011f5918c2c3ec673c3c553d8a4698f18",
diff --git a/tools/perf/page_sets/desktop_ui/ui_devtools_utils.py b/tools/perf/page_sets/desktop_ui/ui_devtools_utils.py index 585dd26..c5ecf3e7 100644 --- a/tools/perf/page_sets/desktop_ui/ui_devtools_utils.py +++ b/tools/perf/page_sets/desktop_ui/ui_devtools_utils.py
@@ -2,12 +2,56 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +''' +This file provide some helper functions to send mouse and +keyboard events to interact with the browser. Please see existing +usage for how to use the functions. + +To simulate mouse events, first locate the UI element which has +the event listener attached to, then use the DispatchMouseEvent +API to send the desiring mouse events to it. + +To simulate keyboard events. either locate the UI element which +has the event listener attached to or the top level window element +that contains it, then use the DispatchKeyEvent API to send the +desiring key events to it. Due to the current status of UI Devtools, +locating the top level window element is not supported on Mac OS yet. + +Note that chrome has 2 classes of keyboard events: key stroke events and +character events(See definition from ui/events/event.h). In DispatchKeyEvent +API, key stroke events will propagate to the normal event flow where as +character events will bypass input method and send directly to the focused +text input client. Use PressKey to send key stroke events and InputText to +send character events. + +The query language of UI Devtools is documented in docs/ui/ui_devtools/index.md, +Use search by tag by surrounding query with <>, which is useful to locate a +Window element. Use exact search by surrounding query with "", which is useful +by searching UI element classes with the exact name. +''' + +import sys import time from telemetry.internal.browser.ui_devtools import \ MOUSE_EVENT_TYPE_MOUSE_PRESSED, \ MOUSE_EVENT_TYPE_MOUSE_RELEASED, \ - MOUSE_EVENT_BUTTON_LEFT + MOUSE_EVENT_BUTTON_LEFT, \ + KEY_EVENT_TYPE_KEY_PRESSED, \ + KEY_EVENT_TYPE_KEY_RELEASED +from telemetry.internal.actions.key_event import GetKey + + +def IsMac(): + return sys.platform == 'darwin' + + +# Modifier key definition from ui/events/event_constants.h +SHIFT_DOWN = 1 << 1 +CONTROL_DOWN = 1 << 2 +ALT_DOWN = 1 << 3 +COMMAND_DOWN = 1 << 4 +PLATFORM_ACCELERATOR = COMMAND_DOWN if IsMac() else CONTROL_DOWN def ClickOn(ui_devtools, @@ -17,6 +61,9 @@ y=0, button=MOUSE_EVENT_BUTTON_LEFT, click_interval=0.2): + ''' + Send mouse pressed and release events to an UI element. + ''' # "" means exact search for UI Devtools. node_id = ui_devtools.QueryNodes('"%s"' % class_name)[index] ui_devtools.DispatchMouseEvent(node_id, MOUSE_EVENT_TYPE_MOUSE_PRESSED, x, y, @@ -25,3 +72,33 @@ ui_devtools.DispatchMouseEvent(node_id, MOUSE_EVENT_TYPE_MOUSE_RELEASED, x, y, button) time.sleep(click_interval) + + +def PressKey(ui_devtools, node_id, key_name, flags=0, key_interval=0.1): + ''' + Send key stroke events to an UI element. Key names are defined in + third_party/catapult/telemetry/telemetry/internal/actions/key_event.py + ''' + key_code, _ = GetKey(key_name) + ui_devtools.DispatchKeyEvent(node_id, + KEY_EVENT_TYPE_KEY_PRESSED, + key_code, + flags=flags) + time.sleep(key_interval) + ui_devtools.DispatchKeyEvent(node_id, + KEY_EVENT_TYPE_KEY_RELEASED, + key_code, + flags=flags) + time.sleep(key_interval) + + +def InputText(ui_devtools, node_id, text, key_interval=0.1): + ''' + Send text as character events to an UI element. + ''' + for ch in text: + ui_devtools.DispatchKeyEvent(node_id, + KEY_EVENT_TYPE_KEY_PRESSED, + key=ord(ch), + is_char=True) + time.sleep(key_interval)
diff --git a/tools/typescript/definitions/bookmarks.d.ts b/tools/typescript/definitions/bookmarks.d.ts new file mode 100644 index 0000000..2eec6d8 --- /dev/null +++ b/tools/typescript/definitions/bookmarks.d.ts
@@ -0,0 +1,74 @@ +// Copyright 2021 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. + +/** @fileoverview Definitions for chrome.bookmarks API. */ +// TODO(crbug.com/1203307): Auto-generate this file. + +declare namespace chrome { + export namespace bookmarks { + export enum BookmarkTreeNodeUnmodifiable { + MANAGED = 'managed', + } + + export interface BookmarkTreeNode { + id: string; + parentId: string|undefined; + index: number|undefined; + url: string|undefined; + title: string; + dateAdded: number|undefined; + dateGroupModified: number|undefined; + unmodifiable: BookmarkTreeNodeUnmodifiable|undefined; + children: BookmarkTreeNode[]|undefined; + } + + export interface CreateDetails { + parentId: string|undefined; + index: number|undefined; + title: string|undefined; + url: string|undefined; + } + + export const MAX_WRITE_OPERATIONS_PER_HOUR: number; + export const MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE: number; + + export function get( + idOrIdList: string|string[], + callback: (p1: BookmarkTreeNode[]) => void); + + export function getChildren( + id: string, callback: (p1: BookmarkTreeNode[]) => void); + + export function getRecent( + numberOfItems: number, callback: (p1: BookmarkTreeNode[]) => void); + + export function getTree(callback: (p1: BookmarkTreeNode[]) => void); + + export function getSubTree( + id: string, callback: (p1: BookmarkTreeNode[]) => void); + + export function search( + query: string|{ + query: string | undefined, + url: string|undefined, + title: string|undefined + }, + callback: (p1: BookmarkTreeNode[]) => void); + + export function create( + bookmark: CreateDetails, callback?: (p1: BookmarkTreeNode) => void); + + export function move( + id: string, + destination: {parentId: string|undefined, index: number|undefined}, + callback?: (p1: BookmarkTreeNode) => void); + + export function update( + id: string, changes: {title: string|undefined, url: string|undefined}, + callback?: (p1: BookmarkTreeNode) => void); + + export function remove(id: string, callback?: () => void); + export function removeTree(id: string, callback?: () => void); + } +}
diff --git a/tools/typescript/definitions/chrome_send.d.ts b/tools/typescript/definitions/chrome_send.d.ts new file mode 100644 index 0000000..44be4a4 --- /dev/null +++ b/tools/typescript/definitions/chrome_send.d.ts
@@ -0,0 +1,9 @@ +// Copyright 2021 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. + +/** @fileoverview Definitions for chrome.send API */ + +declare namespace chrome { + function send(msg: string, params?: Array<any>): void; +}
diff --git a/tools/typescript/definitions/metrics_private.d.ts b/tools/typescript/definitions/metrics_private.d.ts new file mode 100644 index 0000000..457a1f18 --- /dev/null +++ b/tools/typescript/definitions/metrics_private.d.ts
@@ -0,0 +1,55 @@ +// Copyright 2021 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. + +/** @fileoverview Definitions for chrome.metricsPrivate API */ +// TODO(crbug.com/1203307): Auto-generate this file. + +declare namespace chrome { + export namespace metricsPrivate { + + export enum MetricTypeType { + HISTOGRAM_LOG = 'histogram-log', + HISTOGRAM_LINEAR = 'histogram-linear' + } + + export interface MetricType { + metricName: string; + type: MetricTypeType; + min: number; + max: number; + buckets: number; + } + + export interface HistogramBucket { + min: number; + max: number; + count: number; + } + + export interface Histogram { + sum: number; + buckets: HistogramBucket[]; + } + + export function getHistogram( + name: string, callback: (p1: Histogram) => void); + export function getIsCrashReportingEnabled(callback: (p1: boolean) => void); + export function getFieldTrial(name: string, callback: (p1: string) => void); + export function getVariationParams( + name: string, callback: (p1: Object|undefined) => void); + export function recordPercentage(metricName: string, value: number); + export function recordCount(metricName: string, value: number); + export function recordSmallCount(metricName: string, value: number); + export function recordMediumCount(metricName: string, value: number); + export function recordTime(metricName: string, value: number); + export function recordMediumTime(metricName: string, value: number); + export function recordLongTime(metricName: string, value: number); + export function recordSparseHashable(metricName: string, value: string); + export function recordSparseValue(metricName: string, value: number); + export function recordValue(metric: MetricType, value: number); + export function recordBoolean(metricName: string, value: boolean); + export function recordEnumerationValue( + metricName: string, value: number, enumSize: number); + } +}
diff --git a/tools/typescript/ts_library.gni b/tools/typescript/ts_library.gni index 02c62bc..119ddfca 100644 --- a/tools/typescript/ts_library.gni +++ b/tools/typescript/ts_library.gni
@@ -94,7 +94,7 @@ rebase_path("//third_party/polymer/v3_0/components-chromium/*", target_gen_dir), "chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js|" + rebase_path( - "//third_party/polymer/v3_0/components-chromium/polymer/polymer-element.d.ts", + "//third_party/polymer/v3_0/components-chromium/polymer/polymer.d.ts", target_gen_dir), ] args += [ "--path_mappings" ] + path_mappings
diff --git a/ui/base/test/skia_gold_pixel_diff.cc b/ui/base/test/skia_gold_pixel_diff.cc index 2d4da57a..b62723fb 100644 --- a/ui/base/test/skia_gold_pixel_diff.cc +++ b/ui/base/test/skia_gold_pixel_diff.cc
@@ -291,12 +291,12 @@ cmd.AppendSwitch(kDryRun); } - std::map<std::string, std::string> optional_keys; + std::map<std::string, std::string> test_keys; if (!ShouldMakeGerritCommentsOnFailures()) { - optional_keys["ignore"] = "1"; + test_keys["ignore"] = "1"; } - for (auto key : optional_keys) { - cmd.AppendSwitchASCII("add-test-optional-key", + for (auto key : test_keys) { + cmd.AppendSwitchASCII("add-test-key", base::StrCat({key.first, ":", key.second})); }
diff --git a/ui/base/test/skia_gold_pixel_diff_unittest.cc b/ui/base/test/skia_gold_pixel_diff_unittest.cc index fea9835..bb35ea5 100644 --- a/ui/base/test/skia_gold_pixel_diff_unittest.cc +++ b/ui/base/test/skia_gold_pixel_diff_unittest.cc
@@ -281,11 +281,10 @@ MockSkiaGoldPixelDiff mock_pixel; EXPECT_CALL(mock_pixel, LaunchProcess(_)).Times(AnyNumber()); - EXPECT_CALL( - mock_pixel, - LaunchProcess(AllOf(Property( - &base::CommandLine::GetCommandLineString, - HasSubstr(FILE_PATH_LITERAL("--add-test-optional-key=ignore:1")))))) + EXPECT_CALL(mock_pixel, + LaunchProcess(AllOf(Property( + &base::CommandLine::GetCommandLineString, + HasSubstr(FILE_PATH_LITERAL("--add-test-key=ignore:1")))))) .Times(1); mock_pixel.Init("Prefix"); bool ret = mock_pixel.CompareScreenshot("test", GetTestBitmap()); @@ -300,9 +299,9 @@ EXPECT_CALL(mock_pixel, LaunchProcess(_)).Times(AnyNumber()); EXPECT_CALL( mock_pixel, - LaunchProcess(AllOf(Property(&base::CommandLine::GetCommandLineString, - Not(HasSubstr(FILE_PATH_LITERAL( - "--add-test-optional-key=ignore:1"))))))) + LaunchProcess(AllOf(Property( + &base::CommandLine::GetCommandLineString, + Not(HasSubstr(FILE_PATH_LITERAL("--add-test-key=ignore:1"))))))) .Times(3); mock_pixel.Init("Prefix"); bool ret = mock_pixel.CompareScreenshot("test", GetTestBitmap()); @@ -320,9 +319,9 @@ EXPECT_CALL(mock_pixel, LaunchProcess(_)).Times(AnyNumber()); EXPECT_CALL( mock_pixel, - LaunchProcess(AllOf(Property(&base::CommandLine::GetCommandLineString, - Not(HasSubstr(FILE_PATH_LITERAL( - "--add-test-optional-key=ignore:1"))))))) + LaunchProcess(AllOf(Property( + &base::CommandLine::GetCommandLineString, + Not(HasSubstr(FILE_PATH_LITERAL("--add-test-key=ignore:1"))))))) .Times(3); mock_pixel.Init("Prefix"); bool ret = mock_pixel.CompareScreenshot("test", GetTestBitmap()); @@ -340,9 +339,9 @@ EXPECT_CALL(mock_pixel, LaunchProcess(_)).Times(AnyNumber()); EXPECT_CALL( mock_pixel, - LaunchProcess(AllOf(Property(&base::CommandLine::GetCommandLineString, - Not(HasSubstr(FILE_PATH_LITERAL( - "--add-test-optional-key=ignore:1"))))))) + LaunchProcess(AllOf(Property( + &base::CommandLine::GetCommandLineString, + Not(HasSubstr(FILE_PATH_LITERAL("--add-test-key=ignore:1"))))))) .Times(3); mock_pixel.Init("Prefix"); bool ret = mock_pixel.CompareScreenshot("test", GetTestBitmap());
diff --git a/ui/file_manager/file_manager/background/js/file_operation_manager.js b/ui/file_manager/file_manager/background/js/file_operation_manager.js index 5a07510..ab0248f 100644 --- a/ui/file_manager/file_manager/background/js/file_operation_manager.js +++ b/ui/file_manager/file_manager/background/js/file_operation_manager.js
@@ -621,7 +621,6 @@ } /** - * TODO(crbug.com/912236) Remove dead code. * Creates a zip file for the selection of files. * * @param {!Array<!Entry>} selectionEntries The selected entries.
diff --git a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js index ac5893c..fc21d51e 100644 --- a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js +++ b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js
@@ -2170,12 +2170,10 @@ } if (util.isZipPackEnabled()) { - // TODO(crbug.com/912236) Implement and remove error notification. - const item = new ProgressCenterItem(); - item.id = 'no_zip'; - item.message = 'Cannot zip selection: Not implemented yet'; - item.state = ProgressItemState.ERROR; - fileManager.progressCenter.updateItem(item); + const selectionEntries = fileManager.getSelection().entries; + fileManager.fileOperationManager.zipSelection( + selectionEntries, /** @type {!DirectoryEntry} */ (dirEntry)); + } else { fileManager.taskController.getFileTasks() .then(tasks => {
diff --git a/ui/views/corewm/tooltip_controller.cc b/ui/views/corewm/tooltip_controller.cc index 367685b..1d61935f 100644 --- a/ui/views/corewm/tooltip_controller.cc +++ b/ui/views/corewm/tooltip_controller.cc
@@ -175,7 +175,9 @@ } void TooltipController::OnKeyEvent(ui::KeyEvent* event) { - // Always hide a tooltip on a key event. Since this controller is a pre-target + if (event->type() != ui::ET_KEY_PRESSED) + return; + // Always hide a tooltip on a key press. Since this controller is a pre-target // handler (i.e. the events are received here before the target act on them), // hiding the tooltip will not cancel any action supposed to show it triggered // by a key press. @@ -192,9 +194,6 @@ switch (event->type()) { case ui::ET_MOUSE_CAPTURE_CHANGED: case ui::ET_MOUSE_EXITED: - // TODO(bebeaudr): Keyboard-triggered tooltips that show up right where the - // cursor currently is are hidden as soon as they show up because of this - // event. Handle this case differently to fix the issue. case ui::ET_MOUSE_MOVED: case ui::ET_MOUSE_DRAGGED: { last_mouse_loc_ = event->location();
diff --git a/ui/views/corewm/tooltip_controller_unittest.cc b/ui/views/corewm/tooltip_controller_unittest.cc index 31bf3ad..a28a232 100644 --- a/ui/views/corewm/tooltip_controller_unittest.cc +++ b/ui/views/corewm/tooltip_controller_unittest.cc
@@ -539,6 +539,23 @@ EXPECT_EQ(window, helper_->GetTooltipParentWindow()); } +TEST_F(TooltipControllerTest, TooltipStaysVisibleOnKeyRelease) { + view_->set_tooltip_text(u"my tooltip"); + EXPECT_EQ(std::u16string(), helper_->GetTooltipText()); + EXPECT_EQ(nullptr, helper_->GetTooltipParentWindow()); + + generator_->MoveMouseRelativeTo(GetWindow(), view_->bounds().CenterPoint()); + EXPECT_TRUE(helper_->IsTooltipVisible()); + + // This shouldn't hide the tooltip. + generator_->ReleaseKey(ui::VKEY_1, 0); + EXPECT_TRUE(helper_->IsTooltipVisible()); + + // This should hide the tooltip. + generator_->PressKey(ui::VKEY_1, 0); + EXPECT_FALSE(helper_->IsTooltipVisible()); +} + TEST_F(TooltipControllerTest, TooltipHidesOnTimeoutAndStaysHiddenUntilChange) { view_->set_tooltip_text(u"Tooltip Text for view 1"); EXPECT_EQ(std::u16string(), helper_->GetTooltipText());
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc index 56a8ac45..4f9172e 100644 --- a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc +++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
@@ -622,10 +622,7 @@ if (IsFullscreen() == fullscreen) return; - auto weak_ptr = GetWeakPtr(); platform_window()->ToggleFullscreen(); - if (!weak_ptr) - return; // The state must change synchronously to let media react on fullscreen // changes.
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc index 4dcb1abd..86a6610 100644 --- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc +++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
@@ -466,10 +466,7 @@ } void DesktopWindowTreeHostWin::SetFullscreen(bool fullscreen) { - auto weak_ptr = GetWeakPtr(); message_handler_->SetFullscreen(fullscreen); - if (!weak_ptr) - return; // TODO(sky): workaround for ScopedFullscreenVisibility showing window // directly. Instead of this should listen for visibility changes and then // update window.
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc index a0ad0bc3..8bb2131 100644 --- a/ui/views/widget/widget.cc +++ b/ui/views/widget/widget.cc
@@ -760,10 +760,7 @@ if (IsFullscreen() == fullscreen) return; - auto weak_ptr = GetWeakPtr(); native_widget_->SetFullscreen(fullscreen); - if (!weak_ptr) - return; if (non_client_view_) non_client_view_->InvalidateLayout();
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc index c8a4a0622..c11baa36 100644 --- a/ui/views/widget/widget_unittest.cc +++ b/ui/views/widget/widget_unittest.cc
@@ -3289,41 +3289,6 @@ IsNativeWindowVisible(top_level_widget->GetNativeWindow())); } -// Used to delete the widget when the supplied bounds changes. -class DestroyingWidgetBoundsObserver : public WidgetObserver { - public: - explicit DestroyingWidgetBoundsObserver(std::unique_ptr<Widget> widget) - : widget_(std::move(widget)) { - widget_->AddObserver(this); - } - - // There are no assertions here as not all platforms call - // OnWidgetBoundsChanged() when going fullscreen. - ~DestroyingWidgetBoundsObserver() override = default; - - // WidgetObserver: - void OnWidgetBoundsChanged(Widget* widget, - const gfx::Rect& new_bounds) override { - widget_->RemoveObserver(this); - widget_.reset(); - } - - private: - std::unique_ptr<Widget> widget_; -}; - -// Deletes a Widget when the bounds change as part of toggling fullscreen. -// This is a regression test for https://crbug.com/1197436 . -TEST_F(DesktopWidgetTest, DeleteInSetFullscreen) { - std::unique_ptr<Widget> widget = std::make_unique<Widget>(); - Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); - params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; - widget->Init(std::move(params)); - Widget* w = widget.get(); - DestroyingWidgetBoundsObserver destroyer(std::move(widget)); - w->SetFullscreen(true); -} - namespace { class FullscreenAwareFrame : public views::NonClientFrameView {
diff --git a/ui/views/win/fullscreen_handler.cc b/ui/views/win/fullscreen_handler.cc index 708d28f..8791362 100644 --- a/ui/views/win/fullscreen_handler.cc +++ b/ui/views/win/fullscreen_handler.cc
@@ -70,7 +70,6 @@ fullscreen_ = fullscreen; - auto ref = weak_ptr_factory_.GetWeakPtr(); if (fullscreen_) { // Set new window style and size. SetWindowLong(hwnd_, GWL_STYLE, @@ -103,8 +102,6 @@ new_rect.height(), SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); } - if (!ref) - return; MarkFullscreen(fullscreen); }
diff --git a/ui/views/win/fullscreen_handler.h b/ui/views/win/fullscreen_handler.h index c76ef18..fe17c7f 100644 --- a/ui/views/win/fullscreen_handler.h +++ b/ui/views/win/fullscreen_handler.h
@@ -11,7 +11,6 @@ #include <map> #include "base/macros.h" -#include "base/memory/weak_ptr.h" namespace gfx { class Rect; @@ -55,8 +54,6 @@ // Used to mark a window as fullscreen. Microsoft::WRL::ComPtr<ITaskbarList2> task_bar_list_; - base::WeakPtrFactory<FullscreenHandler> weak_ptr_factory_{this}; - DISALLOW_COPY_AND_ASSIGN(FullscreenHandler); };
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc index 7ebab24..73970de 100644 --- a/ui/views/win/hwnd_message_handler.cc +++ b/ui/views/win/hwnd_message_handler.cc
@@ -2936,11 +2936,8 @@ void HWNDMessageHandler::OnWindowPosChanged(WINDOWPOS* window_pos) { TRACE_EVENT0("ui", "HWNDMessageHandler::OnWindowPosChanged"); - base::WeakPtr<HWNDMessageHandler> ref(msg_handler_weak_factory_.GetWeakPtr()); if (DidClientAreaSizeChange(window_pos)) ClientAreaSizeChanged(); - if (!ref) - return; if (window_pos->flags & SWP_FRAMECHANGED) SetDwmFrameExtension(DwmFrameState::kOn); if (window_pos->flags & SWP_SHOWWINDOW) {
diff --git a/ui/webui/resources/js/i18n_behavior.m.d.ts b/ui/webui/resources/js/i18n_behavior.m.d.ts index 674fe968c..d4343cd7 100644 --- a/ui/webui/resources/js/i18n_behavior.m.d.ts +++ b/ui/webui/resources/js/i18n_behavior.m.d.ts
@@ -4,16 +4,18 @@ import {SanitizeInnerHtmlOpts} from 'chrome://resources/js/parse_html_subset.m.js'; -export {I18nBehavior}; - -interface I18nBehavior { +export interface I18nBehaviorInterface { locale: string|null|undefined; i18nUpdateLocale(): void; i18n(id: string, ...var_args: Array<string|number>): string; - i18nAdvanced(id: string, opts?: SanitizeInnerHtmlOpts|null): string; + i18nAdvanced(id: string, opts?: SanitizeInnerHtmlOpts): string; i18nDynamic(locale: string, id: string, ...var_args: string[]): string; i18nRecursive(locale: string, id: string, ...var_args: string[]): string; i18nExists(id: string): boolean; } +export {I18nBehavior}; + +interface I18nBehavior extends I18nBehaviorInterface {} + declare const I18nBehavior: object;
diff --git a/ui/webui/resources/js/web_ui_listener_behavior.m.d.ts b/ui/webui/resources/js/web_ui_listener_behavior.m.d.ts index dac88554..3f09fd19 100644 --- a/ui/webui/resources/js/web_ui_listener_behavior.m.d.ts +++ b/ui/webui/resources/js/web_ui_listener_behavior.m.d.ts
@@ -2,10 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -export {WebUIListenerBehavior}; - -interface WebUIListenerBehavior { +export interface WebUIListenerBehaviorInterface { addWebUIListener(eventName: string, callback: Function): void; } +export {WebUIListenerBehavior}; + +interface WebUIListenerBehavior extends WebUIListenerBehaviorInterface {} + declare const WebUIListenerBehavior: object;