diff --git a/DEPS b/DEPS index 4e0cce6..3a5ba7b 100644 --- a/DEPS +++ b/DEPS
@@ -228,11 +228,11 @@ # 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': 'd7437eec2e9718eda8c8f5cb94ddcef1005c0bfb', + 'skia_revision': '6bf9189ae55401fcfaaadb8ee7bcc8103f87ddfe', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'd5bc1bb5517606fbd131b29cc36170c00d58da13', + 'v8_revision': '4ca9099406f256e1582a6e7ddc17d3162d569fec', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -240,15 +240,15 @@ # 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': 'a379730191b995d184997764db25dd686c8335ab', + 'angle_revision': '61517a160f016bcc4922fe49255405986ccf8182', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '44660405ea6ce02683617cc483aecc080499aa27', + 'swiftshader_revision': 'dcfc0a6e2d8440695e44745126747e4c8aed6cf6', # 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': '6c8cd905587809a0ff299d1edb34fc85bed4c976', + 'pdfium_revision': 'fdbfb3c44434f3de59d2e23a8dbfeefe52608167', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -299,7 +299,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': '4360d3a81d9d484e96562f1291f273ffadcb0a7d', + 'catapult_revision': '61f0e50fb92a3aea539bf5c22f3708e12e90dd17', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -347,11 +347,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': 'ccc4766e76ecaf3424f6cb74aa8ccee80800464b', + 'dawn_revision': '8975f1656de5af1044e5d15bb0a5f40d644ffe04', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'quiche_revision': 'e39688aa0c2ecbed7d2bd9a5ad10be5e2e8932fb', + 'quiche_revision': '3a9a2464c5d09875d2214300fab53145df81ee47', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ios_webkit # and whatever else without interference from each other. @@ -767,7 +767,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'lo5p1oo8yhPj2rUylGmKm2aBBQvNarY6hgj1tYbctQkC', + 'version': 'GpWCGdjX5wF8nbSbZY5hqlRfEA-DL6lRgj-iN2tjTXIC', }, ], 'condition': 'checkout_android', @@ -1372,7 +1372,7 @@ Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '3dd5b80bc4f172dd82925bb259cb7c82348409c5', 'src/third_party/openscreen/src': - Var('chromium_git') + '/openscreen' + '@' + '0a7aefe8037a448db69f9314b360e3e10f4cab74', + Var('chromium_git') + '/openscreen' + '@' + 'b9be95eef079e1c04520a05a3bd057bec59b77a3', 'src/third_party/openxr/src': { 'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + 'bf21ccb1007bb531b45d9978919a56ea5059c245', @@ -1389,7 +1389,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '70e408c9bc8610ab9a8484b2ed91461d8416166e', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '171e281775914c1c427b926666bf1c0f8070e762', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1478,7 +1478,7 @@ 'packages': [ { 'package': 'fuchsia/third_party/aemu/linux-amd64', - 'version': 'pmyID7CW-4NsGYefh7NnE4xj3AbHD5lu9r5GLO3rzMYC' + 'version': 'DxCnfY154Xn-UYrZ-GF8FewyGfo29cYHkKdDMgpEHJkC' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -1618,10 +1618,10 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '827cad9e402b63bbe38787456115bcb681a8a152', 'src/third_party/webgpu-cts/src': - Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'c53abb766db4f9a1369b084b985319379b74f1b7', + Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '6881e0cd401986aa80bdbf132ca4ab434bc1d7d7', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '53adc7b1c8b200bd3227fb06157a56bff09471bb', + Var('webrtc_git') + '/src.git' + '@' + 'bdf35afa3992d8208a1744d64559225d56718fe7', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1682,7 +1682,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@0373519cba23d48901497d77251cb5f7e9df5cfa', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@499fb7ba4c37e93cf8cbe4c1ade18d38e926578c', 'condition': 'checkout_src_internal', },
diff --git a/WATCHLISTS b/WATCHLISTS index d2757f7..7be716f 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -90,6 +90,9 @@ 'filepath': 'chrome/android/java/src/org/chromium/chrome/browser/toolbar/' \ '|chrome/browser/ui/android/toolbar/' }, + 'android_toolbar_deps': { + 'filepath': 'chrome/android/java/src/org/chromium/chrome/browser/toolbar/DEPS' + }, 'android_uma_settings': { 'filepath': 'chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferencesManager.java|'\ 'chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java|'\ @@ -2115,8 +2118,8 @@ 'android_studio': ['wnwen+watch@chromium.org', 'nyquist+watch@chromium.org'], 'android_tab': ['dtrainor+watch@chromium.org'], - 'android_toolbar': ['jinsukkim+watch@chromium.org', - 'hanxi+watch@chromium.org'], + 'android_toolbar': ['hanxi+watch@chromium.org'], + 'android_toolbar_deps': ['jinsukkim+watch@chromium.org'], 'android_uma_settings': ['asvitkine+watch@chromium.org', 'gayane+watch@chromium.org'], 'android_webapk': ['dominickn+watch-webapk@chromium.org',
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn index 6700b18..28b5c56b 100644 --- a/android_webview/test/BUILD.gn +++ b/android_webview/test/BUILD.gn
@@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//android_webview/system_webview_apk_tmpl.gni") import("//android_webview/variables.gni") import("//build/config/android/rules.gni") import("//build/config/python.gni") @@ -27,6 +28,18 @@ data = [ "//android_webview/tools/cts_config/" ] } +script_test("crx_smoke_tests") { + script = + "//android_webview/test/components/run_webview_component_smoketest.py" + run_under_python2 = true + args = [ "--webview-package-name=$system_webview_package_name" ] + data = [ "//android_webview/test/components/crx_smoke_tests.py" ] + data_deps = [ + "//android_webview:system_webview_apk", + "//android_webview/tools/system_webview_shell:system_webview_shell_apk", + ] +} + script_test("system_webview_wpt") { script = "//testing/scripts/run_android_wpt.py" args = [
diff --git a/android_webview/test/components/crx_smoke_tests.py b/android_webview/test/components/crx_smoke_tests.py new file mode 100644 index 0000000..3484aa2 --- /dev/null +++ b/android_webview/test/components/crx_smoke_tests.py
@@ -0,0 +1,161 @@ +# 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 json +import logging +import os +import posixpath +import sys +import time +import zipfile + +from collections import namedtuple +from py_utils.tempfile_ext import NamedTemporaryDirectory +from telemetry.testing import serially_executed_browser_test_case + +logger = logging.getLogger(__name__) +ComponentData = namedtuple('ComponentData', ['component_id', 'browser_args']) +_SET_CONDITION_HTML = """ +var test_harness = {} +test_harness.test_succeeded = true; +window.webview_smoke_test_harness = test_harness; +""" +_COMPONENT_NAME_TO_DATA = { + 'WebViewAppsPackageNamesAllowlist': ComponentData( + component_id = 'aemllinfpjdgcldgaelcgakpjmaekbai', + browser_args = [ + '--enable-features=WebViewAppsPackageNamesAllowlist', + '--vmodule=*_allowlist_component_*=2']) +} + +class WebViewCrxSmokeTests( + serially_executed_browser_test_case.SeriallyExecutedBrowserTestCase): + + _device = None + _device_components_dir = None + + @classmethod + def Name(cls): + return 'webview_crx_smoke_tests' + + @classmethod + def SetBrowserOptions(cls, finder_options): + """Sets browser command line arguments + + Args: + finder_options: Command line arguments for starting the browser""" + finder_options_copy = finder_options.Copy() + finder_options_copy.browser_options.AppendExtraBrowserArgs( + _COMPONENT_NAME_TO_DATA[finder_options.component_name].browser_args) + + super(WebViewCrxSmokeTests, cls).SetBrowserOptions(finder_options_copy) + cls._device = cls._browser_to_create._platform_backend.device + + @classmethod + def StartBrowser(cls): + """Start browser and wait for it's pid to appear in the processes list""" + super(WebViewCrxSmokeTests, cls).StartBrowser() + + # Wait until the browser is up and running + for _ in range(60): + logger.info('Waiting 1 second for the browser to start running') + time.sleep(1) + if cls.browser._browser_backend.processes: + break + + assert cls.browser._browser_backend.processes, 'Browser did not start' + logger.info('Browser is running') + + @classmethod + def SetUpProcess(cls): + """Prepares the test device""" + super(WebViewCrxSmokeTests, cls).SetUpProcess() + assert cls._finder_options.crx_file, '--crx-file is required' + assert cls._finder_options.component_name, '--component-name is required' + assert cls._finder_options.webview_package_name, ( + '--webview-package-name is required') + + cls._device_components_dir = ('/data/data/%s/app_webview/components' % + cls._finder_options.webview_package_name) + cls.SetBrowserOptions(cls._finder_options) + cls._MaybeClearOutComponentsDir() + component_id = _COMPONENT_NAME_TO_DATA.get( + cls._finder_options.component_name).component_id + with zipfile.ZipFile(cls._finder_options.crx_file) as crx_archive, \ + NamedTemporaryDirectory() as tmp_dir, \ + crx_archive.open('manifest.json') as manifest: + crx_device_dir = posixpath.join( + cls._device_components_dir, 'cps', + component_id, '1_%s' % json.loads(manifest.read())['version']) + + try: + # Create directory on the test device for the CRX files + logger.info('Creating directory %r on device' % crx_device_dir) + output = cls._device.RunShellCommand( + ['mkdir', '-p', crx_device_dir]) + logger.debug('Recieved the following output from adb: %s' % output) + except Exception as e: + logger.exception('Exception %r was raised' % str(e)) + raise + + # Move CRX files to the device directory + crx_archive.extractall(tmp_dir) + cls._MoveNewCrxToDevice(tmp_dir, crx_device_dir) + + # Start the browser after the device is in a clean state and the CRX + # files are loaded onto the device + cls.StartBrowser() + + @classmethod + def _MoveNewCrxToDevice(cls, src_dir, crx_device_dir): + """Pushes the CRX files onto the test device + + Args: + src_dir: Source directory containing CRX files + crx_device_dir: Destination directory for CRX files on the test device""" + + for f in os.listdir(src_dir): + src_path = os.path.join(src_dir, f) + dest_path = posixpath.join(crx_device_dir, f) + assert os.path.isfile(src_path), '%r is not a file' % src_path + logger.info('Pushing %r to %r' % (src_path, dest_path)) + cls._device.adb.Push(src_path, dest_path) + + @classmethod + def _MaybeClearOutComponentsDir(cls): + """Clears out CRX files on test device so that + the test starts with a clean state """ + try: + output = cls._device.RemovePath(cls._device_components_dir, + recursive=True, + force=True) + logger.debug('Recieved the following output from adb: %s' % output) + except Exception as e: + logger.exception('Exception %r was raised' % str(e)) + raise + + @classmethod + def AddCommandlineArgs(cls, parser): + """Adds test suite specific command line arguments""" + parser.add_option('--crx-file', action='store', help='Path to CRX file') + parser.add_option('--component-name', action='store', help='Component name', + choices=_COMPONENT_NAME_TO_DATA.keys()) + parser.add_option('--webview-package-name', action='store', + help='WebView package name') + + def Test_run_webview_smoke_test(self): + """Test waits for a javascript condition to be set on the WebView shell""" + browser_tab = self.browser.tabs[0] + browser_tab.action_runner.Navigate( + 'about:blank', script_to_evaluate_on_commit=_SET_CONDITION_HTML) + + # Wait 5 minutes for the javascript condition. If the condition is not + # set within 5 minutes then an exception will be raised which will cause + # the test to fail. + browser_tab.action_runner.WaitForJavaScriptCondition( + 'window.webview_smoke_test_harness.test_succeeded', timeout=300) + + +def load_tests(*_): + return serially_executed_browser_test_case.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/android_webview/test/components/run_webview_component_smoketest.py b/android_webview/test/components/run_webview_component_smoketest.py new file mode 100755 index 0000000..f4b8675f --- /dev/null +++ b/android_webview/test/components/run_webview_component_smoketest.py
@@ -0,0 +1,42 @@ +#!/usr/bin/env vpython + +# 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. + +""" Runs component smoketests for WebView """ + +import argparse +import os +import sys + +SRC_DIR = os.path.join(os.path.dirname(__file__), + os.pardir, + os.pardir, + os.pardir) +PERF_DIR = os.path.join(SRC_DIR, 'tools', 'perf') +PY_UTILS_DIR = os.path.join( + SRC_DIR, 'third_party', 'catapult', 'common', 'py_utils') + +if PERF_DIR not in sys.path: + sys.path.append(PERF_DIR) + +if PY_UTILS_DIR not in sys.path: + sys.path.append(PY_UTILS_DIR) + +from chrome_telemetry_build import chromium_config +from core import path_util + +path_util.AddTelemetryToPath() + +from telemetry.testing import browser_test_runner + +def main(args): + config = chromium_config.ChromiumConfig( + top_level_dir=os.path.dirname(__file__), + benchmark_dirs=[os.path.dirname(__file__)]) + return browser_test_runner.Run(config, args) + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:]))
diff --git a/android_webview/test/components/run_webview_component_smoketest.pydeps b/android_webview/test/components/run_webview_component_smoketest.pydeps new file mode 100644 index 0000000..82f68b7 --- /dev/null +++ b/android_webview/test/components/run_webview_component_smoketest.pydeps
@@ -0,0 +1,361 @@ +# Generated by running: +# build/print_python_deps.py --output android_webview/test/components/run_webview_component_smoketest.pydeps --gn-paths android_webview/test/components/run_webview_component_smoketest.py +//android_webview/test/components/run_webview_component_smoketest.py +//build/android/pylib/__init__.py +//build/android/pylib/constants/__init__.py +//build/android/pylib/constants/host_paths.py +//components/variations/service/generate_ui_string_overrider.py +//third_party/catapult/common/py_trace_event/py_trace_event/__init__.py +//third_party/catapult/common/py_trace_event/py_trace_event/trace_event.py +//third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/__init__.py +//third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators.py +//third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py +//third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/meta_class.py +//third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/multiprocessing_shim.py +//third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py +//third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer.py +//third_party/catapult/common/py_trace_event/py_trace_event/trace_time.py +//third_party/catapult/common/py_trace_event/third_party/protobuf/encoder.py +//third_party/catapult/common/py_trace_event/third_party/protobuf/wire_format.py +//third_party/catapult/common/py_utils/py_utils/__init__.py +//third_party/catapult/common/py_utils/py_utils/atexit_with_log.py +//third_party/catapult/common/py_utils/py_utils/binary_manager.py +//third_party/catapult/common/py_utils/py_utils/camel_case.py +//third_party/catapult/common/py_utils/py_utils/cloud_storage.py +//third_party/catapult/common/py_utils/py_utils/cloud_storage_global_lock.py +//third_party/catapult/common/py_utils/py_utils/constants/__init__.py +//third_party/catapult/common/py_utils/py_utils/constants/exit_codes.py +//third_party/catapult/common/py_utils/py_utils/dependency_util.py +//third_party/catapult/common/py_utils/py_utils/discover.py +//third_party/catapult/common/py_utils/py_utils/exc_util.py +//third_party/catapult/common/py_utils/py_utils/file_util.py +//third_party/catapult/common/py_utils/py_utils/lock.py +//third_party/catapult/common/py_utils/py_utils/logging_util.py +//third_party/catapult/common/py_utils/py_utils/modules_util.py +//third_party/catapult/common/py_utils/py_utils/retry_util.py +//third_party/catapult/common/py_utils/py_utils/tempfile_ext.py +//third_party/catapult/common/py_utils/py_utils/ts_proxy_server.py +//third_party/catapult/common/py_utils/py_utils/webpagereplay_go_server.py +//third_party/catapult/dependency_manager/dependency_manager/__init__.py +//third_party/catapult/dependency_manager/dependency_manager/archive_info.py +//third_party/catapult/dependency_manager/dependency_manager/base_config.py +//third_party/catapult/dependency_manager/dependency_manager/cloud_storage_info.py +//third_party/catapult/dependency_manager/dependency_manager/dependency_info.py +//third_party/catapult/dependency_manager/dependency_manager/dependency_manager_util.py +//third_party/catapult/dependency_manager/dependency_manager/exceptions.py +//third_party/catapult/dependency_manager/dependency_manager/local_path_info.py +//third_party/catapult/dependency_manager/dependency_manager/manager.py +//third_party/catapult/dependency_manager/dependency_manager/uploader.py +//third_party/catapult/devil/devil/__init__.py +//third_party/catapult/devil/devil/android/__init__.py +//third_party/catapult/devil/devil/android/apk_helper.py +//third_party/catapult/devil/devil/android/app_ui.py +//third_party/catapult/devil/devil/android/battery_utils.py +//third_party/catapult/devil/devil/android/constants/__init__.py +//third_party/catapult/devil/devil/android/constants/chrome.py +//third_party/catapult/devil/devil/android/constants/file_system.py +//third_party/catapult/devil/devil/android/cpu_temperature.py +//third_party/catapult/devil/devil/android/crash_handler.py +//third_party/catapult/devil/devil/android/decorators.py +//third_party/catapult/devil/devil/android/device_denylist.py +//third_party/catapult/devil/devil/android/device_errors.py +//third_party/catapult/devil/devil/android/device_signal.py +//third_party/catapult/devil/devil/android/device_temp_file.py +//third_party/catapult/devil/devil/android/device_utils.py +//third_party/catapult/devil/devil/android/flag_changer.py +//third_party/catapult/devil/devil/android/forwarder.py +//third_party/catapult/devil/devil/android/install_commands.py +//third_party/catapult/devil/devil/android/logcat_monitor.py +//third_party/catapult/devil/devil/android/md5sum.py +//third_party/catapult/devil/devil/android/ndk/__init__.py +//third_party/catapult/devil/devil/android/ndk/abis.py +//third_party/catapult/devil/devil/android/perf/__init__.py +//third_party/catapult/devil/devil/android/perf/cache_control.py +//third_party/catapult/devil/devil/android/perf/perf_control.py +//third_party/catapult/devil/devil/android/perf/surface_stats_collector.py +//third_party/catapult/devil/devil/android/perf/thermal_throttle.py +//third_party/catapult/devil/devil/android/sdk/__init__.py +//third_party/catapult/devil/devil/android/sdk/aapt.py +//third_party/catapult/devil/devil/android/sdk/adb_wrapper.py +//third_party/catapult/devil/devil/android/sdk/build_tools.py +//third_party/catapult/devil/devil/android/sdk/bundletool.py +//third_party/catapult/devil/devil/android/sdk/intent.py +//third_party/catapult/devil/devil/android/sdk/keyevent.py +//third_party/catapult/devil/devil/android/sdk/shared_prefs.py +//third_party/catapult/devil/devil/android/sdk/split_select.py +//third_party/catapult/devil/devil/android/sdk/version_codes.py +//third_party/catapult/devil/devil/android/settings.py +//third_party/catapult/devil/devil/android/tools/__init__.py +//third_party/catapult/devil/devil/android/tools/provision_devices.py +//third_party/catapult/devil/devil/android/tools/script_common.py +//third_party/catapult/devil/devil/android/tools/system_app.py +//third_party/catapult/devil/devil/android/tools/video_recorder.py +//third_party/catapult/devil/devil/android/valgrind_tools/__init__.py +//third_party/catapult/devil/devil/android/valgrind_tools/base_tool.py +//third_party/catapult/devil/devil/base_error.py +//third_party/catapult/devil/devil/constants/__init__.py +//third_party/catapult/devil/devil/constants/exit_codes.py +//third_party/catapult/devil/devil/devil_env.py +//third_party/catapult/devil/devil/utils/__init__.py +//third_party/catapult/devil/devil/utils/cmd_helper.py +//third_party/catapult/devil/devil/utils/geometry.py +//third_party/catapult/devil/devil/utils/host_utils.py +//third_party/catapult/devil/devil/utils/lazy/__init__.py +//third_party/catapult/devil/devil/utils/lazy/weak_constant.py +//third_party/catapult/devil/devil/utils/logging_common.py +//third_party/catapult/devil/devil/utils/lsusb.py +//third_party/catapult/devil/devil/utils/parallelizer.py +//third_party/catapult/devil/devil/utils/reraiser_thread.py +//third_party/catapult/devil/devil/utils/reset_usb.py +//third_party/catapult/devil/devil/utils/run_tests_helper.py +//third_party/catapult/devil/devil/utils/timeout_retry.py +//third_party/catapult/devil/devil/utils/watchdog_timer.py +//third_party/catapult/devil/devil/utils/zip_utils.py +//third_party/catapult/systrace/systrace/__init__.py +//third_party/catapult/systrace/systrace/trace_result.py +//third_party/catapult/systrace/systrace/tracing_agents/__init__.py +//third_party/catapult/systrace/systrace/tracing_agents/atrace_agent.py +//third_party/catapult/systrace/systrace/util.py +//third_party/catapult/telemetry/telemetry/__init__.py +//third_party/catapult/telemetry/telemetry/benchmark.py +//third_party/catapult/telemetry/telemetry/compat_mode_options.py +//third_party/catapult/telemetry/telemetry/core/__init__.py +//third_party/catapult/telemetry/telemetry/core/android_action_runner.py +//third_party/catapult/telemetry/telemetry/core/android_platform.py +//third_party/catapult/telemetry/telemetry/core/cros_interface.py +//third_party/catapult/telemetry/telemetry/core/debug_data.py +//third_party/catapult/telemetry/telemetry/core/exceptions.py +//third_party/catapult/telemetry/telemetry/core/fuchsia_interface.py +//third_party/catapult/telemetry/telemetry/core/local_server.py +//third_party/catapult/telemetry/telemetry/core/memory_cache_http_server.py +//third_party/catapult/telemetry/telemetry/core/network_controller.py +//third_party/catapult/telemetry/telemetry/core/os_version.py +//third_party/catapult/telemetry/telemetry/core/platform.py +//third_party/catapult/telemetry/telemetry/core/tracing_controller.py +//third_party/catapult/telemetry/telemetry/core/util.py +//third_party/catapult/telemetry/telemetry/decorators.py +//third_party/catapult/telemetry/telemetry/internal/__init__.py +//third_party/catapult/telemetry/telemetry/internal/actions/__init__.py +//third_party/catapult/telemetry/telemetry/internal/actions/action_runner.py +//third_party/catapult/telemetry/telemetry/internal/actions/drag.py +//third_party/catapult/telemetry/telemetry/internal/actions/javascript_click.py +//third_party/catapult/telemetry/telemetry/internal/actions/key_event.py +//third_party/catapult/telemetry/telemetry/internal/actions/load_media.py +//third_party/catapult/telemetry/telemetry/internal/actions/media_action.py +//third_party/catapult/telemetry/telemetry/internal/actions/mouse_click.py +//third_party/catapult/telemetry/telemetry/internal/actions/navigate.py +//third_party/catapult/telemetry/telemetry/internal/actions/page_action.py +//third_party/catapult/telemetry/telemetry/internal/actions/pinch.py +//third_party/catapult/telemetry/telemetry/internal/actions/play.py +//third_party/catapult/telemetry/telemetry/internal/actions/repaint_continuously.py +//third_party/catapult/telemetry/telemetry/internal/actions/repeatable_scroll.py +//third_party/catapult/telemetry/telemetry/internal/actions/scroll.py +//third_party/catapult/telemetry/telemetry/internal/actions/scroll_bounce.py +//third_party/catapult/telemetry/telemetry/internal/actions/scroll_to_element.py +//third_party/catapult/telemetry/telemetry/internal/actions/seek.py +//third_party/catapult/telemetry/telemetry/internal/actions/swipe.py +//third_party/catapult/telemetry/telemetry/internal/actions/tap.py +//third_party/catapult/telemetry/telemetry/internal/actions/utils.py +//third_party/catapult/telemetry/telemetry/internal/actions/wait.py +//third_party/catapult/telemetry/telemetry/internal/app/__init__.py +//third_party/catapult/telemetry/telemetry/internal/app/android_app.py +//third_party/catapult/telemetry/telemetry/internal/app/possible_app.py +//third_party/catapult/telemetry/telemetry/internal/backends/__init__.py +//third_party/catapult/telemetry/telemetry/internal/backends/android_app_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/android_browser_backend_settings.py +//third_party/catapult/telemetry/telemetry/internal/backends/app_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/browser_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/__init__.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/android_browser_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/android_browser_finder.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/android_minidump_symbolizer.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/chrome_browser_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/chrome_startup_args.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/cros_browser_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/cros_browser_finder.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/cros_browser_with_oobe.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/cros_minidump_symbolizer.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/crx_id.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/desktop_browser_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/desktop_browser_finder.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/desktop_minidump_symbolizer.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/extension_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/fuchsia_browser_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/fuchsia_browser_finder.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/gpu_compositing_checker.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/lacros_browser_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/minidump_finder.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/minidump_symbolizer.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/misc_web_contents_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/oobe.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome/tab_list_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/__init__.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/devtools_client_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/devtools_http.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_backend_list.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_console.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_log.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_memory.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_page.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_runtime.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_serviceworker.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_storage.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_websocket.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/memory_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/system_info_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/tracing_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/ui_devtools_client_backend.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/websocket.py +//third_party/catapult/telemetry/telemetry/internal/backends/chrome_inspector/window_manager_backend.py +//third_party/catapult/telemetry/telemetry/internal/browser/__init__.py +//third_party/catapult/telemetry/telemetry/internal/browser/browser.py +//third_party/catapult/telemetry/telemetry/internal/browser/browser_finder.py +//third_party/catapult/telemetry/telemetry/internal/browser/browser_finder_exceptions.py +//third_party/catapult/telemetry/telemetry/internal/browser/browser_info.py +//third_party/catapult/telemetry/telemetry/internal/browser/browser_interval_profiling_controller.py +//third_party/catapult/telemetry/telemetry/internal/browser/extension_dict.py +//third_party/catapult/telemetry/telemetry/internal/browser/extension_page.py +//third_party/catapult/telemetry/telemetry/internal/browser/extension_to_load.py +//third_party/catapult/telemetry/telemetry/internal/browser/possible_browser.py +//third_party/catapult/telemetry/telemetry/internal/browser/tab.py +//third_party/catapult/telemetry/telemetry/internal/browser/tab_list.py +//third_party/catapult/telemetry/telemetry/internal/browser/ui_devtools.py +//third_party/catapult/telemetry/telemetry/internal/browser/user_agent.py +//third_party/catapult/telemetry/telemetry/internal/browser/web_contents.py +//third_party/catapult/telemetry/telemetry/internal/forwarders/__init__.py +//third_party/catapult/telemetry/telemetry/internal/forwarders/android_forwarder.py +//third_party/catapult/telemetry/telemetry/internal/forwarders/do_nothing_forwarder.py +//third_party/catapult/telemetry/telemetry/internal/forwarders/forwarder_utils.py +//third_party/catapult/telemetry/telemetry/internal/forwarders/fuchsia_forwarder.py +//third_party/catapult/telemetry/telemetry/internal/image_processing/__init__.py +//third_party/catapult/telemetry/telemetry/internal/image_processing/image_util_numpy_impl.py +//third_party/catapult/telemetry/telemetry/internal/platform/__init__.py +//third_party/catapult/telemetry/telemetry/internal/platform/android_device.py +//third_party/catapult/telemetry/telemetry/internal/platform/android_platform_backend.py +//third_party/catapult/telemetry/telemetry/internal/platform/cros_device.py +//third_party/catapult/telemetry/telemetry/internal/platform/desktop_device.py +//third_party/catapult/telemetry/telemetry/internal/platform/device.py +//third_party/catapult/telemetry/telemetry/internal/platform/device_finder.py +//third_party/catapult/telemetry/telemetry/internal/platform/fuchsia_device.py +//third_party/catapult/telemetry/telemetry/internal/platform/fuchsia_platform_backend.py +//third_party/catapult/telemetry/telemetry/internal/platform/gpu_device.py +//third_party/catapult/telemetry/telemetry/internal/platform/gpu_info.py +//third_party/catapult/telemetry/telemetry/internal/platform/linux_based_platform_backend.py +//third_party/catapult/telemetry/telemetry/internal/platform/network_controller_backend.py +//third_party/catapult/telemetry/telemetry/internal/platform/platform_backend.py +//third_party/catapult/telemetry/telemetry/internal/platform/system_info.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_agent/__init__.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_agent/atrace_tracing_agent.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_agent/chrome_report_events_tracing_agent.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_agent/chrome_return_as_stream_tracing_agent.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_agent/chrome_tracing_agent.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_agent/chrome_tracing_devtools_manager.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_agent/cpu_tracing_agent.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_agent/display_tracing_agent.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_agent/perfetto_tracing_agent.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_agent/telemetry_tracing_agent.py +//third_party/catapult/telemetry/telemetry/internal/platform/tracing_controller_backend.py +//third_party/catapult/telemetry/telemetry/internal/results/__init__.py +//third_party/catapult/telemetry/telemetry/internal/results/artifact_compatibility_wrapper.py +//third_party/catapult/telemetry/telemetry/internal/results/artifact_logger.py +//third_party/catapult/telemetry/telemetry/internal/results/gtest_progress_reporter.py +//third_party/catapult/telemetry/telemetry/internal/results/page_test_results.py +//third_party/catapult/telemetry/telemetry/internal/results/results_options.py +//third_party/catapult/telemetry/telemetry/internal/results/story_run.py +//third_party/catapult/telemetry/telemetry/internal/story_runner.py +//third_party/catapult/telemetry/telemetry/internal/util/__init__.py +//third_party/catapult/telemetry/telemetry/internal/util/binary_manager.py +//third_party/catapult/telemetry/telemetry/internal/util/command_line.py +//third_party/catapult/telemetry/telemetry/internal/util/exception_formatter.py +//third_party/catapult/telemetry/telemetry/internal/util/external_modules.py +//third_party/catapult/telemetry/telemetry/internal/util/file_handle.py +//third_party/catapult/telemetry/telemetry/internal/util/format_for_logging.py +//third_party/catapult/telemetry/telemetry/internal/util/global_hooks.py +//third_party/catapult/telemetry/telemetry/internal/util/local_first_binary_manager.py +//third_party/catapult/telemetry/telemetry/internal/util/path.py +//third_party/catapult/telemetry/telemetry/internal/util/ts_proxy_server.py +//third_party/catapult/telemetry/telemetry/internal/util/webpagereplay_go_server.py +//third_party/catapult/telemetry/telemetry/page/__init__.py +//third_party/catapult/telemetry/telemetry/page/cache_temperature.py +//third_party/catapult/telemetry/telemetry/page/legacy_page_test.py +//third_party/catapult/telemetry/telemetry/page/shared_page_state.py +//third_party/catapult/telemetry/telemetry/page/traffic_setting.py +//third_party/catapult/telemetry/telemetry/project_config.py +//third_party/catapult/telemetry/telemetry/story/__init__.py +//third_party/catapult/telemetry/telemetry/story/expectations.py +//third_party/catapult/telemetry/telemetry/story/shared_state.py +//third_party/catapult/telemetry/telemetry/story/story.py +//third_party/catapult/telemetry/telemetry/story/story_filter.py +//third_party/catapult/telemetry/telemetry/story/story_set.py +//third_party/catapult/telemetry/telemetry/story/typ_expectations.py +//third_party/catapult/telemetry/telemetry/testing/__init__.py +//third_party/catapult/telemetry/telemetry/testing/browser_test_runner.py +//third_party/catapult/telemetry/telemetry/testing/test_utils.py +//third_party/catapult/telemetry/telemetry/timeline/__init__.py +//third_party/catapult/telemetry/telemetry/timeline/atrace_config.py +//third_party/catapult/telemetry/telemetry/timeline/chrome_trace_category_filter.py +//third_party/catapult/telemetry/telemetry/timeline/chrome_trace_config.py +//third_party/catapult/telemetry/telemetry/timeline/system_trace_config.py +//third_party/catapult/telemetry/telemetry/timeline/tracing_config.py +//third_party/catapult/telemetry/telemetry/util/__init__.py +//third_party/catapult/telemetry/telemetry/util/cmd_util.py +//third_party/catapult/telemetry/telemetry/util/color_histogram.py +//third_party/catapult/telemetry/telemetry/util/image_util.py +//third_party/catapult/telemetry/telemetry/util/js_template.py +//third_party/catapult/telemetry/telemetry/util/rgba_color.py +//third_party/catapult/telemetry/telemetry/util/screenshot.py +//third_party/catapult/telemetry/telemetry/util/statistics.py +//third_party/catapult/telemetry/telemetry/util/wpr_modes.py +//third_party/catapult/telemetry/telemetry/web_perf/__init__.py +//third_party/catapult/telemetry/telemetry/web_perf/story_test.py +//third_party/catapult/telemetry/telemetry/web_perf/timeline_based_measurement.py +//third_party/catapult/telemetry/telemetry/web_perf/timeline_interaction_record.py +//third_party/catapult/telemetry/telemetry/wpr/__init__.py +//third_party/catapult/telemetry/telemetry/wpr/archive_info.py +//third_party/catapult/telemetry/third_party/png/png.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/__init__.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_abnf.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_app.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_core.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_exceptions.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_handshake.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_http.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_logging.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_socket.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_ssl_compat.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_url.py +//third_party/catapult/telemetry/third_party/websocket-client/websocket/_utils.py +//third_party/catapult/third_party/typ/typ/__init__.py +//third_party/catapult/third_party/typ/typ/arg_parser.py +//third_party/catapult/third_party/typ/typ/artifacts.py +//third_party/catapult/third_party/typ/typ/expectations_parser.py +//third_party/catapult/third_party/typ/typ/fakes/__init__.py +//third_party/catapult/third_party/typ/typ/fakes/host_fake.py +//third_party/catapult/third_party/typ/typ/host.py +//third_party/catapult/third_party/typ/typ/json_results.py +//third_party/catapult/third_party/typ/typ/pool.py +//third_party/catapult/third_party/typ/typ/printer.py +//third_party/catapult/third_party/typ/typ/python_2_3_compat.py +//third_party/catapult/third_party/typ/typ/result_sink.py +//third_party/catapult/third_party/typ/typ/runner.py +//third_party/catapult/third_party/typ/typ/stats.py +//third_party/catapult/third_party/typ/typ/test_case.py +//third_party/catapult/third_party/typ/typ/version.py +//third_party/catapult/tracing/tracing/__init__.py +//third_party/catapult/tracing/tracing/trace_data/__init__.py +//third_party/catapult/tracing/tracing/trace_data/trace_data.py +//third_party/catapult/tracing/tracing/value/__init__.py +//third_party/catapult/tracing/tracing/value/diagnostics/__init__.py +//third_party/catapult/tracing/tracing/value/diagnostics/reserved_infos.py +//third_party/catapult/tracing/tracing_project.py +//tools/json_comment_eater/json_comment_eater.py +//tools/json_to_struct/element_generator.py +//tools/json_to_struct/json_to_struct.py +//tools/json_to_struct/struct_generator.py +//tools/perf/chrome_telemetry_build/__init__.py +//tools/perf/chrome_telemetry_build/chromium_config.py +//tools/perf/core/__init__.py +//tools/perf/core/path_util.py +//tools/variations/fieldtrial_to_struct.py +//tools/variations/fieldtrial_util.py
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 06b5c94..5a70048 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -84,6 +84,10 @@ "accessibility/chromevox/touch_exploration_manager.h", "accessibility/default_accessibility_delegate.cc", "accessibility/default_accessibility_delegate.h", + "accessibility/dictation_nudge.cc", + "accessibility/dictation_nudge.h", + "accessibility/dictation_nudge_controller.cc", + "accessibility/dictation_nudge_controller.h", "accessibility/magnifier/docked_magnifier_controller.cc", "accessibility/magnifier/docked_magnifier_controller.h", "accessibility/magnifier/docked_magnifier_controller.h", @@ -2061,6 +2065,7 @@ "accessibility/chromevox/touch_accessibility_enabler_unittest.cc", "accessibility/chromevox/touch_exploration_controller_unittest.cc", "accessibility/chromevox/touch_exploration_manager_unittest.cc", + "accessibility/dictation_nudge_controller_unittest.cc", "accessibility/magnifier/docked_magnifier_controller_unittest.cc", "accessibility/magnifier/fullscreen_magnifier_controller_unittest.cc", "accessibility/magnifier/magnifier_test_utils.cc",
diff --git a/ash/accessibility/accessibility_controller_impl.cc b/ash/accessibility/accessibility_controller_impl.cc index d9babfb..a3e0e70 100644 --- a/ash/accessibility/accessibility_controller_impl.cc +++ b/ash/accessibility/accessibility_controller_impl.cc
@@ -13,6 +13,7 @@ #include "ash/accelerators/accelerator_controller_impl.h" #include "ash/accessibility/accessibility_observer.h" #include "ash/accessibility/autoclick/autoclick_controller.h" +#include "ash/accessibility/dictation_nudge_controller.h" #include "ash/accessibility/sticky_keys/sticky_keys_controller.h" #include "ash/accessibility/switch_access/point_scan_controller.h" #include "ash/accessibility/ui/accessibility_highlight_controller.h" @@ -748,6 +749,9 @@ Shell::Get()->tablet_mode_controller()->RemoveObserver(this); Shell::Get()->session_controller()->RemoveObserver(this); + // Clean up any child windows and widgets that might be animating out. + dictation_nudge_controller_.reset(); + for (auto& observer : observers_) observer.OnAccessibilityControllerShutdown(); } @@ -1254,6 +1258,14 @@ ToggleDictation(); } +void AccessibilityControllerImpl::ShowDictationLanguageUpgradedNudge( + const std::string& dictation_locale, + const std::string& application_locale) { + dictation_nudge_controller_ = std::make_unique<DictationNudgeController>( + dictation_locale, application_locale); + dictation_nudge_controller_->ShowNudge(); +} + void AccessibilityControllerImpl::SilenceSpokenFeedback() { if (client_) client_->SilenceSpokenFeedback(); @@ -2015,6 +2027,8 @@ UpdateAccessibilityHighlightingFromPrefs(); break; case FeatureType::kDictation: + if (!enabled) + dictation_nudge_controller_.reset(); break; case FeatureType::kFloatingMenu: if (enabled && always_show_floating_menu_when_enabled_)
diff --git a/ash/accessibility/accessibility_controller_impl.h b/ash/accessibility/accessibility_controller_impl.h index 6678a4f2..376daa9 100644 --- a/ash/accessibility/accessibility_controller_impl.h +++ b/ash/accessibility/accessibility_controller_impl.h
@@ -44,6 +44,7 @@ class AccessibilityEventRewriter; class AccessibilityHighlightController; class AccessibilityObserver; +class DictationNudgeController; class FloatingAccessibilityController; class PointScanController; class ScopedBacklightsForcedOff; @@ -382,6 +383,9 @@ int point_scan_speed_dips_per_second) override; void SetDictationActive(bool is_active) override; void ToggleDictationFromSource(DictationToggleSource source) override; + void ShowDictationLanguageUpgradedNudge( + const std::string& dictation_locale, + const std::string& application_locale) override; void HandleAutoclickScrollableBoundsFound( gfx::Rect& bounds_in_screen) override; std::u16string GetBatteryDescription() const override; @@ -422,6 +426,9 @@ bool enable_chromevox_volume_slide_gesture() { return enable_chromevox_volume_slide_gesture_; } + DictationNudgeController* GetDictationNudgeControllerForTest() { + return dictation_nudge_controller_.get(); + } private: // Populate |features_| with the feature of the correct type. @@ -514,6 +521,11 @@ // Used to force the backlights off to darken the screen. std::unique_ptr<ScopedBacklightsForcedOff> scoped_backlights_forced_off_; + // Used to show the offline dictation language upgrade nudge. This is created + // with ShowDictationLanguageUpgradedNudge() and reset at Shutdown() or when + // the Dictation feature is disabled. + std::unique_ptr<DictationNudgeController> dictation_nudge_controller_; + // True if ChromeVox should enable its volume slide gesture. bool enable_chromevox_volume_slide_gesture_ = false;
diff --git a/ash/accessibility/dictation_nudge.cc b/ash/accessibility/dictation_nudge.cc new file mode 100644 index 0000000..28a304d --- /dev/null +++ b/ash/accessibility/dictation_nudge.cc
@@ -0,0 +1,71 @@ +// 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 "ash/accessibility/dictation_nudge.h" + +#include "ash/accessibility/dictation_nudge_controller.h" +#include "ash/resources/vector_icons/vector_icons.h" +#include "ash/strings/grit/ash_strings.h" +#include "ash/style/ash_color_provider.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/compositor/layer.h" +#include "ui/gfx/text_constants.h" +#include "ui/views/controls/label.h" +#include "ui/wm/core/coordinate_conversion.h" + +namespace ash { + +namespace { + +// The size of the clipboard icon. +constexpr int kIconSize = 20; + +// The minimum width of the label. +constexpr int kMinLabelWidth = 200; + +// The spacing between the icon and label in the nudge view. +constexpr int kIconLabelSpacing = 16; + +// The padding which separates the nudge's border with its inner contents. +constexpr int kNudgePadding = 16; + +constexpr char kDictationNudgeName[] = "DictationOfflineContextualNudge"; + +} // namespace + +DictationNudge::DictationNudge(DictationNudgeController* controller) + : SystemNudge(kDictationNudgeName), controller_(controller) {} + +DictationNudge::~DictationNudge() = default; + +std::unique_ptr<views::View> DictationNudge::CreateLabelView() const { + std::unique_ptr<views::Label> label = std::make_unique<views::Label>(); + label->SetPaintToLayer(); + label->layer()->SetFillsBoundsOpaquely(false); + label->SetPosition( + gfx::Point(kNudgePadding + kIconSize + kIconLabelSpacing, kNudgePadding)); + + label->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT); + label->SetEnabledColor(AshColorProvider::Get()->GetContentLayerColor( + AshColorProvider::ContentLayerType::kTextColorPrimary)); + label->SetAutoColorReadabilityEnabled(false); + + const std::u16string language_name = l10n_util::GetDisplayNameForLocale( + controller_->dictation_locale(), controller_->application_locale(), + /*is_for_ui=*/true); + + const std::u16string label_text = l10n_util::GetStringFUTF16( + IDS_ASH_DICTATION_LANGUAGE_SUPPORTED_OFFLINE_NUDGE, language_name); + label->SetText(label_text); + label->SetMultiLine(true); + label->SizeToFit(kMinLabelWidth); + + return std::move(label); +} + +const gfx::VectorIcon& DictationNudge::GetIcon() const { + return kDictationOffNewuiIcon; +} + +} // namespace ash
diff --git a/ash/accessibility/dictation_nudge.h b/ash/accessibility/dictation_nudge.h new file mode 100644 index 0000000..2ba5f69 --- /dev/null +++ b/ash/accessibility/dictation_nudge.h
@@ -0,0 +1,41 @@ +// 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 ASH_ACCESSIBILITY_DICTATION_NUDGE_H_ +#define ASH_ACCESSIBILITY_DICTATION_NUDGE_H_ + +#include <string> + +#include "ash/ash_export.h" +#include "ash/system/tray/system_nudge.h" + +namespace ash { + +class DictationNudgeController; +class DictationNudgeControllerTest; + +// Implements a contextual nudge for Dictation informing the user +// that their Dictation language now works offline. +class ASH_EXPORT DictationNudge : public SystemNudge { + public: + DictationNudge(DictationNudgeController* controller); + DictationNudge(const DictationNudge&) = delete; + DictationNudge& operator=(const DictationNudge&) = delete; + ~DictationNudge() override; + + protected: + // SystemNudge: + std::unique_ptr<views::View> CreateLabelView() const override; + const gfx::VectorIcon& GetIcon() const override; + + private: + friend class DictationNudgeControllerTest; + + // Unowned. The DictationNudgeController owns |this|. + const DictationNudgeController* const controller_; +}; + +} // namespace ash + +#endif // ASH_ACCESSIBILITY_DICTATION_NUDGE_H_
diff --git a/ash/accessibility/dictation_nudge_controller.cc b/ash/accessibility/dictation_nudge_controller.cc new file mode 100644 index 0000000..cbb6380 --- /dev/null +++ b/ash/accessibility/dictation_nudge_controller.cc
@@ -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. + +#include "ash/accessibility/dictation_nudge_controller.h" + +#include "ash/accessibility/dictation_nudge.h" + +namespace ash { + +DictationNudgeController::DictationNudgeController( + const std::string& dictation_locale, + const std::string& application_locale) + : dictation_locale_(dictation_locale), + application_locale_(application_locale) {} + +DictationNudgeController::~DictationNudgeController() = default; + +std::unique_ptr<SystemNudge> DictationNudgeController::CreateSystemNudge() { + return std::make_unique<DictationNudge>(this); +} + +} // namespace ash \ No newline at end of file
diff --git a/ash/accessibility/dictation_nudge_controller.h b/ash/accessibility/dictation_nudge_controller.h new file mode 100644 index 0000000..b5d48491 --- /dev/null +++ b/ash/accessibility/dictation_nudge_controller.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 ASH_ACCESSIBILITY_DICTATION_NUDGE_CONTROLLER_H_ +#define ASH_ACCESSIBILITY_DICTATION_NUDGE_CONTROLLER_H_ + +#include <string> + +#include "ash/ash_export.h" +#include "ash/system/tray/system_nudge_controller.h" + +namespace ash { + +// Class that manages showing a nudge explaining that Dictation language has +// been upgraded in the background to work offline. +class ASH_EXPORT DictationNudgeController : public SystemNudgeController { + public: + // Creates the Dictation nudge for the user's preferred recognition locale, + // |dictation_locale|. Uses the |application_locale| to get the human-readable + // name for the |dictation_locale|. + DictationNudgeController(const std::string& dictation_locale, + const std::string& application_locale); + DictationNudgeController(const DictationNudgeController&) = delete; + DictationNudgeController& operator=(const DictationNudgeController&) = delete; + ~DictationNudgeController() override; + + SystemNudge* GetDictationNudgeForTesting() const { return nudge_.get(); } + + std::string dictation_locale() const { return dictation_locale_; } + std::string application_locale() const { return application_locale_; } + + protected: + // SystemNudgeController: + std::unique_ptr<SystemNudge> CreateSystemNudge() override; + + private: + // The locale in which the user's speech recognition is processed for + // Dictation. + const std::string dictation_locale_; + + // The application locale for Chrome OS. + const std::string application_locale_; +}; + +} // namespace ash + +#endif // ASH_ACCESSIBILITY_DICTATION_NUDGE_CONTROLLER_H_
diff --git a/ash/accessibility/dictation_nudge_controller_unittest.cc b/ash/accessibility/dictation_nudge_controller_unittest.cc new file mode 100644 index 0000000..bb8daeb0 --- /dev/null +++ b/ash/accessibility/dictation_nudge_controller_unittest.cc
@@ -0,0 +1,163 @@ +// 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 "ash/accessibility/accessibility_controller_impl.h" +#include "ash/accessibility/dictation_nudge.h" +#include "ash/accessibility/dictation_nudge_controller.h" +#include "ash/shell.h" +#include "ash/system/tray/system_nudge.h" +#include "ash/test/ash_test_base.h" +#include "base/run_loop.h" +#include "base/strings/utf_string_conversions.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "ui/compositor/layer.h" +#include "ui/compositor/scoped_animation_duration_scale_mode.h" +#include "ui/views/controls/label.h" +#include "ui/views/widget/widget.h" +#include "ui/views/widget/widget_observer.h" + +using ::testing::HasSubstr; + +namespace ash { +namespace { + +class NudgeWigetObserver : public views::WidgetObserver { + public: + NudgeWigetObserver(views::Widget* widget) : widget_(widget) { + if (!widget_) + return; + + widget_->AddObserver(this); + } + + ~NudgeWigetObserver() override { CleanupWidget(); } + + void WaitForClose() { + if (!widget_) + return; + run_loop_ = std::make_unique<base::RunLoop>(); + run_loop_->Run(); + } + + // views::WidgetObserver: + void OnWidgetClosing(views::Widget* widget) override { + CleanupWidget(); + if (run_loop_) + run_loop_->Quit(); + } + + void CleanupWidget() { + if (!widget_) + return; + widget_->RemoveObserver(this); + widget_ = nullptr; + } + + private: + views::Widget* widget_; + std::unique_ptr<base::RunLoop> run_loop_; +}; +} // namespace + +// Tests for showing the Dictation Nudge from AccessibilityControllerImpl. +class DictationNudgeControllerTest : public AshTestBase { + public: + DictationNudgeControllerTest() = default; + DictationNudgeControllerTest(const DictationNudgeControllerTest&) = delete; + DictationNudgeControllerTest& operator=(const DictationNudgeControllerTest&) = + delete; + ~DictationNudgeControllerTest() override = default; + + // AshTestBase: + void SetUp() override { + AshTestBase::SetUp(); + Shell::Get()->accessibility_controller()->dictation().SetEnabled(true); + } + + void ShowDictationLanguageUpgradedNudge(std::string dictation_locale, + std::string application_locale) { + Shell::Get() + ->accessibility_controller() + ->ShowDictationLanguageUpgradedNudge(dictation_locale, + application_locale); + } + + DictationNudgeController* GetDictationNudgeController() { + return Shell::Get() + ->accessibility_controller() + ->GetDictationNudgeControllerForTest(); + } + + std::unique_ptr<views::View> GetDictationNudgeLabel(DictationNudge* nudge) { + return nudge->CreateLabelView(); + } + + void WaitForWidgetClose(DictationNudgeController* controller, + SystemNudge* nudge) { + views::Widget* nudge_widget = nudge->widget(); + ASSERT_TRUE(nudge_widget); + EXPECT_FALSE(nudge_widget->IsClosed()); + + // Slow down the duration of the nudge. + ui::ScopedAnimationDurationScaleMode test_duration_mode( + ui::ScopedAnimationDurationScaleMode::SLOW_DURATION); + + // Pretend the hide nudge timer has elapsed. + NudgeWigetObserver widget_close_observer(nudge_widget); + controller->FireHideNudgeTimerForTesting(); + + EXPECT_TRUE(nudge_widget->GetLayer()->GetAnimator()->is_animating()); + + widget_close_observer.WaitForClose(); + } +}; + +TEST_F(DictationNudgeControllerTest, ShowsAndHidesNudge) { + EXPECT_FALSE(GetDictationNudgeController()); + + ShowDictationLanguageUpgradedNudge("en-US", "en-US"); + + DictationNudgeController* controller = GetDictationNudgeController(); + ASSERT_TRUE(controller); + + SystemNudge* nudge = controller->GetDictationNudgeForTesting(); + ASSERT_TRUE(nudge); + + WaitForWidgetClose(controller, nudge); +} + +TEST_F(DictationNudgeControllerTest, SetsLabelBasedOnApplicationLocale) { + struct { + std::string locale; + std::string application_locale; + std::string label; + } kTestCases[] = { + {"en-US", "en-US", "English"}, + {"es-ES", "en-US", "Spanish"}, + {"en-US", "es-ES", "inglés"}, + {"es-ES", "es-ES", "español"}, + }; + for (const auto& testcase : kTestCases) { + ShowDictationLanguageUpgradedNudge(testcase.locale, + testcase.application_locale); + + DictationNudgeController* controller = GetDictationNudgeController(); + ASSERT_TRUE(controller); + + DictationNudge* nudge = + static_cast<DictationNudge*>(controller->GetDictationNudgeForTesting()); + ASSERT_TRUE(nudge); + + std::unique_ptr<views::View> label = GetDictationNudgeLabel(nudge); + std::string text = + base::UTF16ToUTF8(static_cast<views::Label*>(label.get())->GetText()); + EXPECT_THAT(text, HasSubstr(testcase.label)); + + WaitForWidgetClose(controller, nudge); + } +} + +} // namespace ash \ No newline at end of file
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd index 6df6fc6..3120c995 100644 --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd
@@ -762,6 +762,9 @@ <message name="IDS_ASH_DICTATION_CONFIRMATION_BODY" desc="The message shown the first time the user enables Dictation, explaining that the audio data will be sent to Google for transcription"> Dictation sends your voice to Google to allow voice typing in any text field. </message> + <message name="IDS_ASH_DICTATION_LANGUAGE_SUPPORTED_OFFLINE_NUDGE" desc="The message shown for existing Dictation users when their Dictation language has been upgraded in the background to work offline."> + <ph name="language">$1<ex>English</ex></ph> speech is now processed locally and works offline. You can change your Dictation language in Settings > Accessibility. + </message> <message name="IDS_ASH_SWITCH_ACCESS_DISABLE_CONFIRMATION_TEXT" desc="The text for the modal dialog shown when the user disables Switch Access, to confirm they meant to disable the feature."> Are you sure you want to turn off Switch Access? </message>
diff --git a/ash/ash_strings_grd/IDS_ASH_DICTATION_LANGUAGE_SUPPORTED_OFFLINE_NUDGE.png.sha1 b/ash/ash_strings_grd/IDS_ASH_DICTATION_LANGUAGE_SUPPORTED_OFFLINE_NUDGE.png.sha1 new file mode 100644 index 0000000..73f2ec3 --- /dev/null +++ b/ash/ash_strings_grd/IDS_ASH_DICTATION_LANGUAGE_SUPPORTED_OFFLINE_NUDGE.png.sha1
@@ -0,0 +1 @@ +81c8d75227cff8512f93d227e0f27e5546d36709 \ No newline at end of file
diff --git a/ash/public/cpp/accessibility_controller.h b/ash/public/cpp/accessibility_controller.h index 015e4ab1..574f1382 100644 --- a/ash/public/cpp/accessibility_controller.h +++ b/ash/public/cpp/accessibility_controller.h
@@ -111,6 +111,12 @@ // Starts or stops dictation. Records metrics for toggling via SwitchAccess. virtual void ToggleDictationFromSource(DictationToggleSource source) = 0; + // Shows a nudge explaining that a user's dictation language was upgraded to + // work offline. + virtual void ShowDictationLanguageUpgradedNudge( + const std::string& dictation_locale, + const std::string& application_locale) = 0; + // Called when the Automatic Clicks extension finds scrollable bounds. virtual void HandleAutoclickScrollableBoundsFound( gfx::Rect& bounds_in_screen) = 0;
diff --git a/ash/public/cpp/assistant/assistant_image_downloader.cc b/ash/public/cpp/assistant/assistant_image_downloader.cc deleted file mode 100644 index 628c5c9..0000000 --- a/ash/public/cpp/assistant/assistant_image_downloader.cc +++ /dev/null
@@ -1,28 +0,0 @@ -// Copyright 2019 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 "ash/public/cpp/assistant/assistant_image_downloader.h" - -#include "base/check_op.h" - -namespace ash { -namespace { -AssistantImageDownloader* g_assistant_image_downloader = nullptr; -} - -// static -AssistantImageDownloader* AssistantImageDownloader::GetInstance() { - return g_assistant_image_downloader; -} - -AssistantImageDownloader::AssistantImageDownloader() { - DCHECK(!g_assistant_image_downloader); - g_assistant_image_downloader = this; -} -AssistantImageDownloader::~AssistantImageDownloader() { - DCHECK_EQ(g_assistant_image_downloader, this); - g_assistant_image_downloader = nullptr; -} - -} // namespace ash
diff --git a/ash/webui/shimless_rma/resources/icons.html b/ash/webui/shimless_rma/resources/icons.html index 7d5fe42..c76946d 100644 --- a/ash/webui/shimless_rma/resources/icons.html +++ b/ash/webui/shimless_rma/resources/icons.html
@@ -4,6 +4,9 @@ <g id="wifi" width="20" height="20" viewBox="0 0 20 20"> <path fill-rule="evenodd" d="M7.99999976,4.4408921e-15 C11.7328,4.4408921e-15 14.4955,1.61135 15.6876,2.44135 C16.0317,2.68099 16.1038,3.16533 15.8425,3.49646 L15.8425,3.49646 L8.5554,12.7289 C8.2698,13.0905 7.72802,13.0905 7.44247,12.7281 L7.44247,12.7281 L0.15749,3.49646 C-0.10379,3.16533 -0.03169,2.68099 0.31239,2.44135 C1.50455,1.61135 4.26792,4.4408921e-15 7.99999976,4.4408921e-15 Z M7.9986,5 C9.23601,5 10.350948,5.2101302 11.3111193,5.50860386 L11.6254,5.6112 L11.6254,5.6112 C12.314,4.73885 13.3886,3.37739 13.3886,3.37739 C12.1425,2.71268 10.2788,2 8,2 C5.72159,2 3.85753,2.71277 2.61134,3.37751 C2.61134,3.37751 3.36107,4.32758 4.3736,5.61069 C5.40153,5.25916 6.62474,5 7.9986,5 Z" transform="translate(2 4)"/> </g> + <g id="info"> + <path fill-rule="evenodd" clip-rule="evenodd" d="M9 14H11V10H9V14ZM10 2C5.584 2 2 5.584 2 10C2 14.416 5.584 18 10 18C14.416 18 18 14.416 18 10C18 5.584 14.416 2 10 2ZM10 16C6.6925 16 4 13.3075 4 10C4 6.6925 6.6925 4 10 4C13.3075 4 16 6.6925 16 10C16 13.3075 13.3075 16 10 16ZM9 8H11V6H9V8Z" /> + </g> </defs> </svg> </iron-iconset-svg>
diff --git a/ash/webui/shimless_rma/resources/repair_component_chip.html b/ash/webui/shimless_rma/resources/repair_component_chip.html index 70c603e..ca553c8 100644 --- a/ash/webui/shimless_rma/resources/repair_component_chip.html +++ b/ash/webui/shimless_rma/resources/repair_component_chip.html
@@ -8,29 +8,43 @@ background-color: lightskyblue; } + #condtainerDiv { + width: 180px; + height: 40px; + } + #containerButton { - width: 180px; + width: 180px; height: 40px; border-radius: 10px; box-shadow: 0px 2px 2px 2px #bbb; } - .checkedBox { - background-color: lightblue; - position: absolute; - top: 5px; - right: 5px; + .icon-top-right { + position: relative; + top: -5px; + right: 20px; width: 15px; - height: 15px; + height: 15px; } - </style> -<div> +<div id="containerDiv"> <cr-button disabled$="[[disabled]]" id="containerButton" on-click="onComponentButtonClicked_"> <span id="componentName">[[componentName]]</span> - <!-- TODO(joonbug): replace with iron-icon --> - <span hidden$="[[!checked]]" class="checkedBox"></span> </cr-button> + + <!-- TODO(joonbug): Replace icon with checked icon --> + <iron-icon id="checkedIcon" icon="shimless-icon:wifi" + hidden$="[[!checked]]" class="icon-top-right"> + </iron-icon> + <iron-icon id="infoIcon" icon="shimless-icon:info" + hidden$="[[!disabled]]" class="icon-top-right"> + </iron-icon> + + <!-- TODO(joonbug): i18n message --> + <paper-tooltip for="infoIcon" aria-hidden="true" id="additionalMessage"> + This component couldn't be detected. Check that it's installed correctly. + </paper-tooltip> </div> \ No newline at end of file
diff --git a/ash/webui/shimless_rma/resources/repair_component_chip.js b/ash/webui/shimless_rma/resources/repair_component_chip.js index 5de86a6f..fba76766 100644 --- a/ash/webui/shimless_rma/resources/repair_component_chip.js +++ b/ash/webui/shimless_rma/resources/repair_component_chip.js
@@ -2,8 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'chrome://resources/cr_elements/cr_button/cr_button.m.js'; import './shimless_rma_shared_css.js'; +import './icons.js'; + +import 'chrome://resources/cr_elements/cr_button/cr_button.m.js'; +import 'chrome://resources/cr_elements/icons.m.js'; +import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; +import 'chrome://resources/polymer/v3_0/paper-tooltip/paper-tooltip.js'; import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
diff --git a/base/android/java/src/org/chromium/base/compat/ApiHelperForS.java b/base/android/java/src/org/chromium/base/compat/ApiHelperForS.java index 13a01d6..11cbbe05 100644 --- a/base/android/java/src/org/chromium/base/compat/ApiHelperForS.java +++ b/base/android/java/src/org/chromium/base/compat/ApiHelperForS.java
@@ -4,6 +4,7 @@ package org.chromium.base.compat; +import android.Manifest; import android.annotation.TargetApi; import android.app.PictureInPictureParams; import android.content.ClipData; @@ -54,10 +55,8 @@ } public static boolean hasBluetoothConnectPermission() { - // TODO(b/183501112): Replace the permission string with the actual Manfifest constant once - // Chrome starts compiling against the S SDK. return ApiCompatibilityUtils.checkPermission(ContextUtils.getApplicationContext(), - "android.permission.BLUETOOTH_CONNECT", Process.myPid(), Process.myUid()) + Manifest.permission.BLUETOOTH_CONNECT, Process.myPid(), Process.myUid()) == PackageManager.PERMISSION_GRANTED; }
diff --git a/base/values.cc b/base/values.cc index a01cdac7..3a64525 100644 --- a/base/values.cc +++ b/base/values.cc
@@ -1367,20 +1367,6 @@ key, const_cast<const ListValue**>(out_value)); } -bool DictionaryValue::RemoveWithoutPathExpansion( - StringPiece key, - std::unique_ptr<Value>* out_value) { - DCHECK(IsStringUTF8AllowingNoncharacters(key)); - auto entry_iterator = dict().find(key); - if (entry_iterator == dict().end()) - return false; - - if (out_value) - *out_value = std::move(entry_iterator->second); - dict().erase(entry_iterator); - return true; -} - std::unique_ptr<DictionaryValue> DictionaryValue::DeepCopyWithoutEmptyChildren() const { std::unique_ptr<DictionaryValue> copy =
diff --git a/base/values.h b/base/values.h index 2bd7aa7..89108a7b 100644 --- a/base/values.h +++ b/base/values.h
@@ -749,13 +749,6 @@ // DEPRECATED, use `Value::FindListKey(key)` instead. bool GetListWithoutPathExpansion(StringPiece key, ListValue** out_value); - // Like Remove(), but without special treatment of '.'. This allows e.g. URLs - // to be used as paths. - // DEPRECATED, use `Value::RemoveKey(key)` or `Value::ExtractKey(key)` - // instead. - bool RemoveWithoutPathExpansion(StringPiece key, - std::unique_ptr<Value>* out_value); - // Makes a copy of `this` but doesn't include empty dictionaries and lists in // the copy. This never returns NULL, even if `this` itself is empty. std::unique_ptr<DictionaryValue> DeepCopyWithoutEmptyChildren() const;
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index e6101b0..047439ef 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni
@@ -3873,9 +3873,11 @@ # resource dependencies of the apk. # shared_library: shared_library target that contains the unit tests. # apk_name: The name of the produced apk. If unspecified, it uses the name - # of the shared_library target suffixed with "_apk" + # of the shared_library target suffixed with "_apk". # use_default_launcher: Whether the default activity (NativeUnitTestActivity) # should be used for launching tests. + # allow_cleartext_traffic: (Optional) Whether to allow cleartext network + # requests during the test. # use_native_activity: Test implements ANativeActivity_onCreate(). # # Example @@ -3895,6 +3897,8 @@ assert(_use_native_activity != "" && _android_manifest != "") if (!defined(invoker.android_manifest)) { + _allow_cleartext_traffic = defined(invoker.allow_cleartext_traffic) && + invoker.allow_cleartext_traffic jinja_template("${target_name}_manifest") { _native_library_name = get_label_info(invoker.shared_library, "name") if (defined(invoker.android_manifest_template)) { @@ -3908,6 +3912,7 @@ "is_component_build=${is_component_build}", "native_library_name=${_native_library_name}", "use_native_activity=${_use_native_activity}", + "allow_cleartext_traffic=${_allow_cleartext_traffic}", ] } }
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 67a395a..94e1dc8 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn
@@ -1927,37 +1927,15 @@ # Note that this can be applied regardless of platform and architecture to # clean up the call sites. This will only apply the flag when necessary. # -# This config is just an alias to no_shorten_64_warnings and will -# suppress a superset of warning 4267 and any 64-bit -> 32-bit implicit -# conversions. Having both for a time means not having to go through and -# update all references to no_size_t_to_int_warning throughout the codebase -# atomically. -# -# Any new warning suppressions should use the no_shorten_64_warnings -# config below and not this. -# -# TODO(jschuh): crbug.com/167187 fix this and delete this config. -config("no_size_t_to_int_warning") { - configs = [ ":no_shorten_64_warnings" ] -} - -# As part of re-enabling -Wconversion (see issue 588506) some code -# will continue to generate warnings. -# The first warning to be enabled will be -Wshorten-64-to-32. -# -# Code that currently generates warnings for this can include this -# config to disable them. +# TODO(crbug.com/879657): Fix all instances and delete this. config("no_shorten_64_warnings") { if (current_cpu == "x64" || current_cpu == "arm64") { if (is_clang) { cflags = [ "-Wno-shorten-64-to-32" ] - } else { - if (is_win) { - # MSVC does not have an explicit warning equivalent to - # -Wshorten-64-to-32 but 4267 warns for size_t -> int - # on 64-bit builds, so is the closest. - cflags = [ "/wd4267" ] - } + } else if (is_win) { + # MSVC does not have an explicit warning equivalent to -Wshorten-64-to-32 + # but 4267 warns for size_t -> int on 64-bit builds, so is the closest. + cflags = [ "/wd4267" ] } } }
diff --git a/build/config/dcheck_always_on.gni b/build/config/dcheck_always_on.gni index 76635fd..a868076 100644 --- a/build/config/dcheck_always_on.gni +++ b/build/config/dcheck_always_on.gni
@@ -30,7 +30,7 @@ # down to: # (build_with_chromium && !is_official_builds) || dcheck_is_configurable dcheck_always_on = (build_with_chromium && !is_official_build && - !is_fuchsia && !is_chromeos) || dcheck_is_configurable + !is_fuchsia) || dcheck_is_configurable } declare_args() {
diff --git a/build/config/fuchsia/generate_runner_scripts.gni b/build/config/fuchsia/generate_runner_scripts.gni index fc81931..f6180755 100644 --- a/build/config/fuchsia/generate_runner_scripts.gni +++ b/build/config/fuchsia/generate_runner_scripts.gni
@@ -138,10 +138,15 @@ } data += [ - "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/ffx", + "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/device-finder", "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/fvm", "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/merkleroot", "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/pm", + + # TODO(crbug.com/1162314) Remove "symbolize" when transition to + # "symbolizer" is complete. + "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/symbolize", + "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/symbolizer", "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/zbi", ]
diff --git a/build/fuchsia/device_target.py b/build/fuchsia/device_target.py index 06bc874..8d134e5 100644 --- a/build/fuchsia/device_target.py +++ b/build/fuchsia/device_target.py
@@ -5,15 +5,19 @@ """Implements commands for running and interacting with Fuchsia on devices.""" import boot_data +import filecmp import logging import os import pkg_repo import re import subprocess +import sys import target +import tempfile import time +import uuid -from common import EnsurePathExists, GetHostToolPathFromPlatform +from common import SDK_ROOT, EnsurePathExists, GetHostToolPathFromPlatform # The maximum times to attempt mDNS resolution when connecting to a freshly # booted Fuchsia instance before aborting. @@ -23,7 +27,11 @@ CONNECT_RETRY_COUNT_BEFORE_LOGGING = 10 # Number of seconds to wait for device discovery. -BOOT_DISCOVERY_DELAY_SECS = 4 +BOOT_DISCOVERY_TIMEOUT_SECS = 2 * 60 + +# The timeout limit for one call to the device-finder tool. +_DEVICE_FINDER_TIMEOUT_LIMIT_SECS = \ + BOOT_DISCOVERY_TIMEOUT_SECS / BOOT_DISCOVERY_ATTEMPTS # Time between a reboot command is issued and when connection attempts from the # host begin. @@ -155,44 +163,64 @@ 'set and that remote serving is set up.') def _Discover(self): - """Resolves device IP by the |_node_name|. If |_node_name| - isn't specified, and there is only one device on the network, - then returns the IP address of that advice. + """Queries mDNS for the IP address of a booted Fuchsia instance whose name + matches |_node_name| on the local area network. If |_node_name| isn't + specified, and there is only one device on the network, then returns the + IP address of that advice. Sets |_host_name| and returns True if the device was found, - or returns False if the device couldn't be found.""" + or waits up to |timeout| seconds and returns False if the device couldn't + be found.""" - ffx_command = ['target', 'list'] + dev_finder_path = GetHostToolPathFromPlatform('device-finder') + if self._node_name: - ffx_command.append(self._node_name) - ffx_command.extend(['--format', 'simple']) - proc = self.RunFFXCommand(ffx_command, - stdout=subprocess.PIPE, - stderr=open(os.devnull, 'w')) + command = [ + dev_finder_path, + 'resolve', + '-timeout', + "%ds" % _DEVICE_FINDER_TIMEOUT_LIMIT_SECS, + '-device-limit', + '1', # Exit early as soon as a host is found. + self._node_name + ] + else: + command = [ + dev_finder_path, 'list', '-full', '-timeout', + "%ds" % _DEVICE_FINDER_TIMEOUT_LIMIT_SECS + ] - output = proc.communicate()[0].strip().split('\n') - if proc.returncode != 0 or len(output[0]) == 0: + proc = subprocess.Popen(command, + stdout=subprocess.PIPE, + stderr=open(os.devnull, 'w')) + + output = set(proc.communicate()[0].strip().split('\n')) + if proc.returncode != 0: return False if self._node_name: - # With ffx, it is possible to enter part of a name and the device will - # show up, so we need to get the full name. - self._host, self._node_name = output[0].split() + # Handle the result of "device-finder resolve". + self._host = output.pop().strip() + else: - if len(output) > 1: - logging.info('More than one device was discovered on the network. ' - 'Use --node-name <name> to specify the device to use.') - logging.info('List of devices:') - logging.info(output) + name_host_pairs = [x.strip().split(' ') for x in output] + + # Handle the output of "device-finder list". + if len(name_host_pairs) > 1: + print('More than one device was discovered on the network.') + print('Use --node-name <name> to specify the device to use.') + print('\nList of devices:') + for pair in name_host_pairs: + print(' ' + pair[1]) + print() raise Exception('Ambiguous target device specification.') - assert len(output) == 1 - name_host_pairs = output[0].split() - if len(name_host_pairs) < 2: # Check if device has both address and name. - return False - self._host, self._node_name = name_host_pairs + + assert len(name_host_pairs) == 1 + self._host, self._node_name = name_host_pairs[0] logging.info('Found device "%s" at address %s.' % (self._node_name, self._host)) + return True def Start(self): @@ -208,8 +236,8 @@ self._pkg_repo = pkg_repo.ExternalPkgRepo( os.path.join(self._fuchsia_out_dir, 'amber-files')) else: - # Create an ephemeral package repository, then start both "pm serve" as well as - # the bootserver. + # Create an ephemeral package repository, then start both "pm serve" as + # well as the bootserver. self._pkg_repo = pkg_repo.ManagedPkgRepo(self) return self._pkg_repo @@ -223,11 +251,11 @@ self._node_name = m.groupdict()['nodename'] logging.info('Booted device "%s".' % self._node_name) - # Repeatedly search for a device + # Repeatdly query mDNS until we find the device, or we hit the timeout of + # DISCOVERY_TIMEOUT_SECS. logging.info('Waiting for device to join network.') for _ in xrange(BOOT_DISCOVERY_ATTEMPTS): if self._Discover(): - time.sleep(BOOT_DISCOVERY_DELAY_SECS) break if not self._host:
diff --git a/build/fuchsia/device_target_test.py b/build/fuchsia/device_target_test.py deleted file mode 100755 index a6cf2a2..0000000 --- a/build/fuchsia/device_target_test.py +++ /dev/null
@@ -1,110 +0,0 @@ -#!/usr/bin/env vpython3 -# 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. -"""Tests scenarios with number of devices and invalid devices""" - -import subprocess -import unittest -import unittest.mock as mock -from argparse import Namespace -from device_target import DeviceTarget -from target import Target - - -class TestDiscoverDeviceTarget(unittest.TestCase): - def setUp(self): - self.args = Namespace(out_dir='out/fuchsia', - target_cpu='x64', - host=None, - node_name=None, - port=None, - ssh_config=None, - fuchsia_out_dir=None, - os_check='update', - system_log_file=None) - - def testNoNodeNameOneDeviceReturnNoneCheckNameAndAddress(self): - with (DeviceTarget.CreateFromArgs(self.args)) as device_target_instance: - with mock.patch.object(DeviceTarget, 'RunFFXCommand') as mock_ffx: - mock_spec_popen = mock.create_autospec(subprocess.Popen, instance=True) - mock_spec_popen.communicate.return_value = ('address device_name', '') - mock_spec_popen.returncode = 0 - mock_ffx.return_value = mock_spec_popen - with mock.patch.object(Target, - '_WaitUntilReady') as mock_waituntilready: - mock_waituntilready.return_value = True - self.assertIsNone(device_target_instance.Start()) - self.assertEqual(device_target_instance._node_name, 'device_name') - self.assertEqual(device_target_instance._host, 'address') - - def testNoNodeNameTwoDevicesRaiseExceptionAmbiguousTarget(self): - with (DeviceTarget.CreateFromArgs(self.args)) as device_target_instance: - with mock.patch.object(DeviceTarget, 'RunFFXCommand') as mock_ffx: - mock_spec_popen = mock.create_autospec(subprocess.Popen, instance=True) - mock_spec_popen.communicate.return_value = ('address1 device_name1\n' - 'address2 device_name2', '') - mock_spec_popen.returncode = 0 - mock_spec_popen.stdout = '' - mock_ffx.return_value = mock_spec_popen - with self.assertRaisesRegex(Exception, - 'Ambiguous target device specification.'): - device_target_instance.Start() - self.assertIsNone(device_target_instance._node_name) - self.assertIsNone(device_target_instance._host) - - def testNoNodeNameDeviceDoesntHaveNameRaiseExceptionCouldNotFind(self): - with (DeviceTarget.CreateFromArgs(self.args)) as device_target_instance: - with mock.patch.object(DeviceTarget, 'RunFFXCommand') as mock_ffx: - mock_spec_popen = mock.create_autospec(subprocess.Popen, instance=True) - mock_spec_popen.communicate.return_value = ('address', '') - mock_spec_popen.returncode = 0 - mock_ffx.return_value = mock_spec_popen - with self.assertRaisesRegex(Exception, 'Could not find device'): - device_target_instance.Start() - self.assertIsNone(device_target_instance._node_name) - self.assertIsNone(device_target_instance._host) - - def testNodeNameDefinedDeviceFoundReturnNoneCheckNameAndHost(self): - self.args.node_name = 'device_name' - with (DeviceTarget.CreateFromArgs(self.args)) as device_target_instance: - with mock.patch.object(DeviceTarget, 'RunFFXCommand') as mock_ffx: - mock_spec_popen = mock.create_autospec(subprocess.Popen, instance=True) - mock_spec_popen.communicate.return_value = ('address device_name', '') - mock_spec_popen.returncode = 0 - mock_ffx.return_value = mock_spec_popen - with mock.patch.object(Target, - '_WaitUntilReady') as mock_waituntilready: - mock_waituntilready.return_value = True - self.assertIsNone(device_target_instance.Start()) - self.assertEqual(device_target_instance._node_name, 'device_name') - self.assertEqual(device_target_instance._host, 'address') - - def testNodeNameDefinedDeviceNotFoundRaiseExceptionCouldNotFind(self): - self.args.node_name = 'wrong_device_name' - with (DeviceTarget.CreateFromArgs(self.args)) as device_target_instance: - with mock.patch.object(DeviceTarget, 'RunFFXCommand') as mock_ffx: - mock_spec_popen = mock.create_autospec(subprocess.Popen, instance=True) - mock_spec_popen.communicate.return_value = ('address device_name', '') - mock_spec_popen.returncode = 2 - mock_ffx.return_value = mock_spec_popen - with self.assertRaisesRegex(Exception, 'Could not find device'): - device_target_instance.Start() - self.assertIsNone(device_target_instance._node_name) - self.assertIsNone(device_target_instance._host) - - def testNoDevicesFoundRaiseExceptionCouldNotFind(self): - with (DeviceTarget.CreateFromArgs(self.args)) as device_target_instance: - with mock.patch.object(DeviceTarget, 'RunFFXCommand') as mock_ffx: - mock_spec_popen = mock.create_autospec(subprocess.Popen, instance=True) - mock_spec_popen.communicate.return_value = ('', '') - mock_spec_popen.returncode = 0 - mock_ffx.return_value = mock_spec_popen - with self.assertRaisesRegex(Exception, 'Could not find device'): - device_target_instance.Start() - self.assertIsNone(device_target_instance._node_name) - self.assertIsNone(device_target_instance._host) - - -if __name__ == '__main__': - unittest.main()
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 818d5ba..be95944 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -6.20210802.1.1 +6.20210802.2.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 818d5ba..be95944 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -6.20210802.1.1 +6.20210802.2.1
diff --git a/build/fuchsia/target.py b/build/fuchsia/target.py index a819389..55164b3 100644 --- a/build/fuchsia/target.py +++ b/build/fuchsia/target.py
@@ -12,8 +12,6 @@ import remote_cmd import runner_logs -_FFX_PATH = os.path.join(common.SDK_ROOT, 'tools', 'x64', 'ffx') - _SHUTDOWN_CMD = ['dm', 'poweroff'] _ATTACH_RETRY_INTERVAL = 1 _ATTACH_RETRY_SECONDS = 120 @@ -322,14 +320,3 @@ if pkgctl_out != meta_far_merkel: raise Exception('Hash mismatch for %s after resolve (%s vs %s).' % (package_name, pkgctl_out, meta_far_merkel)) - - def RunFFXCommand(self, ffx_args, **kwargs): - """Automatically gets the FFX path and runs FFX based on the - arguments provided. Extra args can be added to be used with Popen. - - ffx_args: The arguments for a ffx command. - kwargs: A dictionary of parameters to be passed to subprocess.Popen(). - - Returns a Popen object for the command.""" - command = [_FFX_PATH] + ffx_args - return subprocess.Popen(command, **kwargs) \ No newline at end of file
diff --git a/chrome/android/features/start_surface/internal/BUILD.gn b/chrome/android/features/start_surface/internal/BUILD.gn index cdecdd8..a8852c9 100644 --- a/chrome/android/features/start_surface/internal/BUILD.gn +++ b/chrome/android/features/start_surface/internal/BUILD.gn
@@ -81,6 +81,7 @@ "//chrome/browser/ui/android/layouts:java", "//chrome/browser/ui/android/layouts/third_party/float_property:java", "//chrome/browser/ui/android/omnibox:java", + "//chrome/browser/ui/android/toolbar:java", "//chrome/browser/ui/messages/android:java", "//chrome/browser/util:java", "//chrome/browser/version:java",
diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceCoordinator.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceCoordinator.java index b707469..628ec96 100644 --- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceCoordinator.java +++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceCoordinator.java
@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.share.ShareDelegate; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.start_surface.R; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; @@ -76,6 +77,9 @@ * @param shareDelegateSupplier Supplies the {@link ShareDelegate}. * @param windowAndroid The current {@link WindowAndroid}. * @param tabModelSelector The current {@link TabModelSelector}. + * @param toolbarSupplier Supplies the {@link Toolbar}. + * @param feedLaunchReliabilityLoggingState Holds the state for feed surface creation. + * @param swipeRefreshLayout The layout to support pull-to-refresg. */ ExploreSurfaceCoordinator(@NonNull Activity activity, @NonNull ViewGroup parentView, @NonNull PropertyModel containerPropertyModel, boolean hasHeader, @@ -85,6 +89,7 @@ @NonNull SnackbarManager snackbarManager, @NonNull Supplier<ShareDelegate> shareDelegateSupplier, @NonNull WindowAndroid windowAndroid, @NonNull TabModelSelector tabModelSelector, + @NonNull Supplier<Toolbar> toolbarSupplier, FeedLaunchReliabilityLoggingState feedLaunchReliabilityLoggingState, @Nullable FeedSwipeRefreshLayout swipeRefreshLayout) { mActivity = activity; @@ -103,7 +108,8 @@ boolean isPlaceholderShown, @NewTabPageLaunchOrigin int launchOrigin) { return internalCreateFeedSurfaceCoordinator(mHasHeader, isInNightMode, isPlaceholderShown, bottomSheetController, scrollableContainerDelegate, - launchOrigin, feedLaunchReliabilityLoggingState, swipeRefreshLayout); + launchOrigin, toolbarSupplier, feedLaunchReliabilityLoggingState, + swipeRefreshLayout); } }; } @@ -134,7 +140,7 @@ boolean isInNightMode, boolean isPlaceholderShown, BottomSheetController bottomSheetController, ScrollableContainerDelegate scrollableContainerDelegate, - @NewTabPageLaunchOrigin int launchOrigin, + @NewTabPageLaunchOrigin int launchOrigin, @NonNull Supplier<Toolbar> toolbarSupplier, FeedLaunchReliabilityLoggingState feedLaunchReliabilityLoggingState, FeedSwipeRefreshLayout swipeRefreshLayout) { if (mExploreSurfaceNavigationDelegate == null) { @@ -160,7 +166,7 @@ mSnackbarManager, mWindowAndroid, null, null, sectionHeaderView, isInNightMode, this, mExploreSurfaceNavigationDelegate, profile, isPlaceholderShown, bottomSheetController, mShareDelegateSupplier, scrollableContainerDelegate, - launchOrigin, PrivacyPreferencesManagerImpl.getInstance(), + launchOrigin, PrivacyPreferencesManagerImpl.getInstance(), toolbarSupplier, feedLaunchReliabilityLoggingState, swipeRefreshLayout); feedSurfaceCoordinator.getView().setId(R.id.start_surface_explore_view); feedSurfaceCoordinator.getRecyclerView().setOverScrollMode(View.OVER_SCROLL_NEVER);
diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java index 2127c1b..7b64754 100644 --- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java +++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java
@@ -42,6 +42,7 @@ import org.chromium.chrome.browser.tasks.tab_management.TabManagementDelegate.TabSwitcherType; import org.chromium.chrome.browser.tasks.tab_management.TabManagementModuleProvider; import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher; +import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.xsurface.FeedLaunchReliabilityLogger.SurfaceType; import org.chromium.chrome.start_surface.R; @@ -87,6 +88,7 @@ private final TabCreatorManager mTabCreatorManager; private final MenuOrKeyboardActionController mMenuOrKeyboardActionController; private final MultiWindowModeStateDispatcher mMultiWindowModeStateDispatcher; + private final Supplier<Toolbar> mToolbarSupplier; // Non-null in SurfaceMode.SINGLE_PANE mode. @Nullable @@ -201,6 +203,7 @@ * @param menuOrKeyboardActionController allows access to menu or keyboard actions. * @param multiWindowModeStateDispatcher Gives access to the multi window mode state. * @param jankTracker Measures jank while feed or tab switcher are visible. + * @param toolbarSupplier Supplies the {@link Toolbar}. */ public StartSurfaceCoordinator(@NonNull Activity activity, @NonNull ScrimCoordinator scrimCoordinator, @@ -221,7 +224,7 @@ @NonNull TabCreatorManager tabCreatorManager, @NonNull MenuOrKeyboardActionController menuOrKeyboardActionController, @NonNull MultiWindowModeStateDispatcher multiWindowModeStateDispatcher, - @NonNull JankTracker jankTracker) { + @NonNull JankTracker jankTracker, @NonNull Supplier<Toolbar> toolbarSupplier) { mFeedLaunchReliabilityLoggingState = new FeedLaunchReliabilityLoggingState(SurfaceType.START_SURFACE, System.nanoTime()); mActivity = activity; @@ -244,6 +247,7 @@ mTabCreatorManager = tabCreatorManager; mMenuOrKeyboardActionController = menuOrKeyboardActionController; mMultiWindowModeStateDispatcher = multiWindowModeStateDispatcher; + mToolbarSupplier = toolbarSupplier; boolean excludeMVTiles = StartSurfaceConfiguration.START_SURFACE_EXCLUDE_MV_TILES.getValue() || !mIsStartSurfaceEnabled; @@ -369,12 +373,12 @@ mIsInitializedWithNative = true; if (mIsStartSurfaceEnabled) { - mExploreSurfaceCoordinator = - new ExploreSurfaceCoordinator(mActivity, mTasksSurface.getBodyViewContainer(), - mPropertyModel, true, mBottomSheetController, mParentTabSupplier, - new ScrollableContainerDelegateImpl(), mSnackbarManager, - mShareDelegateSupplier, mWindowAndroid, mTabModelSelector, - mFeedLaunchReliabilityLoggingState, mSwipeRefreshLayout); + mExploreSurfaceCoordinator = new ExploreSurfaceCoordinator(mActivity, + mTasksSurface.getBodyViewContainer(), mPropertyModel, true, + mBottomSheetController, mParentTabSupplier, + new ScrollableContainerDelegateImpl(), mSnackbarManager, mShareDelegateSupplier, + mWindowAndroid, mTabModelSelector, mToolbarSupplier, + mFeedLaunchReliabilityLoggingState, mSwipeRefreshLayout); } mStartSurfaceMediator.initWithNative( mIsStartSurfaceEnabled ? mOmniboxStubSupplier.get() : null,
diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceDelegate.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceDelegate.java index f383b32..71132c2 100644 --- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceDelegate.java +++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceDelegate.java
@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabCreatorManager; import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.widget.MenuOrKeyboardActionController; @@ -61,13 +62,13 @@ @NonNull TabCreatorManager tabCreatorManager, @NonNull MenuOrKeyboardActionController menuOrKeyboardActionController, @NonNull MultiWindowModeStateDispatcher multiWindowModeStateDispatcher, - @NonNull JankTracker jankTracker) { + @NonNull JankTracker jankTracker, @NonNull Supplier<Toolbar> toolbarSupplier) { return new StartSurfaceCoordinator(activity, scrimCoordinator, sheetController, startSurfaceOneshotSupplier, parentTabSupplier, hadWarmStart, windowAndroid, containerView, dynamicResourceLoaderSupplier, tabModelSelector, browserControlsManager, snackbarManager, shareDelegateSupplier, omniboxStubSupplier, tabContentManager, modalDialogManager, chromeActivityNativeDelegate, activityLifecycleDispatcher, tabCreatorManager, menuOrKeyboardActionController, - multiWindowModeStateDispatcher, jankTracker); + multiWindowModeStateDispatcher, jankTracker, toolbarSupplier); } -} \ No newline at end of file +}
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/ExploreSurfaceViewBinderTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/ExploreSurfaceViewBinderTest.java index 6e1d902..4d32708 100644 --- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/ExploreSurfaceViewBinderTest.java +++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/ExploreSurfaceViewBinderTest.java
@@ -85,8 +85,9 @@ mActivityTestRule.getActivity().getSnackbarManager(), mActivityTestRule.getActivity().getShareDelegateSupplier(), mActivityTestRule.getActivity().getWindowAndroid(), - mActivityTestRule.getActivity().getTabModelSelector(), - new FeedLaunchReliabilityLoggingState(SurfaceType.START_SURFACE, 0L), null); + mActivityTestRule.getActivity().getTabModelSelector(), () -> { + return null; + }, new FeedLaunchReliabilityLoggingState(SurfaceType.START_SURFACE, 0L), null); mFeedSurfaceCoordinator = mExploreSurfaceCoordinator.getFeedSurfaceController() .createFeedSurfaceCoordinator(false, /* isPlaceholderShown= */ false,
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java index fa1f632..28a20fb 100644 --- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java +++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
@@ -1089,8 +1089,9 @@ @Override public void check(View view, NoMatchingViewException noMatchException) { if (noMatchException != null) throw noMatchException; - int tabListPadding = - (int) TabUiThemeProvider.getTabCardPaddingDimension(view.getContext()); + float tabListPadding = TabUiThemeProvider.getTabCardPaddingDimension(view.getContext()); + float messageCardMargin = + TabUiThemeProvider.getMessageCardMarginDimension(view.getContext()); assertTrue(view instanceof RecyclerView); RecyclerView recyclerView = (RecyclerView) view; @@ -1103,8 +1104,10 @@ assertEquals(TabProperties.UiType.MESSAGE, messageItemViewHolder.getItemViewType()); View messageItemView = messageItemViewHolder.itemView; - // The message card item width should always be recyclerView width minus padding. - assertEquals(recyclerView.getWidth() - 2 * tabListPadding, messageItemView.getWidth()); + // The message card item width should always be recyclerView width minus padding and + // margin. + assertEquals(recyclerView.getWidth() - 2 * tabListPadding - 2 * messageCardMargin, + (float) messageItemView.getWidth(), 1.0f); } }
diff --git a/chrome/android/features/tab_ui/BUILD.gn b/chrome/android/features/tab_ui/BUILD.gn index f1abf08..3cc7480 100644 --- a/chrome/android/features/tab_ui/BUILD.gn +++ b/chrome/android/features/tab_ui/BUILD.gn
@@ -41,10 +41,6 @@ "java/res/drawable/ic_trending_down_blue.xml", "java/res/drawable/iph_drag_and_drop_animated_drawable.xml", "java/res/drawable/iph_drag_and_drop_drawable.xml", - "java/res/drawable/message_card_background.xml", - "java/res/drawable/message_card_background_incognito.xml", - "java/res/drawable/message_card_background_with_inset.xml", - "java/res/drawable/message_card_background_with_inset_incognito.xml", "java/res/drawable/price_card_background.xml", "java/res/drawable/price_card_scrim.xml", "java/res/drawable/selected_tab_background.xml",
diff --git a/chrome/android/features/tab_ui/java/res/drawable/message_card_background.xml b/chrome/android/features/tab_ui/java/res/drawable/message_card_background.xml deleted file mode 100644 index b5deae2..0000000 --- a/chrome/android/features/tab_ui/java/res/drawable/message_card_background.xml +++ /dev/null
@@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright 2020 The Chromium Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. --> - -<shape - xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle" > - <solid android:color="@color/default_bg_color" /> - <stroke android:width="@dimen/divider_height" android:color="@color/hairline_stroke_color"/> - <corners android:radius="@dimen/tab_list_card_radius" /> -</shape>
diff --git a/chrome/android/features/tab_ui/java/res/drawable/message_card_background_incognito.xml b/chrome/android/features/tab_ui/java/res/drawable/message_card_background_incognito.xml deleted file mode 100644 index c6f2dd69..0000000 --- a/chrome/android/features/tab_ui/java/res/drawable/message_card_background_incognito.xml +++ /dev/null
@@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright 2020 The Chromium Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. --> - -<shape - xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle" > - <solid android:color="@color/default_bg_color_dark"/> - <stroke android:width="@dimen/divider_height" android:color="@color/hairline_stroke_color_dark"/> - <corners android:radius="@dimen/tab_list_card_radius" /> -</shape>
diff --git a/chrome/android/features/tab_ui/java/res/drawable/message_card_background_with_inset.xml b/chrome/android/features/tab_ui/java/res/drawable/message_card_background_with_inset.xml deleted file mode 100644 index a21e3a6f..0000000 --- a/chrome/android/features/tab_ui/java/res/drawable/message_card_background_with_inset.xml +++ /dev/null
@@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright 2020 The Chromium Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. --> - -<inset - xmlns:android="http://schemas.android.com/apk/res/android" - android:drawable="@drawable/message_card_background" - android:inset="@dimen/tab_list_selected_inset"/>
diff --git a/chrome/android/features/tab_ui/java/res/drawable/message_card_background_with_inset_incognito.xml b/chrome/android/features/tab_ui/java/res/drawable/message_card_background_with_inset_incognito.xml deleted file mode 100644 index 5fb529c..0000000 --- a/chrome/android/features/tab_ui/java/res/drawable/message_card_background_with_inset_incognito.xml +++ /dev/null
@@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright 2020 The Chromium Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. --> - -<inset - xmlns:android="http://schemas.android.com/apk/res/android" - android:drawable="@drawable/message_card_background_incognito" - android:inset="@dimen/tab_list_selected_inset"/>
diff --git a/chrome/android/features/tab_ui/java/res/layout/large_message_card_item.xml b/chrome/android/features/tab_ui/java/res/layout/large_message_card_item.xml index b409854..3a7796d8 100644 --- a/chrome/android/features/tab_ui/java/res/layout/large_message_card_item.xml +++ b/chrome/android/features/tab_ui/java/res/layout/large_message_card_item.xml
@@ -7,12 +7,13 @@ android:id="@+id/large_message_card_item" android:layout_width="match_parent" android:layout_height="wrap_content"> - <FrameLayout + <org.chromium.components.browser_ui.widget.MaterialCardViewNoShadow android:id="@+id/large_message_card_view" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_margin="@dimen/tab_list_selected_margin" android:layout_gravity="center" - android:background="@drawable/message_card_background_with_inset"> + style="@style/MaterialCardStyle"> <LinearLayout android:id="@+id/large_message_linear_layout" android:layout_width="match_parent" @@ -77,5 +78,5 @@ android:layout_gravity="end" android:contentDescription="@string/close" android:tint="@color/default_icon_color" /> - </FrameLayout> + </org.chromium.components.browser_ui.widget.MaterialCardViewNoShadow> </org.chromium.chrome.browser.tasks.tab_management.LargeMessageCardView>
diff --git a/chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml b/chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml index 55a54be..29efb97 100644 --- a/chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml +++ b/chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml
@@ -8,8 +8,9 @@ android:id="@+id/tab_grid_message_item" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_margin="@dimen/tab_list_selected_margin" android:orientation="horizontal" - android:background="@drawable/message_card_background_with_inset"> + android:background="@drawable/card_with_corners_background"> <org.chromium.ui.widget.ChromeImageView android:id="@+id/icon" android:layout_width="0dp"
diff --git a/chrome/android/features/tab_ui/java/res/values/dimens.xml b/chrome/android/features/tab_ui/java/res/values/dimens.xml index beddece..8849d197 100644 --- a/chrome/android/features/tab_ui/java/res/values/dimens.xml +++ b/chrome/android/features/tab_ui/java/res/values/dimens.xml
@@ -6,6 +6,7 @@ <dimen name="tab_grid_favicon_size">18dp</dimen> <dimen name="tab_list_selected_inset">7dp</dimen> <dimen name="tab_list_selected_inset_low_end">6dp</dimen> + <dimen name="tab_list_selected_margin">7dp</dimen> <dimen name="tab_list_card_padding">8dp</dimen> <dimen name="tab_list_card_radius">4dp</dimen> <dimen name="tab_list_card_title_height">32dp</dimen>
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardView.java index e7d19f9..8ea6c7f 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardView.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardView.java
@@ -8,11 +8,13 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; import android.util.AttributeSet; import android.widget.LinearLayout; import org.chromium.base.ApiCompatibilityUtils; import org.chromium.chrome.tab_ui.R; +import org.chromium.components.browser_ui.styles.ChromeColors; import org.chromium.components.browser_ui.widget.text.TemplatePreservingTextView; import org.chromium.ui.widget.ButtonCompat; import org.chromium.ui.widget.ChromeImageView; @@ -152,6 +154,15 @@ */ private void setBackground(boolean isIncognito) { setBackgroundResource(TabUiThemeProvider.getMessageCardBackgroundResourceId(isIncognito)); + // Incognito colors should follow baseline. + // Use the color defined in drawable. + if (isIncognito) { + return; + } + // Set dynamic color. + GradientDrawable gradientDrawable = (GradientDrawable) getBackground(); + gradientDrawable.setColor( + ChromeColors.getSurfaceColor(getContext(), R.dimen.default_elevation_1)); } /**
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegate.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegate.java index e9a40ad..9bd9f37 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegate.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegate.java
@@ -37,6 +37,7 @@ import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilter; import org.chromium.chrome.browser.tasks.tab_management.suggestions.TabSuggestions; import org.chromium.chrome.browser.theme.ThemeColorProvider; +import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.features.start_surface.StartSurface; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; @@ -239,6 +240,7 @@ * @param menuOrKeyboardActionController allows access to menu or keyboard actions. * @param multiWindowModeStateDispatcher Gives access to the multi window mode state. * @param jankTracker Measures jank while tab switcher is visible. + * @param toolbarSupplier Supplies the {@link Toolbar}. * @return the {@link StartSurface} */ StartSurface createStartSurface(@NonNull Activity activity, @@ -260,7 +262,7 @@ @NonNull TabCreatorManager tabCreatorManager, @NonNull MenuOrKeyboardActionController menuOrKeyboardActionController, @NonNull MultiWindowModeStateDispatcher multiWindowModeStateDispatcher, - @NonNull JankTracker jankTracker); + @NonNull JankTracker jankTracker, @NonNull Supplier<Toolbar> toolbarSupplier); /** * Create a {@link TabGroupModelFilter} for the given {@link TabModel}.
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegateImpl.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegateImpl.java index 9b5ddc4..b1fc7cf 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegateImpl.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegateImpl.java
@@ -43,6 +43,7 @@ import org.chromium.chrome.browser.tasks.tab_management.suggestions.TabSuggestions; import org.chromium.chrome.browser.tasks.tab_management.suggestions.TabSuggestionsOrchestrator; import org.chromium.chrome.browser.theme.ThemeColorProvider; +import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.features.start_surface.StartSurface; import org.chromium.chrome.features.start_surface.StartSurfaceDelegate; @@ -179,14 +180,14 @@ @NonNull TabCreatorManager tabCreatorManager, @NonNull MenuOrKeyboardActionController menuOrKeyboardActionController, @NonNull MultiWindowModeStateDispatcher multiWindowModeStateDispatcher, - @NonNull JankTracker jankTracker) { + @NonNull JankTracker jankTracker, @NonNull Supplier<Toolbar> toolbarSupplier) { return StartSurfaceDelegate.createStartSurface(activity, scrimCoordinator, sheetController, startSurfaceOneshotSupplier, parentTabSupplier, hadWarmStart, windowAndroid, containerView, dynamicResourceLoaderSupplier, tabModelSelector, browserControlsManager, snackbarManager, shareDelegateSupplier, omniboxStubSupplier, tabContentManager, modalDialogManager, chromeActivityNativeDelegate, activityLifecycleDispatcher, tabCreatorManager, menuOrKeyboardActionController, - multiWindowModeStateDispatcher, jankTracker); + multiWindowModeStateDispatcher, jankTracker, toolbarSupplier); } @Override
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java index d457d278..6b35a5d 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java
@@ -513,8 +513,7 @@ * @return The background resource id for message card view. */ public static int getMessageCardBackgroundResourceId(boolean isIncognito) { - return isIncognito ? R.drawable.message_card_background_with_inset_incognito - : R.drawable.message_card_background_with_inset; + return isIncognito ? R.drawable.incognito_card_bg : R.drawable.card_with_corners_background; } /** @@ -602,4 +601,13 @@ static boolean themeRefactorEnabled() { return CachedFeatureFlags.isEnabled(ChromeFeatureList.THEME_REFACTOR_ANDROID); } + + /** + * Return the size represented by dimension for margin around message cards. + * @param context {@link Context} to retrieve dimension. + * @return The margin around message cards in float number. + */ + public static float getMessageCardMarginDimension(Context context) { + return context.getResources().getDimension(R.dimen.tab_list_selected_inset); + } }
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphTest.java index a557ed8c..51410ba 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphTest.java
@@ -240,6 +240,8 @@ ActivityTestUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE); CriteriaHelper.pollUiThread( TabSwitcherCoordinator::hasAppendedMessagesForTesting); + onView(allOf(withParent(withId(R.id.compositor_view_holder)), withId(R.id.tab_list_view))) + .perform(RecyclerViewActions.scrollTo(withId(R.id.tab_grid_message_item))); onView(withId(R.id.tab_grid_message_item)).check(matches(isDisplayed())); mRenderTestRule.render(
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java index 7cb7e2b..6e9bb74 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
@@ -22,6 +22,7 @@ import android.widget.ScrollView; import androidx.annotation.IntDef; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.recyclerview.widget.RecyclerView; @@ -54,6 +55,7 @@ import org.chromium.chrome.browser.settings.SettingsLauncherImpl; import org.chromium.chrome.browser.share.ShareDelegate; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; +import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.user_education.UserEducationHelper; import org.chromium.chrome.browser.xsurface.FeedLaunchReliabilityLogger; @@ -149,6 +151,8 @@ private FeedLaunchReliabilityLogger mLaunchReliabilityLogger; private final PrivacyPreferencesManagerImpl mPrivacyPreferencesManager; + private final Supplier<Toolbar> mToolbarSupplier; + private FeedSwipeRefreshLayout mSwipeRefreshLayout; @IntDef({StreamTabId.FOR_YOU, StreamTabId.FOLLOWING}) @@ -248,6 +252,10 @@ * @param bottomSheetController The bottom sheet controller. * @param shareDelegateSupplier The supplier for the share delegate used to share articles. * @param launchOrigin The origin of what launched the feed. + * @param privacyPreferencesManager Manages the privacy preferences. + * @param toolbarSupplier Supplies the {@link Toolbar}. + * @param FeedLaunchReliabilityLoggingState Holds the state for feed surface creation. + * @param swipeRefreshLayout The layout to support pull-to-refresh. */ public FeedSurfaceCoordinator(Activity activity, SnackbarManager snackbarManager, WindowAndroid windowAndroid, @Nullable SnapScrollHelper snapScrollHelper, @@ -259,6 +267,7 @@ @Nullable ScrollableContainerDelegate externalScrollableContainerDelegate, @NewTabPageLaunchOrigin int launchOrigin, PrivacyPreferencesManagerImpl privacyPreferencesManager, + @NonNull Supplier<Toolbar> toolbarSupplier, FeedLaunchReliabilityLoggingState launchReliabilityLoggingState, @Nullable FeedSwipeRefreshLayout swipeRefreshLayout) { FeedSurfaceTracker.getInstance().initServiceBridge(); @@ -276,6 +285,7 @@ mScrollableContainerDelegate = externalScrollableContainerDelegate; mLaunchReliabilityLoggingState = launchReliabilityLoggingState; mPrivacyPreferencesManager = privacyPreferencesManager; + mToolbarSupplier = toolbarSupplier; mSwipeRefreshLayout = swipeRefreshLayout; Resources resources = mActivity.getResources(); @@ -328,8 +338,13 @@ @Override public void destroy() { if (mSwipeRefreshLayout != null) { + if (mSwipeRefreshLayout.isRefreshing()) { + mSwipeRefreshLayout.setRefreshing(false); + updateReloadButtonVisibility(/*isReloading=*/false); + } mSwipeRefreshLayout.removeOnRefreshListener(this); mSwipeRefreshLayout.disableSwipe(); + mSwipeRefreshLayout = null; } stopIph(); mMediator.destroy(); @@ -384,8 +399,20 @@ @Override public void onRefresh() { + updateReloadButtonVisibility(/*isReloading=*/true); mLaunchReliabilityLogger.logManualRefresh(System.nanoTime()); - mStream.triggerRefresh((Boolean v) -> { mSwipeRefreshLayout.setRefreshing(false); }); + mStream.triggerRefresh((Boolean v) -> { + if (mSwipeRefreshLayout == null) return; + updateReloadButtonVisibility(/*isReloading=*/false); + mSwipeRefreshLayout.setRefreshing(false); + }); + } + + void updateReloadButtonVisibility(boolean isReloading) { + Toolbar toolbar = mToolbarSupplier.get(); + if (toolbar != null) { + toolbar.updateReloadButtonVisibility(isReloading); + } } /**
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml index 462d8b0..ee101f8 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml
@@ -37,10 +37,6 @@ <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> {% endif %} - <!-- - TODO(b/183501112): Remove this condition when always building against the S SDK. - --> - {% if target_sdk_version == 'S' or target_sdk_version|int >= 31 %} <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/> <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/> <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/> @@ -51,10 +47,6 @@ --> <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/> - {% else %} - <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/> - <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN"/> - {% endif %} <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/> <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index d40d5f3..b28f56b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -665,7 +665,8 @@ /* chromeActivityNativeDelegate= */ this, getLifecycleDispatcher(), getTabCreatorManagerSupplier().get(), getMenuOrKeyboardActionController(), - getMultiWindowModeStateDispatcher(), mJankTracker); + getMultiWindowModeStateDispatcher(), mJankTracker, + getToolbarManager()::getToolbar); } } @@ -1380,6 +1381,8 @@ final String url = loadUrlParams.getUrl(); boolean fromLauncherShortcut = IntentUtils.safeGetBooleanExtra( intent, IntentHandler.EXTRA_INVOKED_FROM_SHORTCUT, false); + boolean fromAppWidget = IntentUtils.safeGetBooleanExtra( + intent, IntentHandler.EXTRA_INVOKED_FROM_APP_WIDGET, false); boolean focus = false; TabModel tabModel = getCurrentTabModel(); @@ -1487,6 +1490,9 @@ UrlConstants.NTP_URL, TabLaunchType.FROM_LAUNCHER_SHORTCUT); recordLauncherShortcutAction(true); reportNewTabShortcutUsed(true); + } else if (fromAppWidget) { + getTabCreator(true).launchUrl( + UrlConstants.NTP_URL, TabLaunchType.FROM_APP_WIDGET); } else if (IncognitoTabLauncher.didCreateIntent(intent)) { Tab tab = getTabCreator(true).launchUrl(UrlConstants.NTP_URL, TabLaunchType.FROM_LAUNCH_NEW_INCOGNITO_TAB); @@ -1827,7 +1833,7 @@ this::getCompositorViewHolder, getModalDialogManagerSupplier(), this::getSnackbarManager, getBrowserControlsManager(), getActivityTabProvider(), getLifecycleDispatcher(), getWindowAndroid(), this::getLastUserInteractionTime, - this::hadWarmStart, mJankTracker); + this::hadWarmStart, mJankTracker, getToolbarManager()::getToolbar); } return mTabDelegateFactory; } @@ -2239,6 +2245,9 @@ if (IntentUtils.safeGetBooleanExtra( intent, IntentHandler.EXTRA_INVOKED_FROM_SHORTCUT, false)) { launchType = TabLaunchType.FROM_LAUNCHER_SHORTCUT; + } else if (IntentUtils.safeGetBooleanExtra( + intent, IntentHandler.EXTRA_INVOKED_FROM_APP_WIDGET, false)) { + launchType = TabLaunchType.FROM_APP_WIDGET; } else if (IncognitoTabLauncher.didCreateIntent(intent)) { launchType = TabLaunchType.FROM_LAUNCH_NEW_INCOGNITO_TAB; } else {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java index baebff6..3b2c327 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
@@ -128,6 +128,12 @@ "com.android.chrome.invoked_from_shortcut"; /** + * An extra to indicate that the intent was triggered from am app widget. + */ + public static final String EXTRA_INVOKED_FROM_APP_WIDGET = + "com.android.chrome.invoked_from_app_widget"; + + /** * An extra to indicate that the intent was triggered by the launch new incognito tab feature. * See {@link org.chromium.chrome.browser.incognito.IncognitoTabLauncher}. */ @@ -1061,7 +1067,11 @@ // OMNIBOX_FOCUSED_ON_NEW_TAB is enabled, a new Tab with omnibox focused will be shown on // Startup. final boolean isCanonicalizedNTPUrl = UrlUtilities.isCanonicalizedNTPUrl(intentUrl); - return isCanonicalizedNTPUrl && IntentHandler.isTabOpenAsNewTabFromLauncher(intent) + + final boolean isFromShortcutOrWidget = IntentHandler.isTabOpenAsNewTabFromLauncher(intent) + || IntentHandler.isTabOpenAsNewTabFromAppWidget(intent); + + return isCanonicalizedNTPUrl && isFromShortcutOrWidget && StartSurfaceConfiguration.OMNIBOX_FOCUSED_ON_NEW_TAB.getValue() && IntentHandler.wasIntentSenderChrome(intent); } @@ -1076,6 +1086,16 @@ intent, IntentHandler.EXTRA_INVOKED_FROM_SHORTCUT, false); } + /** + * @param intent The {@link Intent} to extract the info from. + * @return Whether the Intent specifies to create a new Tab from an app widget. + */ + public static boolean isTabOpenAsNewTabFromAppWidget(Intent intent) { + return IntentUtils.safeGetBooleanExtra(intent, Browser.EXTRA_CREATE_NEW_TAB, false) + && IntentUtils.safeGetBooleanExtra( + intent, IntentHandler.EXTRA_INVOKED_FROM_APP_WIDGET, false); + } + /* * The default behavior here is to open in a new tab. If this is changed, ensure * intents with action NDEF_DISCOVERED (links beamed over NFC) are handled properly.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java index 53c53a1..995ebba 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java
@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid; import org.chromium.chrome.browser.tabmodel.TabCreatorManager; import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.NativePage; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; @@ -67,6 +68,7 @@ private final Supplier<Long> mLastUserInteractionTimeSupplier; private final BooleanSupplier mHadWarmStartSupplier; private final JankTracker mJankTracker; + private final Supplier<Toolbar> mToolbarSupplier; private NativePageFactory mNativePageFactory; @@ -85,7 +87,7 @@ BrowserControlsManager browserControlsManager, Supplier<Tab> currentTabSupplier, ActivityLifecycleDispatcher lifecycleDispatcher, WindowAndroid windowAndroid, Supplier<Long> lastUserInteractionTimeSupplier, BooleanSupplier hadWarmStartSupplier, - JankTracker jankTracker) { + JankTracker jankTracker, Supplier<Toolbar> toolbarSupplier) { mActivity = activity; mAppBrowserControlsVisibilityDelegate = appBrowserControlsVisibilityDelegate; mShareDelegateSupplier = shareDelegateSupplier; @@ -108,6 +110,7 @@ mLastUserInteractionTimeSupplier = lastUserInteractionTimeSupplier; mHadWarmStartSupplier = hadWarmStartSupplier; mJankTracker = jankTracker; + mToolbarSupplier = toolbarSupplier; } @Override @@ -148,7 +151,7 @@ mBrowserControlsManager, mCurrentTabSupplier, mSnackbarManagerSupplier, mLifecycleDispatcher, mTabModelSelectorSupplier.get(), mShareDelegateSupplier, mWindowAndroid, mLastUserInteractionTimeSupplier, mHadWarmStartSupplier, - mTabCreatorManager, mJankTracker); + mTabCreatorManager, mJankTracker, mToolbarSupplier); } return mNativePageFactory.createNativePage(url, candidatePage, tab); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java index 8fb000b..6edc1d2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
@@ -193,7 +193,8 @@ if (type == TabLaunchType.FROM_RESTORE || type == TabLaunchType.FROM_REPARENTING || type == TabLaunchType.FROM_EXTERNAL_APP || type == TabLaunchType.FROM_LAUNCHER_SHORTCUT - || type == TabLaunchType.FROM_STARTUP) { + || type == TabLaunchType.FROM_STARTUP + || type == TabLaunchType.FROM_APP_WIDGET) { return; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java index a5e552b..d966544 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
@@ -38,6 +38,7 @@ import org.chromium.chrome.browser.tab.state.CriticalPersistedTabData; import org.chromium.chrome.browser.tabmodel.TabCreatorManager; import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.NativePage; import org.chromium.chrome.browser.ui.native_page.NativePage.NativePageType; @@ -66,6 +67,7 @@ private final BooleanSupplier mHadWarmStartSupplier; private final TabCreatorManager mTabCreatorManager; private final JankTracker mJankTracker; + private final Supplier<Toolbar> mToolbarSupplier; private NewTabPageUma mNewTabPageUma; private NativePageBuilder mNativePageBuilder; @@ -81,7 +83,8 @@ @NonNull WindowAndroid windowAndroid, @NonNull Supplier<Long> lastUserInteractionTimeSupplier, @NonNull BooleanSupplier hadWarmStartSupplier, - @NonNull TabCreatorManager tabCreatorManager, @NonNull JankTracker jankTracker) { + @NonNull TabCreatorManager tabCreatorManager, @NonNull JankTracker jankTracker, + @NonNull Supplier<Toolbar> toolbarSupplier) { mActivity = activity; mBottomSheetController = sheetController; mBrowserControlsManager = browserControlsManager; @@ -95,14 +98,16 @@ mHadWarmStartSupplier = hadWarmStartSupplier; mTabCreatorManager = tabCreatorManager; mJankTracker = jankTracker; + mToolbarSupplier = toolbarSupplier; } private NativePageBuilder getBuilder() { if (mNativePageBuilder == null) { - mNativePageBuilder = new NativePageBuilder(mActivity, this::getNewTabPageUma, - mBottomSheetController, mBrowserControlsManager, mCurrentTabSupplier, - mSnackbarManagerSupplier, mLifecycleDispatcher, mTabModelSelector, - mShareDelegateSupplier, mWindowAndroid, mTabCreatorManager, mJankTracker); + mNativePageBuilder = + new NativePageBuilder(mActivity, this::getNewTabPageUma, mBottomSheetController, + mBrowserControlsManager, mCurrentTabSupplier, mSnackbarManagerSupplier, + mLifecycleDispatcher, mTabModelSelector, mShareDelegateSupplier, + mWindowAndroid, mTabCreatorManager, mJankTracker, mToolbarSupplier); } return mNativePageBuilder; } @@ -130,6 +135,7 @@ private final WindowAndroid mWindowAndroid; private final TabCreatorManager mTabCreatorManager; private final JankTracker mJankTracker; + private final Supplier<Toolbar> mToolbarSupplier; public NativePageBuilder(Activity activity, Supplier<NewTabPageUma> uma, BottomSheetController sheetController, @@ -137,7 +143,8 @@ Supplier<SnackbarManager> snackbarManagerSupplier, ActivityLifecycleDispatcher lifecycleDispatcher, TabModelSelector tabModelSelector, Supplier<ShareDelegate> shareDelegateSupplier, WindowAndroid windowAndroid, - TabCreatorManager tabCreatorManager, JankTracker jankTracker) { + TabCreatorManager tabCreatorManager, JankTracker jankTracker, + Supplier<Toolbar> toolbarSupplier) { mActivity = activity; mUma = uma; mBottomSheetController = sheetController; @@ -150,6 +157,7 @@ mWindowAndroid = windowAndroid; mTabCreatorManager = tabCreatorManager; mJankTracker = jankTracker; + mToolbarSupplier = toolbarSupplier; } protected NativePage buildNewTabPage(Tab tab, String url) { @@ -161,7 +169,8 @@ mSnackbarManagerSupplier.get(), mLifecycleDispatcher, mTabModelSelector, DeviceFormFactor.isWindowOnTablet(mWindowAndroid), mUma.get(), ColorUtils.inNightMode(mActivity), nativePageHost, tab, url, - mBottomSheetController, mShareDelegateSupplier, mWindowAndroid, mJankTracker); + mBottomSheetController, mShareDelegateSupplier, mWindowAndroid, mJankTracker, + mToolbarSupplier); } protected NativePage buildBookmarksPage(Tab tab) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java index cf19605..3d4691e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
@@ -70,6 +70,7 @@ import org.chromium.chrome.browser.tab.TabObserver; import org.chromium.chrome.browser.tab.TabSelectionType; import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.NativePage; import org.chromium.chrome.browser.ui.native_page.NativePageHost; @@ -141,6 +142,8 @@ private final int mTabStripAndToolbarHeight; + private final Supplier<Toolbar> mToolbarSupplier; + @Override public void onControlsOffsetChanged(int topOffset, int topControlsMinHeightOffset, int bottomOffset, int bottomControlsMinHeightOffset, boolean needsAnimate) { @@ -302,6 +305,7 @@ * @param shareDelegateSupplier Supplies the Delegate used to open SharingHub. * @param windowAndroid The containing window of this page. * @param jankTracker {@link JankTracker} object to measure jankiness while NTP is visible. + * @param toolbarSupplier Supplies the {@link Toolbar}. */ public NewTabPage(Activity activity, BrowserControlsStateProvider browserControlsStateProvider, Supplier<Tab> activityTabProvider, SnackbarManager snackbarManager, @@ -310,7 +314,7 @@ NativePageHost nativePageHost, Tab tab, String url, BottomSheetController bottomSheetController, Supplier<ShareDelegate> shareDelegateSupplier, WindowAndroid windowAndroid, - JankTracker jankTracker) { + JankTracker jankTracker, Supplier<Toolbar> toolbarSupplier) { mConstructedTimeNs = System.nanoTime(); TraceEvent.begin(TAG); @@ -319,6 +323,7 @@ mTab = tab; mNewTabPageUma = uma; mJankTracker = jankTracker; + mToolbarSupplier = toolbarSupplier; mMostVisitedTileClickObservers = new ObserverList<>(); Profile profile = Profile.fromWebContents(mTab.getWebContents()); @@ -461,7 +466,7 @@ /* isPlaceholderShownInitially= */ false, bottomSheetController, shareDelegateSupplier, /* externalScrollableContainerDelegate= */ null, NewTabPageUtils.decodeOriginFromNtpUrl(url), - PrivacyPreferencesManagerImpl.getInstance(), + PrivacyPreferencesManagerImpl.getInstance(), mToolbarSupplier, new FeedLaunchReliabilityLoggingState(SurfaceType.NEW_TAB_PAGE, mConstructedTimeNs), FeedSwipeRefreshLayout.create(activity));
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/quickactionsearchwidget/QuickActionSearchWidgetProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/quickactionsearchwidget/QuickActionSearchWidgetProvider.java index e3c98c4..46d475b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/quickactionsearchwidget/QuickActionSearchWidgetProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/quickactionsearchwidget/QuickActionSearchWidgetProvider.java
@@ -14,6 +14,7 @@ import org.chromium.base.ContextUtils; import org.chromium.base.ThreadUtils; +import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.ui.quickactionsearchwidget.QuickActionSearchWidgetProviderDelegate; import org.chromium.chrome.browser.ui.quickactionsearchwidget.QuickActionSearchWidgetType; @@ -82,8 +83,9 @@ ComponentName widgetReceiverComponent = new ComponentName(context, QuickActionSearchWidgetReceiver.class); - mDelegate = new QuickActionSearchWidgetProviderDelegate( - widgetType, widgetReceiverComponent); + mDelegate = new QuickActionSearchWidgetProviderDelegate(widgetType, + widgetReceiverComponent, + IntentHandler.createTrustedOpenNewTabIntent(context, /*incognito=*/true)); } return mDelegate; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java b/chrome/android/java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java index d357a97..e322827 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java
@@ -46,7 +46,6 @@ import org.chromium.components.messages.MessageBannerProperties; import org.chromium.components.messages.MessageDispatcher; import org.chromium.components.messages.MessageIdentifier; -import org.chromium.components.messages.MessageScopeType; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.url.GURL; @@ -254,8 +253,7 @@ this::recordSurveyPromptMetrics) .build(); - mMessageDispatcher.enqueueMessage( - message, tab.getWebContents(), MessageScopeType.WINDOW, false); + mMessageDispatcher.enqueueWindowScopedMessage(message, false); } else { InfoBarContainer.get(tab).addAnimationListener(this);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java index d5ed0fd3..5f782070 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
@@ -463,6 +463,7 @@ case TabLaunchType.FROM_STARTUP: case TabLaunchType.FROM_LAUNCHER_SHORTCUT: case TabLaunchType.FROM_LAUNCH_NEW_INCOGNITO_TAB: + case TabLaunchType.FROM_APP_WIDGET: transition = PageTransition.AUTO_TOPLEVEL; break; case TabLaunchType.FROM_LONGPRESS_FOREGROUND:
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/TasksUma.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/TasksUma.java index 7096fc7..94556dae 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/TasksUma.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/TasksUma.java
@@ -76,7 +76,8 @@ if (tabLaunchType == TabLaunchType.FROM_CHROME_UI || tabLaunchType == TabLaunchType.FROM_START_SURFACE || tabLaunchType == TabLaunchType.FROM_LONGPRESS_BACKGROUND - || tabLaunchType == TabLaunchType.FROM_LAUNCHER_SHORTCUT) { + || tabLaunchType == TabLaunchType.FROM_LAUNCHER_SHORTCUT + || tabLaunchType == TabLaunchType.FROM_APP_WIDGET) { manuallyCreatedCount++; } else if (tabLaunchType == TabLaunchType.FROM_LONGPRESS_FOREGROUND) { targetBlankCreatedCount++;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java index b927bc6..b17b4f1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -515,7 +515,7 @@ mMessageDispatcher = MessagesFactory.createMessageDispatcher(container, mMessageContainerCoordinator::getMessageMaxTranslation, new ChromeMessageAutodismissDurationProvider(), - mWindowAndroid::startAnimationOverContent); + mWindowAndroid::startAnimationOverContent, mActivity.getWindowAndroid()); mMessageQueueMediator = new ChromeMessageQueueMediator(mBrowserControlsManager, mMessageContainerCoordinator, mActivityTabProvider, mLayoutStateProviderOneShotSupplier, mActivity.getModalDialogManagerSupplier(),
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBaseTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBaseTest.java index 5c562f8..49777ae 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBaseTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBaseTest.java
@@ -9,6 +9,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; +import androidx.test.filters.LargeTest; import androidx.test.filters.MediumTest; import org.junit.After; @@ -281,7 +282,7 @@ * Tests that a panel is only maximized when desired height is far above the max. */ @Test - @MediumTest + @LargeTest @Feature({"OverlayPanelBase"}) @UiThreadTest public void testLargeDesiredHeightIsMaximized() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelManagerTest.java index 8588740..73d5211 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelManagerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelManagerTest.java
@@ -9,6 +9,7 @@ import android.view.ViewGroup; import android.widget.LinearLayout; +import androidx.test.filters.LargeTest; import androidx.test.filters.MediumTest; import org.junit.After; @@ -180,7 +181,7 @@ } @Test - @MediumTest + @LargeTest @Feature({"OverlayPanel"}) @UiThreadTest public void testPanelClosed() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabUmaTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabUmaTest.java index dbff47b..6250df3 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabUmaTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabUmaTest.java
@@ -88,7 +88,8 @@ cta.getModalDialogManagerSupplier(), cta::getSnackbarManager, cta.getBrowserControlsManager(), cta.getActivityTabProvider(), cta.getLifecycleDispatcher(), cta.getWindowAndroid(), - cta::getLastUserInteractionTime, cta::hadWarmStart, new DummyJankTracker()); + cta::getLastUserInteractionTime, cta::hadWarmStart, new DummyJankTracker(), + rootUiCoordinator.getToolbarManager()::getToolbar); // clang-format on }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinatorTest.java index 6542f30..0e590679 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinatorTest.java
@@ -351,6 +351,8 @@ null, mSectionHeaderView, false, new TestSurfaceDelegate(), mPageNavigationDelegate, mProfileMock, false, mBottomSheetController, mShareDelegateSupplier, null, NewTabPageLaunchOrigin.UNKNOWN, mPrivacyPreferencesManager, + () + -> { return null; }, new FeedLaunchReliabilityLoggingState(SURFACE_TYPE, SURFACE_CREATION_TIME_NS), null); }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/native_page/NativePageFactoryTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/native_page/NativePageFactoryTest.java index 4a316bb..3e9a285 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/native_page/NativePageFactoryTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/native_page/NativePageFactoryTest.java
@@ -94,7 +94,7 @@ private static class MockNativePageBuilder extends NativePageFactory.NativePageBuilder { private MockNativePageBuilder() { super(null, null, null, null, null, null, null, null, null, null, null, - new DummyJankTracker()); + new DummyJankTracker(), null); } @Override @@ -121,7 +121,7 @@ @Before public void setUp() { mNativePageFactory = new NativePageFactory(null, null, null, null, null, null, null, null, - null, null, null, null, new DummyJankTracker()); + null, null, null, null, new DummyJankTracker(), null); mNativePageFactory.setNativePageBuilderForTesting(new MockNativePageBuilder()); }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/survey/ChromeSurveyControllerFlowTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/survey/ChromeSurveyControllerFlowTest.java index eb2020a..6b39dca 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/survey/ChromeSurveyControllerFlowTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/survey/ChromeSurveyControllerFlowTest.java
@@ -57,7 +57,6 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver; import org.chromium.components.messages.MessageDispatcher; -import org.chromium.components.messages.MessageScopeType; import org.chromium.content_public.browser.WebContents; import java.util.HashMap; @@ -349,8 +348,7 @@ Assert.assertNotNull(mMessageDispatcher); mTestSurveyController.onDownloadSuccessRunnable.run(); assertSurveyInfoBarShown(false); - verify(mMessageDispatcher) - .enqueueMessage(any(), eq(mMockWebContent), eq(MessageScopeType.WINDOW), eq(false)); + verify(mMessageDispatcher).enqueueWindowScopedMessage(any(), eq(false)); } @Test
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 59902b4..1a6051c0 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -7264,6 +7264,9 @@ <message name="IDS_TAB_SEARCH_TAB_COUNT" desc="Plural form of a message indicating the presence of a number of tabs greater than one."> <ph name="NUM">$1<ex>2</ex></ph> Tabs </message> + <message name="IDS_TAB_SEARCH_EXPAND_RECENTLY_CLOSED_ENTRIES" desc="The label for the button that toggles showing the recently closed entries list section."> + Toggle Recently Closed Entries + </message> <!-- Strings for Window Titles in Menus --> <if expr="not use_titlecase"> @@ -7839,6 +7842,9 @@ <message name="IDS_SHARING_HUB_SHARE_LABEL" desc="The Label for the Third Party Targets in the Sharing Hub dialog."> Share link to </message> + <message name="IDS_SHARING_HUB_SHARE_LABEL_ACCESSIBILITY" desc="The acccessibility label spoken by screen readers when the label for a Third Party Sharing Target gets focus but not visually rendered."> + Share link to <ph name="SHARE_TARGET">$1<ex>Facebook</ex></ph> + </message> <!-- Desktop screenshot --> <message name="IDS_BROWSER_SHARING_SCREENSHOT_POST_CAPTURE_TITLE"
diff --git a/chrome/app/generated_resources_grd/IDS_SHARING_HUB_SHARE_LABEL_ACCESSIBILITY.png.sha1 b/chrome/app/generated_resources_grd/IDS_SHARING_HUB_SHARE_LABEL_ACCESSIBILITY.png.sha1 new file mode 100644 index 0000000..3b6baa7 --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_SHARING_HUB_SHARE_LABEL_ACCESSIBILITY.png.sha1
@@ -0,0 +1 @@ +8f382708069e7656254c8ab0a726277a92bb72a0 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_TAB_SEARCH_EXPAND_RECENTLY_CLOSED_ENTRIES.png.sha1 b/chrome/app/generated_resources_grd/IDS_TAB_SEARCH_EXPAND_RECENTLY_CLOSED_ENTRIES.png.sha1 new file mode 100644 index 0000000..16b89b4b --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_TAB_SEARCH_EXPAND_RECENTLY_CLOSED_ENTRIES.png.sha1
@@ -0,0 +1 @@ +8bfc1266f52f663c0263de37e7b336e97f963b96 \ No newline at end of file
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index dbf5814..db9c9fb8 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -1600,6 +1600,7 @@ {ntp_features::kNtpChromeCartModuleAbandonedCartDiscountParam, "true"}}; const FeatureEntry::FeatureParam kNtpChromeCartModuleAbandonedCartDiscount[] = { {ntp_features::kNtpChromeCartModuleAbandonedCartDiscountParam, "true"}, + {ntp_features::NtpChromeCartModuleAbandonedCartDiscountUseUtmParam, "true"}, {"partner-merchant-pattern", "(electronicexpress.com|zazzle.com|wish.com|homesquare.com)"}}; const FeatureEntry::FeatureParam kNtpChromeCartModuleHeuristicsImprovement[] = { @@ -7717,6 +7718,11 @@ {"enable-drdc", flag_descriptions::kEnableDrDcName, flag_descriptions::kEnableDrDcDescription, kOsAll, FEATURE_VALUE_TYPE(features::kEnableDrDc)}, + {"autofill-fill-merchant-promo-code-fields", + flag_descriptions::kAutofillFillMerchantPromoCodeFieldsName, + flag_descriptions::kAutofillFillMerchantPromoCodeFieldsDescription, kOsAll, + FEATURE_VALUE_TYPE( + autofill::features::kAutofillFillMerchantPromoCodeFields)}, // NOTE: Adding a new flag requires adding a corresponding entry to enum // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
diff --git a/chrome/browser/android/cookies/cookies_fetcher_util.cc b/chrome/browser/android/cookies/cookies_fetcher_util.cc index 9437a37..2a0b94b 100644 --- a/chrome/browser/android/cookies/cookies_fetcher_util.cc +++ b/chrome/browser/android/cookies/cookies_fetcher_util.cc
@@ -13,6 +13,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/content_switches.h" +#include "net/cookies/cookie_partition_key.h" #include "net/cookies/cookie_util.h" #include "services/network/public/mojom/cookie_manager.mojom.h" @@ -41,8 +42,8 @@ int index = 0; for (auto i = cookies.cbegin(); i != cookies.cend(); ++i) { - std::string pk = net::kEmptyCookiePartitionKey; - if (!i->SerializePartitionKey(pk)) + std::string pk; + if (!net::CookiePartitionKey::Serialize(i->PartitionKey(), pk)) continue; ScopedJavaLocalRef<jobject> java_cookie = Java_CookiesFetcher_createCookie( env, base::android::ConvertUTF8ToJavaString(env, i->Name()), @@ -104,8 +105,8 @@ std::string domain_str(base::android::ConvertJavaStringToUTF8(env, domain)); std::string path_str(base::android::ConvertJavaStringToUTF8(env, path)); - absl::optional<net::SchemefulSite> pk; - if (!net::CanonicalCookie::DeserializePartitionKey( + absl::optional<net::CookiePartitionKey> pk; + if (!net::CookiePartitionKey::Deserialize( base::android::ConvertJavaStringToUTF8(env, partition_key), pk)) { return; }
diff --git a/chrome/browser/android/send_tab_to_self/android_notification_handler.cc b/chrome/browser/android/send_tab_to_self/android_notification_handler.cc index 88d1bb5..882d9a2 100644 --- a/chrome/browser/android/send_tab_to_self/android_notification_handler.cc +++ b/chrome/browser/android/send_tab_to_self/android_notification_handler.cc
@@ -59,6 +59,10 @@ const std::vector<const SendTabToSelfEntry*>& new_entries) { for (const SendTabToSelfEntry* entry : new_entries) { if (base::FeatureList::IsEnabled(send_tab_to_self::kSendTabToSelfV2)) { + // Only enqueue a single message at a time. + if (message_ != nullptr) + return; + content::WebContents* web_contents = GetWebContentsForProfile(profile_); message_ = std::make_unique<messages::MessageWrapper>( @@ -80,8 +84,8 @@ ResourceMapper::MapToJavaDrawableId(IDR_SEND_TAB_TO_SELF)); // TODO(crbug.com/1220129): A valid WebContents shouldn't be needed here. - messages::MessageDispatcherBridge::Get()->EnqueueMessage( - message_.get(), web_contents, messages::MessageScopeType::WINDOW, + messages::MessageDispatcherBridge::Get()->EnqueueWindowScopedMessage( + message_.get(), web_contents->GetTopLevelNativeWindow(), messages::MessagePriority::kNormal); } else { JNIEnv* env = AttachCurrentThread(); @@ -121,6 +125,7 @@ ui::PAGE_TRANSITION_AUTO_TOPLEVEL, false); params.should_replace_current_entry = false; GetWebContentsForProfile(profile_)->OpenURL(params); + message_.reset(); } void AndroidNotificationHandler::OnMessageDismissed(
diff --git a/chrome/browser/ash/child_accounts/family_user_parental_control_metrics_unittest.cc b/chrome/browser/ash/child_accounts/family_user_parental_control_metrics_unittest.cc index 7ba2e0b..d175c9a 100644 --- a/chrome/browser/ash/child_accounts/family_user_parental_control_metrics_unittest.cc +++ b/chrome/browser/ash/child_accounts/family_user_parental_control_metrics_unittest.cc
@@ -375,6 +375,12 @@ /*sample=*/ SupervisedUserURLFilter::ManagedSiteList::kEmpty, /*expected_count=*/1); + histogram_tester_.ExpectUniqueSample( + SupervisedUserURLFilter::GetApprovedSitesCountHistogramNameForTest(), + /*sample=*/0, /*expected_count=*/1); + histogram_tester_.ExpectUniqueSample( + SupervisedUserURLFilter::GetBlockedSitesCountHistogramNameForTest(), + /*sample=*/0, /*expected_count=*/1); // Blocks `kExampleHost0`. { @@ -389,6 +395,12 @@ /*sample=*/ SupervisedUserURLFilter::ManagedSiteList::kBlockedListOnly, /*expected_count=*/1); + histogram_tester_.ExpectBucketCount( + SupervisedUserURLFilter::GetApprovedSitesCountHistogramNameForTest(), + /*sample=*/0, /*expected_count=*/2); + histogram_tester_.ExpectBucketCount( + SupervisedUserURLFilter::GetBlockedSitesCountHistogramNameForTest(), + /*sample=*/1, /*expected_count=*/1); // Approves `kExampleHost0`. { @@ -403,6 +415,12 @@ /*sample=*/ SupervisedUserURLFilter::ManagedSiteList::kApprovedListOnly, /*expected_count=*/1); + histogram_tester_.ExpectBucketCount( + SupervisedUserURLFilter::GetApprovedSitesCountHistogramNameForTest(), + /*sample=*/1, /*expected_count=*/1); + histogram_tester_.ExpectBucketCount( + SupervisedUserURLFilter::GetBlockedSitesCountHistogramNameForTest(), + /*sample=*/0, /*expected_count=*/2); // Blocks `kExampleURL1`. { @@ -417,10 +435,22 @@ /*sample=*/ SupervisedUserURLFilter::ManagedSiteList::kBoth, /*expected_count=*/1); + histogram_tester_.ExpectBucketCount( + SupervisedUserURLFilter::GetApprovedSitesCountHistogramNameForTest(), + /*sample=*/1, /*expected_count=*/2); + histogram_tester_.ExpectBucketCount( + SupervisedUserURLFilter::GetBlockedSitesCountHistogramNameForTest(), + /*sample=*/1, /*expected_count=*/2); histogram_tester_.ExpectTotalCount( SupervisedUserURLFilter::GetManagedSiteListHistogramNameForTest(), /*expected_count=*/4); + histogram_tester_.ExpectTotalCount( + SupervisedUserURLFilter::GetApprovedSitesCountHistogramNameForTest(), + /*expected_count=*/4); + histogram_tester_.ExpectTotalCount( + SupervisedUserURLFilter::GetBlockedSitesCountHistogramNameForTest(), + /*expected_count=*/4); } } // namespace ash
diff --git a/chrome/browser/ash/crosapi/browser_manager.cc b/chrome/browser/ash/crosapi/browser_manager.cc index 401f298..f8fc0e5 100644 --- a/chrome/browser/ash/crosapi/browser_manager.cc +++ b/chrome/browser/ash/crosapi/browser_manager.cc
@@ -783,8 +783,10 @@ std::move(load_complete_callback_).Run(success); } - if (state_ == State::STOPPED && GetLaunchOnLoginPref()) + if (state_ == State::STOPPED && + (browser_util::IsLacrosPrimaryBrowser() || GetLaunchOnLoginPref())) { Start(mojom::InitialBrowserAction::kUseStartupPreference); + } } void BrowserManager::PrepareLacrosPolicies() {
diff --git a/chrome/browser/ash/crosapi/download_controller_ash.cc b/chrome/browser/ash/crosapi/download_controller_ash.cc index 2b9a598..0212e638 100644 --- a/chrome/browser/ash/crosapi/download_controller_ash.cc +++ b/chrome/browser/ash/crosapi/download_controller_ash.cc
@@ -20,21 +20,21 @@ } void DownloadControllerAsh::OnDownloadCreated( - crosapi::mojom::DownloadEventPtr event) { + crosapi::mojom::DownloadItemPtr download) { for (auto& observer : observers_) - observer.OnLacrosDownloadCreated(*event); + observer.OnLacrosDownloadCreated(*download); } void DownloadControllerAsh::OnDownloadUpdated( - crosapi::mojom::DownloadEventPtr event) { + crosapi::mojom::DownloadItemPtr download) { for (auto& observer : observers_) - observer.OnLacrosDownloadUpdated(*event); + observer.OnLacrosDownloadUpdated(*download); } void DownloadControllerAsh::OnDownloadDestroyed( - crosapi::mojom::DownloadEventPtr event) { + crosapi::mojom::DownloadItemPtr download) { for (auto& observer : observers_) - observer.OnLacrosDownloadDestroyed(*event); + observer.OnLacrosDownloadDestroyed(*download); } void DownloadControllerAsh::AddObserver(DownloadControllerObserver* observer) {
diff --git a/chrome/browser/ash/crosapi/download_controller_ash.h b/chrome/browser/ash/crosapi/download_controller_ash.h index b128a74..506885d 100644 --- a/chrome/browser/ash/crosapi/download_controller_ash.h +++ b/chrome/browser/ash/crosapi/download_controller_ash.h
@@ -23,9 +23,9 @@ // Allows ash classes to observe download events. class DownloadControllerObserver : public base::CheckedObserver { public: - virtual void OnLacrosDownloadCreated(const mojom::DownloadEvent& event) {} - virtual void OnLacrosDownloadUpdated(const mojom::DownloadEvent& event) {} - virtual void OnLacrosDownloadDestroyed(const mojom::DownloadEvent& event) {} + virtual void OnLacrosDownloadCreated(const mojom::DownloadItem&) {} + virtual void OnLacrosDownloadUpdated(const mojom::DownloadItem&) {} + virtual void OnLacrosDownloadDestroyed(const mojom::DownloadItem&) {} }; DownloadControllerAsh(); @@ -40,9 +40,9 @@ // mojom::DownloadController: void BindClient( mojo::PendingRemote<mojom::DownloadControllerClient> client) override; - void OnDownloadCreated(mojom::DownloadEventPtr event) override; - void OnDownloadUpdated(mojom::DownloadEventPtr event) override; - void OnDownloadDestroyed(mojom::DownloadEventPtr event) override; + void OnDownloadCreated(mojom::DownloadItemPtr download) override; + void OnDownloadUpdated(mojom::DownloadItemPtr download) override; + void OnDownloadDestroyed(mojom::DownloadItemPtr download) override; // Required for the below `base::ObserverList`: void AddObserver(DownloadControllerObserver* observer);
diff --git a/chrome/browser/ash/file_manager/file_tasks_browsertest.cc b/chrome/browser/ash/file_manager/file_tasks_browsertest.cc index b19c3fa..5cc0bbc 100644 --- a/chrome/browser/ash/file_manager/file_tasks_browsertest.cc +++ b/chrome/browser/ash/file_manager/file_tasks_browsertest.cc
@@ -341,7 +341,7 @@ // The Media App will be preferred over a chrome app with a specific extension, // unless that app is set default via prefs. IN_PROC_BROWSER_TEST_P(FileTasksBrowserTest, MediaAppPreferredOverChromeApps) { - if (GetParam() == TestProfileType::kGuest) { + if (profile_type() == TestProfileType::kGuest) { // The provided file system can't install in guest mode. Just check that // MediaApp handles tiff. TestExpectationsAgainstDefaultTasks({{"tiff", kMediaAppId}}); @@ -355,7 +355,7 @@ profile->GetPrefs(), TaskDescriptor(extension->id(), StringToTaskType("app"), "tiffAction"), {"tiff"}, {"image/tiff"}); - if (GetParam() == TestProfileType::kIncognito) { + if (profile_type() == TestProfileType::kIncognito) { // In incognito, the provided file system can exist, but the file handler // preference can't be changed. TestExpectationsAgainstDefaultTasks({{"tiff", kMediaAppId}}); @@ -366,7 +366,7 @@ // Test expectations for files coming from provided file systems. IN_PROC_BROWSER_TEST_P(FileTasksBrowserTest, ProvidedFileSystemFileSource) { - if (GetParam() == TestProfileType::kGuest) { + if (profile_type() == TestProfileType::kGuest) { // Provided file systems don't exist in guest. This test seems to work OK in // incognito mode though. return; @@ -415,19 +415,11 @@ EXPECT_EQ(remaining_expectations, 0); } -INSTANTIATE_TEST_SUITE_P(All, - FileTasksBrowserTest, - ::testing::Values(TestProfileType::kRegular, - TestProfileType::kIncognito, - TestProfileType::kGuest), - TestProfileTypeToString); +INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_ALL_PROFILE_TYPES_P( + FileTasksBrowserTest); -INSTANTIATE_TEST_SUITE_P(All, - FileTasksBrowserTestWithPdf, - ::testing::Values(TestProfileType::kRegular, - TestProfileType::kIncognito, - TestProfileType::kGuest), - TestProfileTypeToString); +INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_ALL_PROFILE_TYPES_P( + FileTasksBrowserTestWithPdf); } // namespace file_tasks } // namespace file_manager
diff --git a/chrome/browser/ash/full_restore/full_restore_app_launch_handler_browsertest.cc b/chrome/browser/ash/full_restore/full_restore_app_launch_handler_browsertest.cc index ea2bd5c..429072ba 100644 --- a/chrome/browser/ash/full_restore/full_restore_app_launch_handler_browsertest.cc +++ b/chrome/browser/ash/full_restore/full_restore_app_launch_handler_browsertest.cc
@@ -15,6 +15,7 @@ #include "ash/shell.h" #include "ash/wm/window_state.h" #include "ash/wm/wm_event.h" +#include "base/feature_list.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "base/timer/timer.h" @@ -24,6 +25,7 @@ #include "chrome/browser/apps/platform_apps/app_browsertest_util.h" #include "chrome/browser/ash/arc/arc_util.h" #include "chrome/browser/ash/arc/session/arc_session_manager.h" +#include "chrome/browser/ash/crosapi/browser_util.h" #include "chrome/browser/ash/full_restore/arc_app_launch_handler.h" #include "chrome/browser/ash/full_restore/full_restore_arc_task_handler.h" #include "chrome/browser/ash/full_restore/full_restore_service.h" @@ -40,6 +42,7 @@ #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" +#include "chrome/common/chrome_features.h" #include "chrome/test/base/in_process_browser_test.h" #include "components/arc/arc_service_manager.h" #include "components/arc/mojom/app.mojom.h" @@ -2325,16 +2328,22 @@ } void ModifyAppReadiness(apps::mojom::Readiness readiness) { + apps::mojom::AppType app_type = apps::mojom::AppType::kWeb; + if (crosapi::browser_util::IsLacrosEnabled() && + base::FeatureList::IsEnabled(features::kWebAppsCrosapi)) { + app_type = apps::mojom::AppType::kSystemWeb; + } + auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile()); std::vector<apps::mojom::AppPtr> deltas; apps::AppRegistryCache& cache = proxy->AppRegistryCache(); apps::mojom::AppPtr app = apps::mojom::App::New(); app->app_id = *GetManager().GetAppIdForSystemApp(web_app::SystemAppType::HELP); - app->app_type = apps::mojom::AppType::kWeb; + app->app_type = app_type; app->readiness = readiness; deltas.push_back(std::move(app)); - cache.OnApps(std::move(deltas), apps::mojom::AppType::kWeb, + cache.OnApps(std::move(deltas), app_type, false /* should_notify_initialized */); }
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc index be44fe6..ddade7e 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -1438,8 +1438,16 @@ EXPECT_TRUE(tester.HistoryContainsURL(kOrigin2)); } +// TODO(crbug.com/1234803): Crashes on linux-ubsan-vptr +#if defined(UNDEFINED_SANITIZER) +#define MAYBE_RemoveMultipleTypesHistoryProhibited \ + DISABLED_RemoveMultipleTypesHistoryProhibited +#else +#define MAYBE_RemoveMultipleTypesHistoryProhibited \ + RemoveMultipleTypesHistoryProhibited +#endif TEST_F(ChromeBrowsingDataRemoverDelegateTest, - RemoveMultipleTypesHistoryProhibited) { + MAYBE_RemoveMultipleTypesHistoryProhibited) { PrefService* prefs = GetProfile()->GetPrefs(); prefs->SetBoolean(prefs::kAllowDeletingBrowserHistory, false); @@ -1994,7 +2002,13 @@ content::BrowsingDataRemover::DATA_TYPE_DOWNLOADS, false); } -TEST_F(ChromeBrowsingDataRemoverDelegateTest, RemovePasswordStatistics) { +// TODO(crbug.com/1234803): Crashes on linux-ubsan-vptr +#if defined(UNDEFINED_SANITIZER) +#define MAYBE_RemovePasswordStatistics DISABLED_RemovePasswordStatistics +#else +#define MAYBE_RemovePasswordStatistics RemovePasswordStatistics +#endif +TEST_F(ChromeBrowsingDataRemoverDelegateTest, MAYBE_RemovePasswordStatistics) { RemovePasswordsTester tester(GetProfile()); base::RepeatingCallback<bool(const GURL&)> empty_filter; @@ -2047,7 +2061,13 @@ constants::DATA_TYPE_HISTORY, std::move(builder)); } -TEST_F(ChromeBrowsingDataRemoverDelegateTest, RemovePasswordsByTimeOnly) { +// TODO(crbug.com/1234803): Crashes on linux-ubsan-vptr +#if defined(UNDEFINED_SANITIZER) +#define MAYBE_RemovePasswordsByTimeOnly DISABLED_RemovePasswordsByTimeOnly +#else +#define MAYBE_RemovePasswordsByTimeOnly RemovePasswordsByTimeOnly +#endif +TEST_F(ChromeBrowsingDataRemoverDelegateTest, MAYBE_RemovePasswordsByTimeOnly) { RemovePasswordsTester tester(GetProfile()); ExpectRemoveLoginsByURLAndTime(tester.profile_store()); @@ -2072,6 +2092,12 @@ std::move(builder)); } +// TODO(crbug.com/1234803): Crashes on linux-ubsan-vptr +#if defined(UNDEFINED_SANITIZER) +#define MAYBE_DisableAutoSignIn DISABLED_DisableAutoSignIn +#else +#define MAYBE_DisableAutoSignIn DisableAutoSignIn +#endif TEST_F(ChromeBrowsingDataRemoverDelegateTest, DisableAutoSignIn) { RemovePasswordsTester tester(GetProfile()); base::RepeatingCallback<bool(const GURL&)> empty_filter = @@ -2089,8 +2115,16 @@ false); } +// TODO(crbug.com/1234803): Crashes on linux-ubsan-vptr +#if defined(UNDEFINED_SANITIZER) +#define MAYBE_DisableAutoSignInAfterRemovingPasswords \ + DISABLED_DisableAutoSignInAfterRemovingPasswords +#else +#define MAYBE_DisableAutoSignInAfterRemovingPasswords \ + DisableAutoSignInAfterRemovingPasswords +#endif TEST_F(ChromeBrowsingDataRemoverDelegateTest, - DisableAutoSignInAfterRemovingPasswords) { + MAYBE_DisableAutoSignInAfterRemovingPasswords) { RemovePasswordsTester tester(GetProfile()); base::RepeatingCallback<bool(const GURL&)> empty_filter = BrowsingDataFilterBuilder::BuildNoopFilter(); @@ -3135,8 +3169,16 @@ } }; +// TODO(crbug.com/1234803): Crashes on linux-ubsan-vptr +#if defined(UNDEFINED_SANITIZER) +#define MAYBE_RemovePasswordsByTimeOnly_WithAccountStore \ + DISABLED_RemovePasswordsByTimeOnly_WithAccountStore +#else +#define MAYBE_RemovePasswordsByTimeOnly_WithAccountStore \ + RemovePasswordsByTimeOnly_WithAccountStore +#endif TEST_F(ChromeBrowsingDataRemoverDelegateEnabledPasswordsTest, - RemovePasswordsByTimeOnly_WithAccountStore) { + MAYBE_RemovePasswordsByTimeOnly_WithAccountStore) { RemovePasswordsTester tester(GetProfile()); ExpectRemoveLoginsByURLAndTime(tester.profile_store()); @@ -3147,8 +3189,16 @@ constants::DATA_TYPE_PASSWORDS, false); } +// TODO(crbug.com/1234803): Crashes on linux-ubsan-vptr +#if defined(UNDEFINED_SANITIZER) +#define MAYBE_RemoveAccountPasswordsByTimeOnly_WithAccountStore \ + DISABLED_RemoveAccountPasswordsByTimeOnly_WithAccountStore +#else +#define MAYBE_RemoveAccountPasswordsByTimeOnly_WithAccountStore \ + RemoveAccountPasswordsByTimeOnly_WithAccountStore +#endif TEST_F(ChromeBrowsingDataRemoverDelegateEnabledPasswordsTest, - RemoveAccountPasswordsByTimeOnly_WithAccountStore) { + MAYBE_RemoveAccountPasswordsByTimeOnly_WithAccountStore) { RemovePasswordsTester tester(GetProfile()); EXPECT_CALL(*tester.profile_store(), RemoveLoginsByURLAndTime).Times(0); @@ -3158,8 +3208,16 @@ constants::DATA_TYPE_ACCOUNT_PASSWORDS, false); } +// TODO(crbug.com/1234803): Crashes on linux-ubsan-vptr +#if defined(UNDEFINED_SANITIZER) +#define MAYBE_RemoveAccountPasswordsByTimeOnly_WithAccountStore_Failure \ + DISABLED_RemoveAccountPasswordsByTimeOnly_WithAccountStore_Failure +#else +#define MAYBE_RemoveAccountPasswordsByTimeOnly_WithAccountStore_Failure \ + RemoveAccountPasswordsByTimeOnly_WithAccountStore_Failure +#endif TEST_F(ChromeBrowsingDataRemoverDelegateEnabledPasswordsTest, - RemoveAccountPasswordsByTimeOnly_WithAccountStore_Failure) { + MAYBE_RemoveAccountPasswordsByTimeOnly_WithAccountStore_Failure) { RemovePasswordsTester tester(GetProfile()); EXPECT_CALL(*tester.profile_store(), RemoveLoginsByURLAndTime).Times(0);
diff --git a/chrome/browser/chrome_content_browser_client_receiver_bindings.cc b/chrome/browser/chrome_content_browser_client_receiver_bindings.cc index 7a67afe..dbaf599 100644 --- a/chrome/browser/chrome_content_browser_client_receiver_bindings.cc +++ b/chrome/browser/chrome_content_browser_client_receiver_bindings.cc
@@ -396,6 +396,15 @@ render_frame_host); return true; } +#if BUILDFLAG(ENABLE_EXTENSIONS) + if (interface_name == extensions::mojom::LocalFrameHost::Name_) { + extensions::ExtensionWebContentsObserver::BindLocalFrameHost( + mojo::PendingAssociatedReceiver<extensions::mojom::LocalFrameHost>( + std::move(*handle)), + render_frame_host); + return true; + } +#endif if (interface_name == lite_video::mojom::LiteVideoService::Name_) { LiteVideoObserver::BindLiteVideoService( mojo::PendingAssociatedReceiver<lite_video::mojom::LiteVideoService>(
diff --git a/chrome/browser/chromeos/eche_app/eche_app_manager_factory.cc b/chrome/browser/chromeos/eche_app/eche_app_manager_factory.cc index b30569a..9eaa736b 100644 --- a/chrome/browser/chromeos/eche_app/eche_app_manager_factory.cc +++ b/chrome/browser/chromeos/eche_app/eche_app_manager_factory.cc
@@ -86,10 +86,9 @@ params); } -// TODO(b/195070217): Convert |package_name| to const reference type. void LaunchEcheApp(Profile* profile, int64_t notification_id, - std::string package_name) { + const std::string& package_name) { LaunchSystemWebApp(profile, package_name, notification_id); base::UmaHistogramEnumeration("Eche.NotificationClicked", NotificationInteraction::kOpenAppStreaming);
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc index cec6e12..9752c3f4 100644 --- a/chrome/browser/download/download_browsertest.cc +++ b/chrome/browser/download/download_browsertest.cc
@@ -124,6 +124,7 @@ #include "content/public/test/browser_test.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/download_test_observer.h" +#include "content/public/test/prerender_test_util.h" #include "content/public/test/slow_download_http_response.h" #include "content/public/test/test_download_http_response.h" #include "content/public/test/test_file_error_injector.h" @@ -1278,6 +1279,34 @@ network::mojom::ReferrerPolicy::kSameOrigin, network::mojom::ReferrerPolicy::kStrictOrigin)); +class PrerenderDownloadTest : public DownloadTest { + public: + PrerenderDownloadTest() + : prerender_helper_( + base::BindRepeating(&PrerenderDownloadTest::GetWebContents, + base::Unretained(this))) {} + ~PrerenderDownloadTest() override = default; + + void SetUpOnMainThread() override { + DownloadTest::SetUpOnMainThread(); + prerender_helper_.SetUpOnMainThread(embedded_test_server()); + ASSERT_TRUE(test_server_handle_ = + embedded_test_server()->StartAndReturnHandle()); + } + + content::WebContents* GetWebContents() { + return browser()->tab_strip_model()->GetActiveWebContents(); + } + + content::test::PrerenderTestHelper* prerender_helper() { + return &prerender_helper_; + } + + private: + content::test::PrerenderTestHelper prerender_helper_; + net::test_server::EmbeddedTestServerHandle test_server_handle_; +}; + namespace { class FakeDownloadProtectionService @@ -1693,6 +1722,49 @@ EXPECT_TRUE(base::PathExists(file_path2)); } +// Verify that non-active main frame downloads (e.g. prerendering) don't affect +// the DownloadRequestLimiter state of the WebContents. +IN_PROC_BROWSER_TEST_F(PrerenderDownloadTest, + DownloadRequestLimiterIsUnaffectedByPrerendering) { + const GURL kInitialUrl = embedded_test_server()->GetURL("/empty.html"); + const GURL kPrerenderingUrl = + embedded_test_server()->GetURL("/download_script.html"); + + ui_test_utils::NavigateToURL(browser(), kInitialUrl); + + // Check the initial DownloadRequestLimiter state. + auto* web_contents = GetWebContents(); + const DownloadRequestLimiter::TabDownloadState* tab_download_state = + g_browser_process->download_request_limiter()->GetDownloadState( + web_contents, true); + ASSERT_TRUE(tab_download_state); + EXPECT_EQ(tab_download_state->download_status(), + DownloadRequestLimiter::ALLOW_ONE_DOWNLOAD); + + // Create a prerendered page. + int host_id = prerender_helper()->AddPrerender(kPrerenderingUrl); + ASSERT_NE(host_id, content::RenderFrameHost::kNoFrameTreeNodeId); + content::test::PrerenderHostObserver host_observer(*web_contents, host_id); + + // Try to start the download via Javascript in the prerendered page. + ASSERT_EQ(true, content::EvalJs( + prerender_helper()->GetPrerenderedMainFrameHost(host_id), + "startDownload();")); + + // Navigations aren't allowed on prerendered pages. + host_observer.WaitForDestroyed(); + + // Check that the DownloadRequestLimiter state wasn't modified. + const DownloadRequestLimiter::TabDownloadState* new_tab_download_state = + g_browser_process->download_request_limiter()->GetDownloadState( + web_contents, false); + ASSERT_EQ(tab_download_state, new_tab_download_state); + EXPECT_EQ(new_tab_download_state->download_status(), + DownloadRequestLimiter::ALLOW_ONE_DOWNLOAD); + + EXPECT_TRUE(VerifyNoDownloads()); +} + // Download a 0-size file with a content-disposition header, verify that the // download tab opened and the file exists as the filename specified in the // header. This also ensures we properly handle empty file downloads.
diff --git a/chrome/browser/download/download_request_limiter.cc b/chrome/browser/download/download_request_limiter.cc index e10a14e..4de3285 100644 --- a/chrome/browser/download/download_request_limiter.cc +++ b/chrome/browser/download/download_request_limiter.cc
@@ -127,9 +127,6 @@ void DownloadRequestLimiter::TabDownloadState::DidStartNavigation( content::NavigationHandle* navigation_handle) { - // TODO(https://crbug.com/1218946): With MPArch there may be multiple main - // frames. This caller was converted automatically to the primary main frame - // to preserve its semantics. Follow up to confirm correctness. if (!navigation_handle->IsInPrimaryMainFrame()) return; @@ -177,9 +174,6 @@ void DownloadRequestLimiter::TabDownloadState::DidFinishNavigation( content::NavigationHandle* navigation_handle) { - // TODO(https://crbug.com/1218946): With MPArch there may be multiple main - // frames. This caller was converted automatically to the primary main frame - // to preserve its semantics. Follow up to confirm correctness. if (!navigation_handle->IsInPrimaryMainFrame()) return; @@ -241,8 +235,12 @@ permissions::PermissionRequestManager* permission_request_manager = permissions::PermissionRequestManager::FromWebContents(web_contents_); if (permission_request_manager) { - // TODO(https://crbug.com/1061899): We should pass the frame which initiated - // the action instead of assuming that it was the current main frame. + // The RFH is used to scope the lifetime of the request and scoping it to + // the initiator doesn't make sense for downloads as download navigation + // requests are never committed and don't update the omnibox url. + // Download requests should only be granted by checking `request_origin`, + // so we use the primary main RenderFrameHost here, to avoid discarding the + // request in the case that the initiator RFH is already gone. permission_request_manager->AddRequest( web_contents_->GetMainFrame(), new DownloadPermissionRequest(factory_.GetWeakPtr(), request_origin));
diff --git a/chrome/browser/download/download_request_limiter.h b/chrome/browser/download/download_request_limiter.h index 9dfbe476..44999af6 100644 --- a/chrome/browser/download/download_request_limiter.h +++ b/chrome/browser/download/download_request_limiter.h
@@ -260,6 +260,8 @@ FRIEND_TEST_ALL_PREFIXES(ContentSettingBubbleControllerTest, Init); FRIEND_TEST_ALL_PREFIXES(ContentSettingImageModelBrowserTest, CreateBubbleModel); + FRIEND_TEST_ALL_PREFIXES(PrerenderDownloadTest, + DownloadRequestLimiterIsUnaffectedByPrerendering); friend class base::RefCountedThreadSafe<DownloadRequestLimiter>; friend class BackgroundFetchBrowserTest; friend class ContentSettingBubbleDialogTest;
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn index 39c6c89..26d14bbd 100644 --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn
@@ -377,8 +377,6 @@ "api/system_indicator/system_indicator_manager_factory.h", "api/system_private/system_private_api.cc", "api/system_private/system_private_api.h", - "api/tab_capture/offscreen_tabs_owner.cc", - "api/tab_capture/offscreen_tabs_owner.h", "api/tab_capture/tab_capture_api.cc", "api/tab_capture/tab_capture_api.h", "api/tab_capture/tab_capture_registry.cc",
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc index a11fcc5..b3a0471 100644 --- a/chrome/browser/extensions/api/automation/automation_apitest.cc +++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -451,7 +451,13 @@ << message_; } -IN_PROC_BROWSER_TEST_F(AutomationApiTest, DesktopHitTestIframe) { +// TODO(http://crbug.com/1234340): flaky on ChromeOS. +#if defined(OS_CHROMEOS) +#define MAYBE_DesktopHitTestIframe DISABLED_DesktopHitTestIframe +#else +#define MAYBE_DesktopHitTestIframe DesktopHitTestIframe +#endif +IN_PROC_BROWSER_TEST_F(AutomationApiTest, MAYBE_DesktopHitTestIframe) { StartEmbeddedTestServer(); ASSERT_TRUE(RunExtensionTest("automation/tests/desktop", {.page_url = "hit_test_iframe.html"}))
diff --git a/chrome/browser/extensions/api/storage/settings_apitest.cc b/chrome/browser/extensions/api/storage/settings_apitest.cc index d463a16f..b445271 100644 --- a/chrome/browser/extensions/api/storage/settings_apitest.cc +++ b/chrome/browser/extensions/api/storage/settings_apitest.cc
@@ -344,9 +344,13 @@ // TODO(crbug.com/1185226): Change parent class to `ExtensionSettingsApiTest` // when chrome.storage.session is released in stable. -// Flaky across multiple platforms: https://crbug.com/1216449. +// TODO(crbug.com/1229351): Service worker extension listener should receive an +// event before the callback is made. Current workaround: wait for the event to +// be received by the extension before checking for it. Potential solution: once +// browser-side observation of SW lifetime work is finished, check if it fixes +// this test. IN_PROC_BROWSER_TEST_F(ExtensionSettingsTrunkApiTest, - DISABLED_OnChangedNotificationsBetweenBackgroundPages) { + OnChangedNotificationsBetweenBackgroundPages) { // We need 2 ResultCatchers because we'll be running the same test in both // regular and incognito mode. ResultCatcher catcher; @@ -357,24 +361,37 @@ StorageAreaNamespace storage_areas[2] = {StorageAreaNamespace::kSync, StorageAreaNamespace::kSession}; - LoadAndReplyWhenSatisfied(StorageAreaNamespace::kSync, - "assertNoNotifications", "assertNoNotifications", - "split_incognito"); + for (const StorageAreaNamespace& storage_area : storage_areas) { - ReplyWhenSatisfied(storage_area, "assertNoNotifications", - "assertNoNotifications"); + // We need to load the extension when it's the first reply. + // kSync is the first storage area to run. + if (storage_area == StorageAreaNamespace::kSync) { + LoadAndReplyWhenSatisfied(StorageAreaNamespace::kSync, + "assertNoNotifications", + "assertNoNotifications", "split_incognito"); + } else { + ReplyWhenSatisfied(storage_area, "assertNoNotifications", + "assertNoNotifications"); + } + ReplyWhenSatisfied(storage_area, "noop", "setFoo"); ReplyWhenSatisfied(storage_area, "assertAddFooNotification", "assertAddFooNotification"); ReplyWhenSatisfied(storage_area, "clearNotifications", "clearNotifications"); ReplyWhenSatisfied(storage_area, "removeFoo", "noop"); - ReplyWhenSatisfied(storage_area, "assertDeleteFooNotification", - "assertDeleteFooNotification"); + + // We need to end the test with a final reply when it's the last reply. + // kSession is the last storage area to run. + if (storage_area == StorageAreaNamespace::kSession) { + FinalReplyWhenSatisfied(StorageAreaNamespace::kSession, + "assertDeleteFooNotification", + "assertDeleteFooNotification"); + } else { + ReplyWhenSatisfied(storage_area, "assertDeleteFooNotification", + "assertDeleteFooNotification"); + } } - FinalReplyWhenSatisfied(StorageAreaNamespace::kSession, - "assertDeleteFooNotification", - "assertDeleteFooNotification"); EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); EXPECT_TRUE(catcher_incognito.GetNextResult()) << catcher.message(); @@ -490,9 +507,13 @@ EXPECT_TRUE(catcher_incognito.GetNextResult()) << catcher.message(); } -// https://crbug.com/1216450: Flaky on multiple platforms. +// TODO(crbug.com/1229351): Service worker extension listener should receive an +// event before the callback is made. Current workaround: wait for the event to +// be received by the extension before checking for it. Potential solution: once +// browser-side observation of SW lifetime work is finished, check if it fixes +// this test. IN_PROC_BROWSER_TEST_F(ExtensionSettingsApiTest, - DISABLED_OnChangedNotificationsFromSync) { + OnChangedNotificationsFromSync) { // We need 2 ResultCatchers because we'll be running the same test in both // regular and incognito mode. ResultCatcher catcher, catcher_incognito;
diff --git a/chrome/browser/extensions/api/tab_capture/offscreen_tabs_owner.cc b/chrome/browser/extensions/api/tab_capture/offscreen_tabs_owner.cc deleted file mode 100644 index 4b60389..0000000 --- a/chrome/browser/extensions/api/tab_capture/offscreen_tabs_owner.cc +++ /dev/null
@@ -1,119 +0,0 @@ -// Copyright 2015 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/tab_capture/offscreen_tabs_owner.h" - -#include <algorithm> -#include <utility> -#include <vector> - -#include "base/bind.h" -#include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" -#include "chrome/browser/profiles/profile.h" -#include "content/public/browser/web_contents.h" -#include "extensions/browser/extension_host.h" -#include "extensions/browser/process_manager.h" -#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h" - -using content::WebContents; - -namespace { - -// Upper limit on the number of simultaneous off-screen tabs per extension -// instance. -const int kMaxOffscreenTabsPerExtension = 4; - -} // namespace - -namespace extensions { - -OffscreenTabsOwner::OffscreenTabsOwner(WebContents* extension_web_contents) - : extension_web_contents_(extension_web_contents) { - DCHECK(extension_web_contents_); -} - -OffscreenTabsOwner::~OffscreenTabsOwner() {} - -// static -OffscreenTabsOwner* OffscreenTabsOwner::Get( - content::WebContents* extension_web_contents) { - // CreateForWebContents() really means "create if not exists." - CreateForWebContents(extension_web_contents); - return FromWebContents(extension_web_contents); -} - -OffscreenTab* OffscreenTabsOwner::OpenNewTab( - const GURL& start_url, - const gfx::Size& initial_size, - const std::string& optional_presentation_id) { - if (tabs_.size() >= kMaxOffscreenTabsPerExtension) - return nullptr; // Maximum number of offscreen tabs reached. - - tabs_.emplace_back(std::make_unique<OffscreenTab>( - this, extension_web_contents_->GetBrowserContext())); - tabs_.back()->Start(start_url, initial_size, optional_presentation_id); - return tabs_.back().get(); -} - -void OffscreenTabsOwner::RequestMediaAccessPermission( - const content::MediaStreamRequest& request, - content::MediaResponseCallback callback) { - // This method is being called to check whether an extension is permitted to - // capture the page. Verify that the request is being made by the extension - // that spawned this OffscreenTab. - - // Find the extension ID associated with the extension background page's - // WebContents. - content::BrowserContext* const extension_browser_context = - extension_web_contents_->GetBrowserContext(); - const extensions::Extension* const extension = - ProcessManager::Get(extension_browser_context) - ->GetExtensionForWebContents(extension_web_contents_); - const std::string extension_id = extension ? extension->id() : ""; - LOG_IF(DFATAL, extension_id.empty()) - << "Extension that started this OffscreenTab was not found."; - - // If verified, allow any tab capture audio/video devices that were requested. - extensions::TabCaptureRegistry* const tab_capture_registry = - extensions::TabCaptureRegistry::Get(extension_browser_context); - blink::MediaStreamDevices devices; - if (tab_capture_registry && - tab_capture_registry->VerifyRequest( - request.render_process_id, request.render_frame_id, extension_id)) { - if (request.audio_type == - blink::mojom::MediaStreamType::GUM_TAB_AUDIO_CAPTURE) { - devices.push_back(blink::MediaStreamDevice( - blink::mojom::MediaStreamType::GUM_TAB_AUDIO_CAPTURE, std::string(), - std::string())); - } - if (request.video_type == - blink::mojom::MediaStreamType::GUM_TAB_VIDEO_CAPTURE) { - devices.push_back(blink::MediaStreamDevice( - blink::mojom::MediaStreamType::GUM_TAB_VIDEO_CAPTURE, std::string(), - std::string())); - } - } - - DVLOG(2) << "Allowing " << devices.size() - << " capture devices for OffscreenTab content."; - - std::move(callback).Run( - devices, - devices.empty() ? blink::mojom::MediaStreamRequestResult::INVALID_STATE - : blink::mojom::MediaStreamRequestResult::OK, - nullptr); -} - -void OffscreenTabsOwner::DestroyTab(OffscreenTab* tab) { - for (auto iter = tabs_.begin(); iter != tabs_.end(); ++iter) { - if (iter->get() == tab) { - tabs_.erase(iter); - break; - } - } -} - -WEB_CONTENTS_USER_DATA_KEY_IMPL(OffscreenTabsOwner) - -} // namespace extensions
diff --git a/chrome/browser/extensions/api/tab_capture/offscreen_tabs_owner.h b/chrome/browser/extensions/api/tab_capture/offscreen_tabs_owner.h deleted file mode 100644 index bfa850e..0000000 --- a/chrome/browser/extensions/api/tab_capture/offscreen_tabs_owner.h +++ /dev/null
@@ -1,77 +0,0 @@ -// Copyright 2015 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_TAB_CAPTURE_OFFSCREEN_TABS_OWNER_H_ -#define CHROME_BROWSER_EXTENSIONS_API_TAB_CAPTURE_OFFSCREEN_TABS_OWNER_H_ - -#include <stdint.h> - -#include <memory> -#include <string> -#include <vector> - -#include "base/macros.h" -#include "chrome/browser/media/offscreen_tab.h" -#include "content/public/browser/web_contents_user_data.h" -#include "ui/gfx/geometry/size.h" - -class OffscreenTab; - -namespace extensions { - -// Creates, owns, and manages all OffscreenTab instances created by the same -// extension background page. When the extension background page's WebContents -// is about to be destroyed, its associated OffscreenTabsOwner and all of its -// OffscreenTab instances are destroyed. -// -// Usage: -// -// OffscreenTabsOwner::Get(extension_contents) -// ->OpenNewTab(start_url, size, std::string()); -// -// This class operates exclusively on the UI thread and so is not thread-safe. -class OffscreenTabsOwner final - : public OffscreenTab::Owner, - public content::WebContentsUserData<OffscreenTabsOwner> { - public: - ~OffscreenTabsOwner() final; - - // Returns the OffscreenTabsOwner instance associated with the given extension - // background page's WebContents. Never returns nullptr. - static OffscreenTabsOwner* Get(content::WebContents* extension_web_contents); - - // Instantiate a new offscreen tab and navigate it to |start_url|. The new - // tab's main frame will start out with the given |initial_size| in DIP - // coordinates. If too many offscreen tabs are already running, nothing - // happens and nullptr is returned. - // - // If |optional_presentation_id| is non-empty, the offscreen tab is registered - // for use by the Media Router (chrome/browser/media/router/...) as the - // receiving browsing context for the W3C Presentation API. - OffscreenTab* OpenNewTab(const GURL& start_url, - const gfx::Size& initial_size, - const std::string& optional_presentation_id); - - private: - friend class content::WebContentsUserData<OffscreenTabsOwner>; - - explicit OffscreenTabsOwner(content::WebContents* extension_web_contents); - - // OffscreenTab::Owner implementation. - void RequestMediaAccessPermission( - const content::MediaStreamRequest& request, - content::MediaResponseCallback callback) override; - void DestroyTab(OffscreenTab* tab) override; - - content::WebContents* const extension_web_contents_; - std::vector<std::unique_ptr<OffscreenTab>> tabs_; - - WEB_CONTENTS_USER_DATA_KEY_DECL(); - - DISALLOW_COPY_AND_ASSIGN(OffscreenTabsOwner); -}; - -} // namespace extensions - -#endif // CHROME_BROWSER_EXTENSIONS_API_TAB_CAPTURE_OFFSCREEN_TABS_OWNER_H_
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_api.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_api.cc index 961f6c3..7b27626 100644 --- a/chrome/browser/extensions/api/tab_capture/tab_capture_api.cc +++ b/chrome/browser/extensions/api/tab_capture/tab_capture_api.cc
@@ -17,7 +17,6 @@ #include "base/cxx17_backports.h" #include "base/strings/string_util.h" #include "base/values.h" -#include "chrome/browser/extensions/api/tab_capture/offscreen_tabs_owner.h" #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" #include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/media/webrtc/capture_policy_utils.h" @@ -57,16 +56,6 @@ "Extension has not been invoked for the current page (see activeTab " "permission). Chrome pages cannot be captured."; -const char kNotAllowlistedForOffscreenTabApi[] = - "Extension is not allowlisted for use of the unstable, in-development " - "chrome.tabCapture.captureOffscreenTab API."; -const char kInvalidStartUrl[] = - "Invalid/Missing/Malformatted starting URL for off-screen tab."; -const char kTooManyOffscreenTabs[] = - "Extension has already started too many off-screen tabs."; -const char kCapturingSameOffscreenTab[] = - "Cannot capture the same off-screen tab more than once."; - const char kInvalidOriginError[] = "Caller tab.url is not a valid URL."; const char kInvalidTabIdError[] = "Invalid tab specified."; const char kTabUrlNotSecure[] = @@ -81,10 +70,6 @@ return (options.audio && *options.audio) || (options.video && *options.video); } -bool IsAcceptableOffscreenTabUrl(const GURL& url) { - return url.is_valid() && (url.SchemeIsHTTPOrHTTPS() || url.SchemeIs("data")); -} - DesktopMediaID BuildDesktopMediaID(content::WebContents* target_contents, TabCapture::CaptureOptions* options) { content::RenderFrameHost* const target_frame = @@ -151,15 +136,6 @@ } // namespace -// Allowlisted extensions that do not check for a browser action grant because -// they provide API's. If there are additional extension ids that need -// allowlisting and are *not* the Media Router extension, add them to a new -// kAllowlist array. -const char* const kMediaRouterExtensionIds[] = { - "enhhojjnijigcajfphajepfemndkmdlo", // Dev - "pkedcjkdefgpdelpbcmbmeomcjbeemfm", // Stable -}; - ExtensionFunction::ResponseAction TabCaptureCaptureFunction::Run() { std::unique_ptr<api::tab_capture::Capture::Params> params = TabCapture::Capture::Params::Create(*args_); @@ -202,9 +178,7 @@ sessions::SessionTabHelper::IdForTab(target_contents).id(), mojom::APIPermissionID::kTabCaptureForTab) && base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - switches::kAllowlistedExtensionID) != extension_id && - !SimpleFeature::IsIdInArray(extension_id, kMediaRouterExtensionIds, - base::size(kMediaRouterExtensionIds))) { + switches::kAllowlistedExtensionID) != extension_id) { return RespondNow(Error(kGrantError)); } @@ -247,113 +221,6 @@ OneArgument(base::Value::FromUniquePtrValue(std::move(list)))); } -ExtensionFunction::ResponseAction TabCaptureCaptureOffscreenTabFunction::Run() { - std::unique_ptr<TabCapture::CaptureOffscreenTab::Params> params = - TabCapture::CaptureOffscreenTab::Params::Create(*args_); - EXTENSION_FUNCTION_VALIDATE(params); - - // Make sure the extension is allowlisted for using this API, regardless of - // Chrome channel. - // - // TODO(miu): Use _api_features.json and extensions::Feature library instead. - // http://crbug.com/537732 - const bool is_allowlisted_extension = - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - switches::kAllowlistedExtensionID) == extension()->id() || - SimpleFeature::IsIdInArray(extension()->id(), kMediaRouterExtensionIds, - base::size(kMediaRouterExtensionIds)); - if (!is_allowlisted_extension) - return RespondNow(Error(kNotAllowlistedForOffscreenTabApi)); - - const GURL start_url(params->start_url); - if (!IsAcceptableOffscreenTabUrl(start_url)) - return RespondNow(Error(kInvalidStartUrl)); - - if (!OptionsSpecifyAudioOrVideo(params->options)) - return RespondNow(Error(kNoAudioOrVideo)); - - content::WebContents* const extension_web_contents = GetSenderWebContents(); - EXTENSION_FUNCTION_VALIDATE(extension_web_contents); - OffscreenTab* const offscreen_tab = - OffscreenTabsOwner::Get(extension_web_contents) - ->OpenNewTab( - start_url, DetermineInitialSize(params->options), - (is_allowlisted_extension && params->options.presentation_id) - ? *params->options.presentation_id - : std::string()); - if (!offscreen_tab) - return RespondNow(Error(kTooManyOffscreenTabs)); - - content::WebContents* target_contents = offscreen_tab->web_contents(); - const std::string& extension_id = extension()->id(); - DesktopMediaID source = - BuildDesktopMediaID(target_contents, ¶ms->options); - TabCaptureRegistry* registry = TabCaptureRegistry::Get(browser_context()); - std::string device_id = registry->AddRequest( - target_contents, extension_id, true, extension()->url(), source, - extension()->name(), extension_web_contents); - if (device_id.empty()) { - return RespondNow(Error(kCapturingSameOffscreenTab)); - } - AddMediaStreamSourceConstraints(target_contents, ¶ms->options, device_id); - - // At this point, everything is set up in the browser process. It's now up to - // the custom JS bindings in the extension's render process to complete the - // request. See the comment at end of TabCaptureCaptureFunction::RunSync() - // for more details. - return RespondNow( - OneArgument(base::Value::FromUniquePtrValue(params->options.ToValue()))); -} - -// static -gfx::Size TabCaptureCaptureOffscreenTabFunction::DetermineInitialSize( - const TabCapture::CaptureOptions& options) { - static const int kDefaultWidth = 1280; - static const int kDefaultHeight = 720; - - if (!options.video_constraints) - return gfx::Size(kDefaultWidth, kDefaultHeight); - - gfx::Size min_size; - int width = -1; - int height = -1; - const base::DictionaryValue& mandatory_properties = - options.video_constraints->mandatory.additional_properties; - if (mandatory_properties.GetInteger("maxWidth", &width) && width >= 0 && - mandatory_properties.GetInteger("maxHeight", &height) && height >= 0) { - return gfx::Size(width, height); - } - if (mandatory_properties.GetInteger("minWidth", &width) && width >= 0 && - mandatory_properties.GetInteger("minHeight", &height) && height >= 0) { - min_size.SetSize(width, height); - } - - // Use optional size constraints if no mandatory ones were provided. - if (options.video_constraints->optional) { - const base::DictionaryValue& optional_properties = - options.video_constraints->optional->additional_properties; - if (optional_properties.GetInteger("maxWidth", &width) && width >= 0 && - optional_properties.GetInteger("maxHeight", &height) && height >= 0) { - if (min_size.IsEmpty()) { - return gfx::Size(width, height); - } else { - return gfx::Size(std::max(width, min_size.width()), - std::max(height, min_size.height())); - } - } - if (min_size.IsEmpty() && - optional_properties.GetInteger("minWidth", &width) && width >= 0 && - optional_properties.GetInteger("minHeight", &height) && height >= 0) { - min_size.SetSize(width, height); - } - } - - // No maximum size was provided, so just return the default size bounded by - // the minimum size. - return gfx::Size(std::max(kDefaultWidth, min_size.width()), - std::max(kDefaultHeight, min_size.height())); -} - ExtensionFunction::ResponseAction TabCaptureGetMediaStreamIdFunction::Run() { std::unique_ptr<api::tab_capture::GetMediaStreamId::Params> params = TabCapture::GetMediaStreamId::Params::Create(*args_);
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_api.h b/chrome/browser/extensions/api/tab_capture/tab_capture_api.h index a30fcc0..a39e60cd 100644 --- a/chrome/browser/extensions/api/tab_capture/tab_capture_api.h +++ b/chrome/browser/extensions/api/tab_capture/tab_capture_api.h
@@ -14,14 +14,6 @@ namespace extensions { -// Extension ids for stable / beta cast extensions. Included in -// |kChromecastExtensionIds|. -extern const char* const kBetaChromecastExtensionId; -extern const char* const kStableChromecastExtensionId; - -// Extension ids for the chromecast. -extern const char* const kChromecastExtensionIds[6]; - class TabCaptureCaptureFunction final : public ExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("tabCapture.capture", TABCAPTURE_CAPTURE) @@ -45,23 +37,6 @@ ResponseAction Run() final; }; -class TabCaptureCaptureOffscreenTabFunction final : public ExtensionFunction { - public: - DECLARE_EXTENSION_FUNCTION("tabCapture.captureOffscreenTab", - TABCAPTURE_CAPTUREOFFSCREENTAB) - - // Examines the min/max width/height constraints in the |options| to determine - // a suitable initial off-screen tab size. - static gfx::Size DetermineInitialSize( - const extensions::api::tab_capture::CaptureOptions& options); - - private: - ~TabCaptureCaptureOffscreenTabFunction() final {} - - // ExtensionFunction: - ResponseAction Run() final; -}; - class TabCaptureGetMediaStreamIdFunction final : public ExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("tabCapture.getMediaStreamId",
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc index 430354e..94bb67c 100644 --- a/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc +++ b/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
@@ -81,75 +81,6 @@ } }; -// Tests the logic that examines the constraints to determine the starting -// off-screen tab size. -TEST(TabCaptureCaptureOffscreenTabTest, DetermineInitialSize) { - using extensions::api::tab_capture::CaptureOptions; - using extensions::api::tab_capture::MediaStreamConstraint; - - // Empty options --> 1280x720 - CaptureOptions options; - EXPECT_EQ(gfx::Size(1280, 720), - TabCaptureCaptureOffscreenTabFunction::DetermineInitialSize( - options)); - - // Use specified mandatory maximum size. - options.video_constraints = std::make_unique<MediaStreamConstraint>(); - base::DictionaryValue* properties = - &options.video_constraints->mandatory.additional_properties; - properties->SetInteger("maxWidth", 123); - properties->SetInteger("maxHeight", 456); - EXPECT_EQ(gfx::Size(123, 456), - TabCaptureCaptureOffscreenTabFunction::DetermineInitialSize( - options)); - - // Use default size if larger than mandatory minimum size. Else, use - // mandatory minimum size. - options.video_constraints = std::make_unique<MediaStreamConstraint>(); - properties = &options.video_constraints->mandatory.additional_properties; - properties->SetInteger("minWidth", 123); - properties->SetInteger("minHeight", 456); - EXPECT_EQ(gfx::Size(1280, 720), - TabCaptureCaptureOffscreenTabFunction::DetermineInitialSize( - options)); - properties->SetInteger("minWidth", 2560); - properties->SetInteger("minHeight", 1440); - EXPECT_EQ(gfx::Size(2560, 1440), - TabCaptureCaptureOffscreenTabFunction::DetermineInitialSize( - options)); - - // Use specified optional maximum size, if no mandatory size was specified. - options.video_constraints = std::make_unique<MediaStreamConstraint>(); - options.video_constraints->optional = - std::make_unique<MediaStreamConstraint::Optional>(); - properties = &options.video_constraints->optional->additional_properties; - properties->SetInteger("maxWidth", 456); - properties->SetInteger("maxHeight", 123); - EXPECT_EQ(gfx::Size(456, 123), - TabCaptureCaptureOffscreenTabFunction::DetermineInitialSize( - options)); - // ...unless a mandatory minimum size was specified: - options.video_constraints->mandatory.additional_properties.SetInteger( - "minWidth", 500); - options.video_constraints->mandatory.additional_properties.SetInteger( - "minHeight", 600); - EXPECT_EQ(gfx::Size(500, 600), - TabCaptureCaptureOffscreenTabFunction::DetermineInitialSize( - options)); - - // Use default size if larger than optional minimum size. Else, use optional - // minimum size. - options.video_constraints = std::make_unique<MediaStreamConstraint>(); - options.video_constraints->optional = - std::make_unique<MediaStreamConstraint::Optional>(); - properties = &options.video_constraints->optional->additional_properties; - properties->SetInteger("minWidth", 9999); - properties->SetInteger("minHeight", 8888); - EXPECT_EQ(gfx::Size(9999, 8888), - TabCaptureCaptureOffscreenTabFunction::DetermineInitialSize( - options)); -} - // Tests API behaviors, including info queries, and constraints violations. IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, ApiTests) { AddExtensionToCommandLineAllowlist(); @@ -157,15 +88,6 @@ << message_; } -// Tests that there is a maximum limitation to the number of simultaneous -// off-screen tabs. -IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, MaxOffscreenTabs) { - AddExtensionToCommandLineAllowlist(); - ASSERT_TRUE( - RunExtensionTest("tab_capture", {.page_url = "max_offscreen_tabs.html"})) - << message_; -} - // Tests that tab capture video frames can be received in a VIDEO element. // Disabled due to flakes on multiple platforms; see https://crbug.com/1040894. IN_PROC_BROWSER_TEST_F(TabCaptureApiPixelTest, EndToEndWithoutRemoting) { @@ -204,35 +126,6 @@ << message_; } -// Tests that tab capture video frames can be received in a VIDEO element from -// an off-screen tab. -IN_PROC_BROWSER_TEST_F(TabCaptureApiPixelTest, OffscreenTabEndToEnd) { - if (IsTooIntensiveForThisPlatform()) { - LOG(WARNING) << "Skipping this CPU-intensive test on this platform/build."; - return; - } - AddExtensionToCommandLineAllowlist(); - ASSERT_TRUE(RunExtensionTest("tab_capture", - {.page_url = "offscreen_end_to_end.html"})) - << message_; - // Verify that offscreen profile has been destroyed. - ASSERT_FALSE(profile()->HasPrimaryOTRProfile()); -} - -// Tests that off-screen tabs can't do evil things (e.g., access local files). -IN_PROC_BROWSER_TEST_F(TabCaptureApiPixelTest, OffscreenTabEvilTests) { - if (IsTooIntensiveForThisPlatform()) { - LOG(WARNING) << "Skipping this CPU-intensive test on this platform/build."; - return; - } - AddExtensionToCommandLineAllowlist(); - ASSERT_TRUE(RunExtensionTest("tab_capture", - {.page_url = "offscreen_evil_tests.html"})) - << message_; - // Verify that offscreen profile has been destroyed. - ASSERT_FALSE(profile()->HasPrimaryOTRProfile()); -} - // Tests that getUserMedia() is NOT a way to start tab capture. IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, GetUserMediaTest) { ExtensionTestMessageListener listener("ready", true);
diff --git a/chrome/browser/extensions/content_script_apitest.cc b/chrome/browser/extensions/content_script_apitest.cc index d320da0..947da68 100644 --- a/chrome/browser/extensions/content_script_apitest.cc +++ b/chrome/browser/extensions/content_script_apitest.cc
@@ -1167,6 +1167,42 @@ load_page_and_check_error("inject-script.example"); } +// Verifies how the storage API works with content scripts with default access +// level. +IN_PROC_BROWSER_TEST_F(ContentScriptApiTest, StorageApiDefaultAccessTest) { + // The extension verifies expectations in its background context and + // initializes state, which will be used by the content script below. + ASSERT_TRUE(StartEmbeddedTestServer()); + ASSERT_TRUE(RunExtensionTest("content_scripts/storage_api_default_access")) + << message_; + + // Open a url to run the content script. The content script + // then continues the test, so we need a separate ResultCatcher. + ResultCatcher catcher; + GURL url(embedded_test_server()->GetURL("/extensions/test_file.html")); + ui_test_utils::NavigateToURL(browser(), url); + ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); +} + +// Verifies how the storage API works with content scripts with untrusted access +// level. +IN_PROC_BROWSER_TEST_F(ContentScriptApiTest, + StorageApiAllowUntrustedAccessTest) { + // The extension verifies expectations in its background context and + // initializes state, which will be used by the content script below. + ASSERT_TRUE(StartEmbeddedTestServer()); + ASSERT_TRUE( + RunExtensionTest("content_scripts/storage_api_allow_untrusted_access")) + << message_; + + // Open a url to run the content script. The content script + // then continues the test, so we need a separate ResultCatcher. + ResultCatcher catcher; + GURL url(embedded_test_server()->GetURL("/extensions/test_file.html")); + ui_test_utils::NavigateToURL(browser(), url); + ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); +} + // A test suite designed for exercising the behavior of content script // injection into opaque URLs (like about:blank). class ContentScriptRelatedFrameTest : public ContentScriptApiTest {
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 59ae710..14de9fe3 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -382,6 +382,11 @@ "expiry_milestone": 94 }, { + "name": "autofill-fill-merchant-promo-code-fields", + "owners": [ "jsaul@google.com", "payments-autofill-team@google.com" ], + "expiry_milestone": 99 + }, + { "name": "autofill-fix-offer-in-incognito", "owners": [ "siyua" ], "expiry_milestone": 97
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 0309ecb..ee55be6 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -338,6 +338,12 @@ "When enabled, if all requirements are met, Autofill will offer to use " "virtual credit cards in form filling."; +const char kAutofillFillMerchantPromoCodeFieldsName[] = + "Enable Autofill of promo code fields in forms"; +const char kAutofillFillMerchantPromoCodeFieldsDescription[] = + "When enabled, Autofill will attempt to fill merchant promo/coupon/gift " + "code fields when data is available."; + const char kAutofillFixOfferInIncognitoName[] = "Enable the fix for Autofill offer in Incognito mode"; const char kAutofillFixOfferInIncognitoDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 5bab29b..caa1e810 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -202,6 +202,9 @@ extern const char kAutofillEnableVirtualCardName[]; extern const char kAutofillEnableVirtualCardDescription[]; +extern const char kAutofillFillMerchantPromoCodeFieldsName[]; +extern const char kAutofillFillMerchantPromoCodeFieldsDescription[]; + extern const char kAutofillFixOfferInIncognitoName[]; extern const char kAutofillFixOfferInIncognitoDescription[];
diff --git a/chrome/browser/lacros/download_controller_client_lacros.cc b/chrome/browser/lacros/download_controller_client_lacros.cc index 9d71d3c..b644642 100644 --- a/chrome/browser/lacros/download_controller_client_lacros.cc +++ b/chrome/browser/lacros/download_controller_client_lacros.cc
@@ -16,7 +16,7 @@ namespace { -crosapi::mojom::DownloadState ConvertDownloadState( +crosapi::mojom::DownloadState ConvertMojoDownloadState( download::DownloadItem::DownloadState value) { switch (value) { case download::DownloadItem::IN_PROGRESS: @@ -33,26 +33,26 @@ } } -crosapi::mojom::DownloadEventPtr BuildDownloadEvent( +crosapi::mojom::DownloadItemPtr ConvertToMojoDownloadItem( download::DownloadItem* item) { auto* profile = Profile::FromBrowserContext( content::DownloadItemUtils::GetBrowserContext(item)); - crosapi::mojom::DownloadEventPtr dle = crosapi::mojom::DownloadEvent::New(); - dle->guid = item->GetGuid(); - dle->state = ConvertDownloadState(item->GetState()); - dle->full_path = item->GetFullPath(); - dle->target_file_path = item->GetTargetFilePath(); - dle->is_from_incognito_profile = profile->IsIncognitoProfile(); - dle->is_paused = item->IsPaused(); - dle->has_is_paused = true; - dle->open_when_complete = item->GetOpenWhenComplete(); - dle->has_open_when_complete = true; - dle->received_bytes = item->GetReceivedBytes(); - dle->has_received_bytes = true; - dle->total_bytes = item->GetTotalBytes(); - dle->has_total_bytes = true; - return dle; + auto download = crosapi::mojom::DownloadItem::New(); + download->guid = item->GetGuid(); + download->state = ConvertMojoDownloadState(item->GetState()); + download->full_path = item->GetFullPath(); + download->target_file_path = item->GetTargetFilePath(); + download->is_from_incognito_profile = profile->IsIncognitoProfile(); + download->is_paused = item->IsPaused(); + download->has_is_paused = true; + download->open_when_complete = item->GetOpenWhenComplete(); + download->has_open_when_complete = true; + download->received_bytes = item->GetReceivedBytes(); + download->has_received_bytes = true; + download->total_bytes = item->GetTotalBytes(); + download->has_total_bytes = true; + return download; } } // namespace @@ -261,7 +261,7 @@ return; service->GetRemote<crosapi::mojom::DownloadController>()->OnDownloadCreated( - BuildDownloadEvent(item)); + ConvertToMojoDownloadItem(item)); } void DownloadControllerClientLacros::OnDownloadUpdated( @@ -271,7 +271,7 @@ return; service->GetRemote<crosapi::mojom::DownloadController>()->OnDownloadUpdated( - BuildDownloadEvent(item)); + ConvertToMojoDownloadItem(item)); } void DownloadControllerClientLacros::OnDownloadDestroyed( @@ -281,5 +281,5 @@ return; service->GetRemote<crosapi::mojom::DownloadController>()->OnDownloadDestroyed( - BuildDownloadEvent(item)); + ConvertToMojoDownloadItem(item)); }
diff --git a/chrome/browser/media/cast_mirroring_service_host.cc b/chrome/browser/media/cast_mirroring_service_host.cc index ec1f36f1..0998b005 100644 --- a/chrome/browser/media/cast_mirroring_service_host.cc +++ b/chrome/browser/media/cast_mirroring_service_host.cc
@@ -465,14 +465,6 @@ } #if BUILDFLAG(ENABLE_EXTENSIONS) -void CastMirroringServiceHost::RequestMediaAccessPermission( - const content::MediaStreamRequest& request, - content::MediaResponseCallback callback) { - // This should not be called when mirroring an OffscreenTab through the - // mirroring service. - NOTREACHED(); -} - void CastMirroringServiceHost::DestroyTab(OffscreenTab* tab) { if (offscreen_tab_ && (offscreen_tab_.get() == tab)) offscreen_tab_.reset();
diff --git a/chrome/browser/media/cast_mirroring_service_host.h b/chrome/browser/media/cast_mirroring_service_host.h index 3748568..bd0ac76 100644 --- a/chrome/browser/media/cast_mirroring_service_host.h +++ b/chrome/browser/media/cast_mirroring_service_host.h
@@ -127,9 +127,6 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) // OffscreenTab::Owner implementation. - void RequestMediaAccessPermission( - const content::MediaStreamRequest& request, - content::MediaResponseCallback callback) override; void DestroyTab(OffscreenTab* tab) override; // Creates and starts a new OffscreenTab.
diff --git a/chrome/browser/media/offscreen_tab.cc b/chrome/browser/media/offscreen_tab.cc index 412e6b05..d6295d8 100644 --- a/chrome/browser/media/offscreen_tab.cc +++ b/chrome/browser/media/offscreen_tab.cc
@@ -17,6 +17,7 @@ #include "content/public/browser/presentation_receiver_flags.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/web_contents.h" +#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h" #if defined(USE_AURA) #include "base/threading/thread_task_runner_handle.h" @@ -331,18 +332,16 @@ WebContents* contents, const content::MediaStreamRequest& request, content::MediaResponseCallback callback) { - DCHECK_EQ(offscreen_tab_web_contents_.get(), contents); - owner_->RequestMediaAccessPermission(request, std::move(callback)); + std::move(callback).Run(blink::MediaStreamDevices(), + blink::mojom::MediaStreamRequestResult::NOT_SUPPORTED, + nullptr); } bool OffscreenTab::CheckMediaAccessPermission( content::RenderFrameHost* render_frame_host, const GURL& security_origin, blink::mojom::MediaStreamType type) { - DCHECK_EQ(offscreen_tab_web_contents_.get(), - content::WebContents::FromRenderFrameHost(render_frame_host)); - return type == blink::mojom::MediaStreamType::GUM_TAB_AUDIO_CAPTURE || - type == blink::mojom::MediaStreamType::GUM_TAB_VIDEO_CAPTURE; + return false; } void OffscreenTab::DidStartNavigation(
diff --git a/chrome/browser/media/offscreen_tab.h b/chrome/browser/media/offscreen_tab.h index fb09bf2c..3fd38bcb 100644 --- a/chrome/browser/media/offscreen_tab.h +++ b/chrome/browser/media/offscreen_tab.h
@@ -47,15 +47,12 @@ protected content::WebContentsDelegate, protected content::WebContentsObserver { public: + // TODO(crbug.com/1234929): Hold the OffscreenTab by a WeakPtr, then Owner can + // be deleted. class Owner { public: virtual ~Owner() {} - // Checks whether capturing the |contents| is permitted. - virtual void RequestMediaAccessPermission( - const content::MediaStreamRequest& request, - content::MediaResponseCallback callback) = 0; - // |tab| is no longer valid after this call. virtual void DestroyTab(OffscreenTab* tab) = 0; };
diff --git a/chrome/browser/media/router/providers/test/test_media_route_provider.cc b/chrome/browser/media/router/providers/test/test_media_route_provider.cc index df83bde..21891ac 100644 --- a/chrome/browser/media/router/providers/test/test_media_route_provider.cc +++ b/chrome/browser/media/router/providers/test/test_media_route_provider.cc
@@ -14,8 +14,6 @@ #include "base/run_loop.h" #include "base/task/task_traits.h" #include "base/task/thread_pool.h" -#include "chrome/browser/extensions/api/tab_capture/offscreen_tabs_owner.h" -#include "chrome/browser/media/offscreen_tab.h" #include "components/media_router/common/media_source.h" #include "components/media_router/common/mojom/media_router.mojom.h" #include "components/media_router/common/route_request_result.h" @@ -83,8 +81,8 @@ std::move(callback).Run(absl::nullopt, nullptr, route_error_message_, RouteRequestResult::ResultCode::UNKNOWN_ERROR); } else if (!delay_.is_zero()) { - base::ThreadPool::PostDelayedTask( - FROM_HERE, {base::TaskPriority::HIGHEST}, + base::SequencedTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, base::BindOnce(&TestMediaRouteProvider::CreateRouteTimeOut, GetWeakPtr(), std::move(callback)), delay_); @@ -284,8 +282,21 @@ content::WebContents* web_contents, GURL source_urn, std::string& presentation_id) { - extensions::OffscreenTabsOwner::Get(web_contents) - ->OpenNewTab(source_urn, gfx::Size(180, 180), presentation_id); + offscreen_tab_ = + std::make_unique<OffscreenTab>(this, web_contents->GetBrowserContext()); + offscreen_tab_->Start(source_urn, gfx::Size(180, 180), presentation_id); +} + +void TestMediaRouteProvider::TearDown() { + // An OffscreenTab observes its Profile*, and must be destroyed before + // Profiles. + if (offscreen_tab_) + offscreen_tab_.reset(); +} + +void TestMediaRouteProvider::DestroyTab(OffscreenTab* tab) { + if (offscreen_tab_ && offscreen_tab_.get() == tab) + offscreen_tab_.reset(); } } // namespace media_router
diff --git a/chrome/browser/media/router/providers/test/test_media_route_provider.h b/chrome/browser/media/router/providers/test/test_media_route_provider.h index 5292284..2e15ae26 100644 --- a/chrome/browser/media/router/providers/test/test_media_route_provider.h +++ b/chrome/browser/media/router/providers/test/test_media_route_provider.h
@@ -12,6 +12,7 @@ #include "base/callback.h" #include "base/memory/weak_ptr.h" +#include "chrome/browser/media/offscreen_tab.h" #include "components/media_router/common/media_route.h" #include "components/media_router/common/mojom/media_router.mojom.h" #include "content/public/test/browser_test_utils.h" @@ -23,7 +24,8 @@ namespace media_router { // The Test MediaRouteProvider class is used for integration browser test. -class TestMediaRouteProvider : public mojom::MediaRouteProvider { +class TestMediaRouteProvider : public mojom::MediaRouteProvider, + public OffscreenTab::Owner { public: static const mojom::MediaRouteProviderId kProviderId; TestMediaRouteProvider( @@ -105,12 +107,16 @@ void CaptureOffScreenTab(content::WebContents* web_contents, GURL source_urn, std::string& presentation_id); + void TearDown(); private: base::WeakPtr<TestMediaRouteProvider> GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); } + // OffscreenTab::Owner overrides + void DestroyTab(OffscreenTab* tab) override; + std::vector<MediaRoute> GetMediaRoutes(); void SetSinks(); void CreateRouteTimeOut(CreateRouteCallback callback); @@ -128,6 +134,8 @@ // Mojo remote to the Media Router. mojo::Remote<mojom::MediaRouter> media_router_; + std::unique_ptr<OffscreenTab> offscreen_tab_; + base::WeakPtrFactory<TestMediaRouteProvider> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner.cc b/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner.cc index ab88036..29c1e63 100644 --- a/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner.cc +++ b/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner.cc
@@ -22,26 +22,41 @@ } // namespace +// static +FastInitiationScanner::Factory* + FastInitiationScanner::Factory::factory_instance_ = nullptr; + +// static +std::unique_ptr<FastInitiationScanner> FastInitiationScanner::Factory::Create( + scoped_refptr<device::BluetoothAdapter> adapter) { + if (factory_instance_) + return factory_instance_->CreateInstance(adapter); + + return std::make_unique<FastInitiationScanner>(adapter); +} + +// static +void FastInitiationScanner::Factory::SetFactoryForTesting( + FastInitiationScanner::Factory* factory) { + factory_instance_ = factory; +} + FastInitiationScanner::FastInitiationScanner( - scoped_refptr<device::BluetoothAdapter> adapter, - base::RepeatingClosure device_found_callback, - base::RepeatingClosure device_lost_callback, - base::OnceClosure scanner_invalidated_callback) - : adapter_(adapter), - device_found_callback_(std::move(device_found_callback)), - device_lost_callback_(std::move(device_lost_callback)), - scanner_invalidated_callback_(std::move(scanner_invalidated_callback)) { + scoped_refptr<device::BluetoothAdapter> adapter) + : adapter_(adapter) { DCHECK(adapter_ && adapter_->IsPresent() && adapter_->IsPowered()); - StartScanning(); } FastInitiationScanner::~FastInitiationScanner() {} -bool FastInitiationScanner::AreFastInitiationDevicesDetected() const { - return !devices_attempting_to_share_.empty(); -} +void FastInitiationScanner::StartScanning( + base::RepeatingClosure device_found_callback, + base::RepeatingClosure device_lost_callback, + base::OnceClosure scanner_invalidated_callback) { + device_found_callback_ = std::move(device_found_callback); + device_lost_callback_ = std::move(device_lost_callback); + scanner_invalidated_callback_ = std::move(scanner_invalidated_callback); -void FastInitiationScanner::StartScanning() { std::vector<uint8_t> pattern_value; // Add the service UUID in reversed byte order. pattern_value.insert(pattern_value.begin(), @@ -71,6 +86,10 @@ std::move(filter), /*delegate=*/weak_ptr_factory_.GetWeakPtr()); } +bool FastInitiationScanner::AreFastInitiationDevicesDetected() const { + return !devices_attempting_to_share_.empty(); +} + void FastInitiationScanner::OnSessionStarted( device::BluetoothLowEnergyScanSession* scan_session, absl::optional<device::BluetoothLowEnergyScanSession::ErrorCode>
diff --git a/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner.h b/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner.h index e10927a..ddb10c2 100644 --- a/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner.h +++ b/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner.h
@@ -15,22 +15,48 @@ #include "device/bluetooth/bluetooth_adapter.h" #include "device/bluetooth/bluetooth_low_energy_scan_session.h" +// FastInitiationScanner will scan for BLE advertisements using a +// BluetoothLowEnergyScanSession. It will filter for advertisements containing +// the Fast Initiation UUID 0xFE2C and service data 0xFC128E. Remote devices +// will broacast these advertisements when they are attempting to share (see +// FastInitiationAdvertiser). We use this as a signal to prompt the user to +// enable high visibility mode. class FastInitiationScanner : public device::BluetoothLowEnergyScanSession::Delegate { public: - FastInitiationScanner(scoped_refptr<device::BluetoothAdapter> adapter, - base::RepeatingClosure device_found_callback, - base::RepeatingClosure device_lost_callback, - base::OnceClosure scanner_invalidated_callback); + class Factory { + public: + Factory() = default; + Factory(const Factory&) = delete; + Factory& operator=(const Factory&) = delete; + + static std::unique_ptr<FastInitiationScanner> Create( + scoped_refptr<device::BluetoothAdapter> adapter); + + static void SetFactoryForTesting(Factory* factory); + + protected: + virtual ~Factory() = default; + virtual std::unique_ptr<FastInitiationScanner> CreateInstance( + scoped_refptr<device::BluetoothAdapter> adapter) = 0; + + private: + static Factory* factory_instance_; + }; + + explicit FastInitiationScanner( + scoped_refptr<device::BluetoothAdapter> adapter); ~FastInitiationScanner() override; FastInitiationScanner(const FastInitiationScanner&) = delete; FastInitiationScanner& operator=(const FastInitiationScanner&) = delete; - bool AreFastInitiationDevicesDetected() const; + virtual void StartScanning(base::RepeatingClosure device_found_callback, + base::RepeatingClosure device_lost_callback, + base::OnceClosure scanner_invalidated_callback); + + virtual bool AreFastInitiationDevicesDetected() const; private: - void StartScanning(); - // device::BluetoothLowEnergyScanSession::Delegate: void OnSessionStarted( device::BluetoothLowEnergyScanSession* scan_session,
diff --git a/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner_unittest.cc b/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner_unittest.cc index 89b59848..f4460281 100644 --- a/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner_unittest.cc +++ b/chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner_unittest.cc
@@ -51,8 +51,8 @@ device::BluetoothAdapterFactory::SetAdapterForTesting( mock_bluetooth_adapter_); - scanner_ = std::make_unique<FastInitiationScanner>( - mock_bluetooth_adapter_, + scanner_ = FastInitiationScanner::Factory::Create(mock_bluetooth_adapter_); + scanner_->StartScanning( base::BindRepeating( &NearbySharingFastInitiationScannerTest::OnDevicesDetected, weak_ptr_factory_.GetWeakPtr()),
diff --git a/chrome/browser/nearby_sharing/nearby_sharing_service_impl.cc b/chrome/browser/nearby_sharing/nearby_sharing_service_impl.cc index ac7242d5..b4363bc0 100644 --- a/chrome/browser/nearby_sharing/nearby_sharing_service_impl.cc +++ b/chrome/browser/nearby_sharing/nearby_sharing_service_impl.cc
@@ -2174,8 +2174,9 @@ void NearbySharingServiceImpl::StartFastInitiationScanning() { DCHECK(!fast_initiation_scanner_); NS_LOG(VERBOSE) << __func__ << ": Starting background scanning."; - fast_initiation_scanner_ = std::make_unique<FastInitiationScanner>( - bluetooth_adapter_, + fast_initiation_scanner_ = + FastInitiationScanner::Factory::Create(bluetooth_adapter_); + fast_initiation_scanner_->StartScanning( base::BindRepeating( &NearbySharingServiceImpl::OnFastInitiationDeviceFound, weak_ptr_factory_.GetWeakPtr()),
diff --git a/chrome/browser/nearby_sharing/nearby_sharing_service_impl_unittest.cc b/chrome/browser/nearby_sharing/nearby_sharing_service_impl_unittest.cc index 379bd1bb..d866991 100644 --- a/chrome/browser/nearby_sharing/nearby_sharing_service_impl_unittest.cc +++ b/chrome/browser/nearby_sharing/nearby_sharing_service_impl_unittest.cc
@@ -39,6 +39,7 @@ #include "chrome/browser/nearby_sharing/fake_nearby_connection.h" #include "chrome/browser/nearby_sharing/fake_nearby_connections_manager.h" #include "chrome/browser/nearby_sharing/fast_initiation/fast_initiation_advertiser.h" +#include "chrome/browser/nearby_sharing/fast_initiation/fast_initiation_scanner.h" #include "chrome/browser/nearby_sharing/local_device_data/fake_nearby_share_local_device_data_manager.h" #include "chrome/browser/nearby_sharing/local_device_data/nearby_share_local_device_data_manager_impl.h" #include "chrome/browser/nearby_sharing/nearby_connections_manager.h" @@ -81,6 +82,8 @@ using NearbyProcessShutdownReason = chromeos::nearby::NearbyProcessManager::NearbyProcessShutdownReason; +namespace { + class FakeFastInitiationAdvertiser : public FastInitiationAdvertiser { public: explicit FakeFastInitiationAdvertiser( @@ -172,6 +175,81 @@ this}; }; +class FakeFastInitiationScanner : public FastInitiationScanner { + public: + FakeFastInitiationScanner(scoped_refptr<device::BluetoothAdapter> adapter, + base::OnceClosure destructor_callback) + : FastInitiationScanner(adapter), + destructor_callback_(std::move(destructor_callback)) {} + + ~FakeFastInitiationScanner() override { + std::move(destructor_callback_).Run(); + } + + void StartScanning(base::RepeatingClosure device_found_callback, + base::RepeatingClosure device_lost_callback, + base::OnceClosure scanner_invalidated_callback) override { + ++start_scanning_call_count_; + device_found_callback_ = std::move(device_found_callback); + device_lost_callback_ = std::move(device_lost_callback); + scanner_invalidated_callback_ = std::move(scanner_invalidated_callback); + } + + bool AreFastInitiationDevicesDetected() const override { + return are_fast_initiation_devices_detected_; + } + + void SetAreFastInitiationDevicesDetected( + bool are_fast_initiation_devices_detected) { + are_fast_initiation_devices_detected_ = + are_fast_initiation_devices_detected; + } + + void DeviceFound() { device_found_callback_.Run(); } + + void DeviceLost() { device_lost_callback_.Run(); } + + void ScannerInvalidated() { std::move(scanner_invalidated_callback_).Run(); } + + private: + base::OnceClosure destructor_callback_; + base::RepeatingClosure device_found_callback_; + base::RepeatingClosure device_lost_callback_; + base::OnceClosure scanner_invalidated_callback_; + bool are_fast_initiation_devices_detected_ = false; + size_t start_scanning_call_count_ = 0u; +}; + +class FakeFastInitiationScannerFactory : public FastInitiationScanner::Factory { + public: + std::unique_ptr<FastInitiationScanner> CreateInstance( + scoped_refptr<device::BluetoothAdapter> adapter) override { + ++scanner_created_count_; + auto scanner = std::make_unique<FakeFastInitiationScanner>( + adapter, + base::BindOnce(&FakeFastInitiationScannerFactory::OnScannerDestroyed, + weak_ptr_factory_.GetWeakPtr())); + last_fake_fast_initiation_scanner_ = scanner.get(); + return std::move(scanner); + } + + FakeFastInitiationScanner* last_fake_fast_initiation_scanner() { + return last_fake_fast_initiation_scanner_; + } + size_t scanner_created_count() { return scanner_created_count_; } + size_t scanner_destroyed_count() { return scanner_destroyed_count_; } + + private: + void OnScannerDestroyed() { ++scanner_destroyed_count_; } + + FakeFastInitiationScanner* last_fake_fast_initiation_scanner_ = nullptr; + size_t scanner_created_count_ = 0u; + size_t scanner_destroyed_count_ = 0u; + + base::WeakPtrFactory<FakeFastInitiationScannerFactory> weak_ptr_factory_{ + this}; +}; + class MockTransferUpdateCallback : public TransferUpdateCallback { public: ~MockTransferUpdateCallback() override = default; @@ -209,6 +287,8 @@ bool callback_called = false; }; +} // namespace + namespace NearbySharingServiceUnitTests { constexpr base::TimeDelta kDelta = base::TimeDelta::FromMilliseconds(100); @@ -445,6 +525,7 @@ return mock_reference_ptr; }); + SetFakeFastInitiationScannerFactory(); service_ = CreateService(); SetFakeFastInitiationAdvertiserFactory(/*should_succeed_on_start=*/true); @@ -529,6 +610,13 @@ fast_initiation_advertiser_factory_.get()); } + void SetFakeFastInitiationScannerFactory() { + fast_initiation_scanner_factory_ = + std::make_unique<FakeFastInitiationScannerFactory>(); + FastInitiationScanner::Factory::SetFactoryForTesting( + fast_initiation_scanner_factory_.get()); + } + bool IsBluetoothPresent() { return is_bluetooth_present_; } bool IsBluetoothPowered() { return is_bluetooth_powered_; } @@ -1089,6 +1177,8 @@ std::unique_ptr<base::ScopedDisallowBlocking> disallow_blocking_; std::unique_ptr<FakeFastInitiationAdvertiserFactory> fast_initiation_advertiser_factory_; + std::unique_ptr<FakeFastInitiationScannerFactory> + fast_initiation_scanner_factory_; std::unique_ptr<FakeArcNearbyShareSession> arc_nearby_share_session_; bool is_bluetooth_present_ = true; bool is_bluetooth_powered_ = true; @@ -1183,6 +1273,12 @@ on_start_advertising_failure_called_ = true; } + void OnFastInitiationDeviceFound() override { device_found_called_ = true; } + void OnFastInitiationDeviceLost() override { device_lost_called_ = true; } + void OnFastInitiationScanningStopped() override { + scanning_stopped_called_ = true; + } + void OnShutdown() override { shutdown_called_ = true; service_->RemoveObserver(this); @@ -1192,6 +1288,9 @@ bool shutdown_called_ = false; bool process_stopped_called_ = false; bool on_start_advertising_failure_called_ = false; + bool device_found_called_ = false; + bool device_lost_called_ = false; + bool scanning_stopped_called_ = false; NearbySharingService* service_; }; @@ -4520,11 +4619,68 @@ EXPECT_FALSE(IsProcessShutdownTimerRunning()); } -TEST_F(NearbySharingServiceImplTest, FastInitiationScanningStartAndStop) { +TEST_F(NearbySharingServiceImplTest, FastInitiationScanning_StartAndStop) { SetConnectionType(net::NetworkChangeNotifier::CONNECTION_BLUETOOTH); - EXPECT_TRUE(mock_scan_session_); + EXPECT_EQ(1u, fast_initiation_scanner_factory_->scanner_created_count()); + EXPECT_EQ(0u, fast_initiation_scanner_factory_->scanner_destroyed_count()); + + // Trigger a call to StopFastInitiationScanning(). SetBluetoothIsPowered(false); - EXPECT_FALSE(mock_scan_session_); + EXPECT_EQ(1u, fast_initiation_scanner_factory_->scanner_created_count()); + EXPECT_EQ(1u, fast_initiation_scanner_factory_->scanner_destroyed_count()); + + // Trigger a call to StartFastInitiationScanning(). + SetBluetoothIsPowered(true); + EXPECT_EQ(2u, fast_initiation_scanner_factory_->scanner_created_count()); + EXPECT_EQ(1u, fast_initiation_scanner_factory_->scanner_destroyed_count()); +} + +TEST_F(NearbySharingServiceImplTest, + FastInitiationScanning_MultipleReceiveSurfaces) { + SetConnectionType(net::NetworkChangeNotifier::CONNECTION_BLUETOOTH); + EXPECT_EQ(1u, fast_initiation_scanner_factory_->scanner_created_count()); + EXPECT_EQ(0u, fast_initiation_scanner_factory_->scanner_destroyed_count()); + + // Registering a background receive surface should not create a scanner since + // we're already scanning. + MockTransferUpdateCallback callback; + service_->RegisterReceiveSurface( + &callback, NearbySharingService::ReceiveSurfaceState::kBackground); + EXPECT_EQ(1u, fast_initiation_scanner_factory_->scanner_created_count()); + EXPECT_EQ(0u, fast_initiation_scanner_factory_->scanner_destroyed_count()); +} + +TEST_F(NearbySharingServiceImplTest, FastInitiationScanning_NotifyObservers) { + SetConnectionType(net::NetworkChangeNotifier::CONNECTION_BLUETOOTH); + TestObserver observer(service_.get()); + ASSERT_EQ(1u, fast_initiation_scanner_factory_->scanner_created_count()); + + FakeFastInitiationScanner* scanner = + fast_initiation_scanner_factory_->last_fake_fast_initiation_scanner(); + scanner->DeviceFound(); + EXPECT_TRUE(observer.device_found_called_); + scanner->DeviceLost(); + EXPECT_TRUE(observer.device_lost_called_); + scanner->ScannerInvalidated(); + EXPECT_TRUE(observer.scanning_stopped_called_); + + // Remove the observer before it goes out of scope. + service_->RemoveObserver(&observer); +} + +TEST_F(NearbySharingServiceImplTest, + FastInitiationScanning_AreDevicesDetected) { + SetConnectionType(net::NetworkChangeNotifier::CONNECTION_BLUETOOTH); + ASSERT_EQ(1u, fast_initiation_scanner_factory_->scanner_created_count()); + + FakeFastInitiationScanner* scanner = + fast_initiation_scanner_factory_->last_fake_fast_initiation_scanner(); + scanner->SetAreFastInitiationDevicesDetected(true); + EXPECT_EQ(scanner->AreFastInitiationDevicesDetected(), + service_->AreFastInitiationDevicesDetected()); + scanner->SetAreFastInitiationDevicesDetected(false); + EXPECT_EQ(scanner->AreFastInitiationDevicesDetected(), + service_->AreFastInitiationDevicesDetected()); } } // namespace NearbySharingServiceUnitTests
diff --git a/chrome/browser/optimization_guide/browser_test_util.cc b/chrome/browser/optimization_guide/browser_test_util.cc new file mode 100644 index 0000000..a9bf24f --- /dev/null +++ b/chrome/browser/optimization_guide/browser_test_util.cc
@@ -0,0 +1,51 @@ +// 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/optimization_guide/browser_test_util.h" + +#include "base/run_loop.h" +#include "base/task/thread_pool/thread_pool_instance.h" +#include "base/test/metrics/histogram_tester.h" +#include "components/metrics/content/subprocess_metrics_provider.h" +#include "content/public/test/browser_test_utils.h" + +namespace optimization_guide { + +namespace { + +// Fetch and calculate the total number of samples from all the bins for +// |histogram_name|. Note: from some browertests run (such as chromeos) there +// might be two profiles created, and this will return the total sample count +// across profiles. +int GetTotalHistogramSamples(const base::HistogramTester* histogram_tester, + const std::string& histogram_name) { + std::vector<base::Bucket> buckets = + histogram_tester->GetAllSamples(histogram_name); + int total = 0; + for (const auto& bucket : buckets) + total += bucket.count; + + return total; +} + +} // namespace + +int RetryForHistogramUntilCountReached( + const base::HistogramTester* histogram_tester, + const std::string& histogram_name, + int count) { + while (true) { + base::ThreadPoolInstance::Get()->FlushForTesting(); + base::RunLoop().RunUntilIdle(); + + content::FetchHistogramsFromChildProcesses(); + metrics::SubprocessMetricsProvider::MergeHistogramDeltasForTesting(); + + int total = GetTotalHistogramSamples(histogram_tester, histogram_name); + if (total >= count) + return total; + } +} + +} // namespace optimization_guide
diff --git a/chrome/browser/optimization_guide/browser_test_util.h b/chrome/browser/optimization_guide/browser_test_util.h new file mode 100644 index 0000000..284cb58b --- /dev/null +++ b/chrome/browser/optimization_guide/browser_test_util.h
@@ -0,0 +1,25 @@ +// 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_OPTIMIZATION_GUIDE_BROWSER_TEST_UTIL_H_ +#define CHROME_BROWSER_OPTIMIZATION_GUIDE_BROWSER_TEST_UTIL_H_ + +#include <string> + +namespace base { +class HistogramTester; +} // namespace base + +namespace optimization_guide { + +// Retries fetching |histogram_name| until it contains at least |count| samples. +// Returns the count of samples. +int RetryForHistogramUntilCountReached( + const base::HistogramTester* histogram_tester, + const std::string& histogram_name, + int count); + +} // namespace optimization_guide + +#endif // CHROME_BROWSER_OPTIMIZATION_GUIDE_BROWSER_TEST_UTIL_H_
diff --git a/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc b/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc index 843d98c..6a93079 100644 --- a/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc +++ b/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc
@@ -18,6 +18,7 @@ #include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "chrome/browser/optimization_guide/browser_test_util.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h" #include "chrome/browser/profiles/profile.h" @@ -36,6 +37,7 @@ #include "components/optimization_guide/core/optimization_guide_prefs.h" #include "components/optimization_guide/core/optimization_guide_store.h" #include "components/optimization_guide/core/optimization_guide_switches.h" +#include "components/optimization_guide/core/optimization_guide_test_util.h" #include "components/optimization_guide/core/optimization_hints_component_update_listener.h" #include "components/optimization_guide/core/test_hints_component_creator.h" #include "components/optimization_guide/core/top_host_provider.h" @@ -60,41 +62,6 @@ namespace { -// Fetch and calculate the total number of samples from all the bins for -// |histogram_name|. Note: from some browertests run (such as chromeos) there -// might be two profiles created, and this will return the total sample count -// across profiles. -int GetTotalHistogramSamples(const base::HistogramTester* histogram_tester, - const std::string& histogram_name) { - std::vector<base::Bucket> buckets = - histogram_tester->GetAllSamples(histogram_name); - int total = 0; - for (const auto& bucket : buckets) - total += bucket.count; - - return total; -} - -// Retries fetching |histogram_name| until it contains at least |count| samples. -int RetryForHistogramUntilCountReached( - const base::HistogramTester* histogram_tester, - const std::string& histogram_name, - int count) { - int total = 0; - while (true) { - base::ThreadPoolInstance::Get()->FlushForTesting(); - base::RunLoop().RunUntilIdle(); - - total = GetTotalHistogramSamples(histogram_tester, histogram_name); - if (total >= count) - return total; - - content::FetchHistogramsFromChildProcesses(); - metrics::SubprocessMetricsProvider::MergeHistogramDeltasForTesting(); - base::RunLoop().RunUntilIdle(); - } -} - enum class HintsFetcherRemoteResponseType { kSuccessful = 0, kUnsuccessful = 1, @@ -217,7 +184,7 @@ optimization_guide::OptimizationHintsComponentUpdateListener::GetInstance() ->MaybeUpdateHintsComponent(component_info); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( &histogram_tester, optimization_guide::kComponentHintsUpdatedResultHistogramString, 1); } @@ -244,7 +211,7 @@ // histogram) prior to the navigation that tests functionality. ui_test_utils::NavigateToURL(browser(), url); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( &histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 1); } @@ -488,12 +455,12 @@ // Expect that the browser initialization will record at least one sample // in each of the following histograms as One Platform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); @@ -526,16 +493,16 @@ // Expect that the browser initialization will record at least one sample // in each of the following histograms as One Platform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HintCount", 1), 1); @@ -561,14 +528,14 @@ // Expect that the browser initialization will record at least one sample // in each of the following histograms as One Platform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); // Wait until histograms have been updated before performing checks for // correct behavior based on the response. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); @@ -592,14 +559,14 @@ // Expect that the browser initialization will record at least one sample // in each of the following histograms as One Platform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); // Wait until histograms have been updated before performing checks for // correct behavior based on the response. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); @@ -622,14 +589,14 @@ // Expect that the browser initialization will record at least one sample // in each of the following histograms as One Platform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); // Wait until histograms have been updated before performing checks for // correct behavior based on the response. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); @@ -655,7 +622,7 @@ ui_test_utils::NavigateToURL(browser(), GURL("https://unsuccessful.com/")); // We expect that we requested hints for 1 URL. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 1), 1); @@ -691,16 +658,16 @@ // Expect that the browser initialization will record at least one sample // in each of the following histograms as OnePlatform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HintCount", 1), 1); @@ -746,7 +713,7 @@ // Expect that the browser initialization will record at least one sample // in each of the following histograms as OnePlatform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); @@ -755,7 +722,7 @@ histogram_tester->ExpectBucketCount( "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 2, 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); @@ -801,12 +768,12 @@ // Expect that the browser initialization will record at least one sample // in each of the following histograms as hints fetching is enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); @@ -830,19 +797,19 @@ // Allowlist NoScript for https_url()'s' host. SetUpComponentUpdateHints(https_url()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( &histogram_tester, optimization_guide::kComponentHintsUpdatedResultHistogramString, 1); // Expect that the browser initialization will record at least one sample // in each of the following histograms as One Platform Hints are enabled. EXPECT_GE( - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( &histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( &histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); @@ -876,7 +843,7 @@ ui_test_utils::NavigateToURL(browser(), GURL(host_online)); EXPECT_EQ(1u, count_hints_requests_received()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( &histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 1); // Navigate away so metrics are recorded. @@ -916,7 +883,7 @@ ui_test_utils::NavigateToURL(browser(), GURL(host_network_offline)); EXPECT_EQ(0u, count_hints_requests_received()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( &histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 1); @@ -966,7 +933,7 @@ ui_test_utils::NavigateToURL(browser(), GURL(host_3g)); EXPECT_EQ(1u, count_hints_requests_received()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( &histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 1); @@ -1015,7 +982,7 @@ // With URL-keyed Hints, every unique URL navigated to will result in a // hints fetch if racing is enabled and allowed. EXPECT_EQ(1u, count_hints_requests_received()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( &histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 1); // Navigate away so metrics are recorded. @@ -1050,18 +1017,18 @@ // Allowlist NoScript for https_url()'s' host. SetUpComponentUpdateHints(https_url()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, optimization_guide::kComponentHintsUpdatedResultHistogramString, 1); // Expect that the browser initialization will record at least one sample // in each of the following histograms as One Platform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); @@ -1088,7 +1055,7 @@ ui_test_utils::NavigateToURL(browser(), GURL(full_url)); EXPECT_EQ(2u, count_hints_requests_received()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 1); histogram_tester->ExpectUniqueSample( @@ -1109,7 +1076,7 @@ // With URL-keyed Hints, every unique URL navigated to will result in a // hints fetch if racing is enabled and allowed. EXPECT_EQ(2u, count_hints_requests_received()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 2); @@ -1134,7 +1101,7 @@ ui_test_utils::NavigateToURL(otr_browser, GURL(full_url)); // Make sure no additional hints requests were received. - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( &incognito_histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 1); EXPECT_EQ(2u, count_hints_requests_received()); @@ -1153,18 +1120,18 @@ // Allowlist NoScript for https_url()'s' host. SetUpComponentUpdateHints(https_url()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, optimization_guide::kComponentHintsUpdatedResultHistogramString, 1); // Expect that the browser initialization will record at least one sample // in each of the following histograms as One Platform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); @@ -1192,7 +1159,7 @@ ui_test_utils::NavigateToURL(browser(), GURL(full_url)); EXPECT_EQ(2u, count_hints_requests_received()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 1); histogram_tester->ExpectUniqueSample( @@ -1223,7 +1190,7 @@ // With URL-keyed Hints, every unique URL navigated to will result in a // hints fetch if racing is enabled and allowed. EXPECT_EQ(3u, count_hints_requests_received()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 2); @@ -1244,18 +1211,18 @@ // Allowlist NoScript for https_url()'s' host. SetUpComponentUpdateHints(https_url()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, optimization_guide::kComponentHintsUpdatedResultHistogramString, 1); // Expect that the browser initialization will record at least one sample // in each of the following histograms as One Platform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1); @@ -1282,7 +1249,7 @@ ui_test_utils::NavigateToURL(browser(), GURL(full_url)); EXPECT_EQ(2u, count_hints_requests_received()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 1); histogram_tester->ExpectUniqueSample( @@ -1311,7 +1278,7 @@ // With URL-keyed Hints, every unique URL navigated to will result in a // hints fetch if racing is enabled and allowed. EXPECT_EQ(2u, count_hints_requests_received()); - RetryForHistogramUntilCountReached( + optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, optimization_guide::kLoadedHintLocalHistogramString, 2); @@ -1345,12 +1312,12 @@ // Expect that the browser initialization will record at least one sample // in each of the following histograms as One Platform Hints are enabled. - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1), 1); - EXPECT_GE(RetryForHistogramUntilCountReached( + EXPECT_GE(optimization_guide::RetryForHistogramUntilCountReached( histogram_tester, "OptimizationGuide.HintsFetcher.GetHintsRequest.Status", 1), 1);
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc index c88ef4b..86965e3 100644 --- a/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc +++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
@@ -7,12 +7,12 @@ #include "base/base64.h" #include "base/run_loop.h" #include "base/strings/stringprintf.h" -#include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/optimization_guide/browser_test_util.h" #include "chrome/browser/optimization_guide/optimization_guide_hints_manager.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h" @@ -26,6 +26,7 @@ #include "components/optimization_guide/core/optimization_guide_prefs.h" #include "components/optimization_guide/core/optimization_guide_store.h" #include "components/optimization_guide/core/optimization_guide_switches.h" +#include "components/optimization_guide/core/optimization_guide_test_util.h" #include "components/optimization_guide/core/optimization_hints_component_update_listener.h" #include "components/optimization_guide/core/test_hints_component_creator.h" #include "components/optimization_guide/proto/hints.pb.h" @@ -46,37 +47,6 @@ namespace { -// Fetch and calculate the total number of samples from all the bins for -// |histogram_name|. Note: from some browertests run, there might be two -// profiles created, and this will return the total sample count across -// profiles. -int GetTotalHistogramSamples(const base::HistogramTester& histogram_tester, - const std::string& histogram_name) { - std::vector<base::Bucket> buckets = - histogram_tester.GetAllSamples(histogram_name); - int total = 0; - for (const auto& bucket : buckets) - total += bucket.count; - - return total; -} - -// Retries fetching |histogram_name| until it contains at least |count| samples. -int RetryForHistogramUntilCountReached( - const base::HistogramTester& histogram_tester, - const std::string& histogram_name, - int count) { - int total = 0; - while (true) { - base::ThreadPoolInstance::Get()->FlushForTesting(); - base::RunLoop().RunUntilIdle(); - - total = GetTotalHistogramSamples(histogram_tester, histogram_name); - if (total >= count) - return total; - } -} - // A WebContentsObserver that asks whether an optimization type can be applied. class OptimizationGuideConsumerWebContentsObserver : public content::WebContentsObserver { @@ -407,8 +377,8 @@ ui_test_utils::NavigateToURL(browser(), url_with_hints()); - EXPECT_GT(RetryForHistogramUntilCountReached( - histogram_tester, "OptimizationGuide.LoadedHint.Result", 1), + EXPECT_GT(optimization_guide::RetryForHistogramUntilCountReached( + &histogram_tester, "OptimizationGuide.LoadedHint.Result", 1), 0); // There is a hint that matches this URL, so there should be an attempt to // load a hint that succeeds. @@ -445,8 +415,8 @@ ui_test_utils::NavigateToURL(browser(), url_with_hints()); - EXPECT_GT(RetryForHistogramUntilCountReached( - histogram_tester, "OptimizationGuide.LoadedHint.Result", 1), + EXPECT_GT(optimization_guide::RetryForHistogramUntilCountReached( + &histogram_tester, "OptimizationGuide.LoadedHint.Result", 1), 0); // There is a hint that matches this URL, so there should be an attempt to // load a hint that succeeds. @@ -483,8 +453,8 @@ ui_test_utils::NavigateToURL(browser(), url_that_redirects_to_hints()); - EXPECT_EQ(RetryForHistogramUntilCountReached( - histogram_tester, "OptimizationGuide.LoadedHint.Result", 2), + EXPECT_EQ(optimization_guide::RetryForHistogramUntilCountReached( + &histogram_tester, "OptimizationGuide.LoadedHint.Result", 2), 2); // Should attempt and succeed to load a hint once for the initial navigation // and redirect. @@ -504,8 +474,8 @@ ui_test_utils::NavigateToURL(browser(), GURL("https://nohints.com/")); - EXPECT_EQ(RetryForHistogramUntilCountReached( - histogram_tester, "OptimizationGuide.LoadedHint.Result", 1), + EXPECT_EQ(optimization_guide::RetryForHistogramUntilCountReached( + &histogram_tester, "OptimizationGuide.LoadedHint.Result", 1), 1); // There were no hints that match this URL, but there should still be an // attempt to load a hint but still fail. @@ -535,8 +505,8 @@ {optimization_guide::proto::FAST_HOST_HINTS}); // Wait until filter is loaded. This histogram will record twice: once when // the config is found and once when the filter is created. - RetryForHistogramUntilCountReached( - histogram_tester, + optimization_guide::RetryForHistogramUntilCountReached( + &histogram_tester, "OptimizationGuide.OptimizationFilterStatus.FastHostHints", 2); EXPECT_EQ(optimization_guide::OptimizationGuideDecision::kFalse, @@ -557,8 +527,8 @@ {optimization_guide::proto::LITE_PAGE_REDIRECT}); // Wait until filter is loaded. This histogram will record twice: once when // the config is found and once when the filter is created. - RetryForHistogramUntilCountReached( - histogram_tester, + optimization_guide::RetryForHistogramUntilCountReached( + &histogram_tester, "OptimizationGuide.OptimizationFilterStatus.LitePageRedirect", 2); // The previously loaded filter should still be loaded and give the same @@ -643,8 +613,8 @@ // to have loaded. base::HistogramTester histogram_tester; ui_test_utils::NavigateToURL(otr_browser, url_with_hints()); - RetryForHistogramUntilCountReached(histogram_tester, - "OptimizationGuide.LoadedHint.Result", 1); + optimization_guide::RetryForHistogramUntilCountReached( + &histogram_tester, "OptimizationGuide.LoadedHint.Result", 1); EXPECT_EQ( optimization_guide::OptimizationGuideDecision::kTrue, @@ -672,8 +642,8 @@ {optimization_guide::proto::FAST_HOST_HINTS}); // Wait until filter is loaded. This histogram will record twice: once when // the config is found and once when the filter is created. - RetryForHistogramUntilCountReached( - histogram_tester, + optimization_guide::RetryForHistogramUntilCountReached( + &histogram_tester, "OptimizationGuide.OptimizationFilterStatus.FastHostHints", 2); EXPECT_EQ(optimization_guide::OptimizationGuideDecision::kFalse,
diff --git a/chrome/browser/optimization_guide/page_content_annotations_service_browsertest.cc b/chrome/browser/optimization_guide/page_content_annotations_service_browsertest.cc index ad4c9eca..1485ffe 100644 --- a/chrome/browser/optimization_guide/page_content_annotations_service_browsertest.cc +++ b/chrome/browser/optimization_guide/page_content_annotations_service_browsertest.cc
@@ -3,11 +3,11 @@ // found in the LICENSE file. #include "base/path_service.h" -#include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "chrome/browser/history/history_service_factory.h" +#include "chrome/browser/optimization_guide/browser_test_util.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h" #include "chrome/browser/optimization_guide/page_content_annotations_service_factory.h" @@ -20,47 +20,13 @@ #include "components/optimization_guide/content/browser/page_content_annotations_service.h" #include "components/optimization_guide/core/optimization_guide_enums.h" #include "components/optimization_guide/core/optimization_guide_features.h" +#include "components/optimization_guide/core/optimization_guide_test_util.h" #include "components/optimization_guide/core/test_model_info_builder.h" #include "components/optimization_guide/machine_learning_tflite_buildflags.h" #include "components/optimization_guide/proto/page_topics_model_metadata.pb.h" #include "content/public/test/browser_test.h" #include "net/dns/mock_host_resolver.h" -namespace { - -// Fetch and calculate the total number of samples from all the bins for -// |histogram_name|. Note: from some browertests run, there might be two -// profiles created, and this will return the total sample count across -// profiles. -int GetTotalHistogramSamples(const base::HistogramTester& histogram_tester, - const std::string& histogram_name) { - std::vector<base::Bucket> buckets = - histogram_tester.GetAllSamples(histogram_name); - int total = 0; - for (const auto& bucket : buckets) - total += bucket.count; - - return total; -} - -// Retries fetching |histogram_name| until it contains at least |count| samples. -int RetryForHistogramUntilCountReached( - const base::HistogramTester& histogram_tester, - const std::string& histogram_name, - int count) { - int total = 0; - while (true) { - base::ThreadPoolInstance::Get()->FlushForTesting(); - base::RunLoop().RunUntilIdle(); - - total = GetTotalHistogramSamples(histogram_tester, histogram_name); - if (total >= count) - return total; - } -} - -} // namespace - namespace optimization_guide { #if BUILDFLAG(BUILD_WITH_TFLITE_LIB) @@ -206,7 +172,7 @@ if (expect_model_loaded) { RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.ModelExecutor.ModelLoadingResult.PageTopics", 1); histogram_tester.ExpectUniqueSample( "OptimizationGuide.ModelExecutor.ModelLoadingResult.PageTopics", @@ -270,7 +236,7 @@ int expected_count = 0; #endif RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.PageContentAnnotationsService.ContentAnnotated", expected_count); @@ -296,7 +262,7 @@ #if BUILDFLAG(BUILD_WITH_TFLITE_LIB) RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.PageContentAnnotationsService." "ContentAnnotationsStorageStatus", 1); @@ -331,7 +297,7 @@ service->Annotate(history_visit, "sometext"); RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.PageContentAnnotationsService.ContentAnnotated", 1); histogram_tester.ExpectUniqueSample( @@ -339,7 +305,7 @@ 1); RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.PageContentAnnotationsService." "ContentAnnotationsStorageStatus", 1); @@ -379,7 +345,7 @@ ui_test_utils::NavigateToURL(browser(), url); RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.PageContentAnnotationsService.ContentAnnotated", 1); histogram_tester.ExpectUniqueSample( @@ -422,7 +388,7 @@ ui_test_utils::NavigateToURL(browser(), url); RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.ModelExecutor.ModelLoadingResult.PageTopics", 1); histogram_tester.ExpectUniqueSample( "OptimizationGuide.ModelExecutor.ModelLoadingResult.PageTopics", @@ -431,7 +397,7 @@ "OptimizationGuide.ModelExecutor.ModelLoadingDuration.PageTopics", 1); RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.PageContentAnnotationsService.ContentAnnotated", 1); histogram_tester.ExpectTotalCount( @@ -448,7 +414,7 @@ EXPECT_EQ(123, *model_version); RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.PageContentAnnotationsService." "ContentAnnotationsStorageStatus", 1); @@ -505,7 +471,7 @@ ui_test_utils::NavigateToURL(browser(), url); RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.PageContentAnnotationsService.ModelAvailable", 1); histogram_tester.ExpectUniqueSample( @@ -519,7 +485,7 @@ ui_test_utils::NavigateToURL(browser(), url2); RetryForHistogramUntilCountReached( - histogram_tester, + &histogram_tester, "OptimizationGuide.PageContentAnnotationsService.ModelAvailable", 2); histogram_tester.ExpectBucketCount(
diff --git a/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc b/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc index da0fd29a..708ff5ec 100644 --- a/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc +++ b/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
@@ -8,7 +8,6 @@ #include "base/callback_helpers.h" #include "base/files/file_util.h" #include "base/run_loop.h" -#include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/bind.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" @@ -16,6 +15,7 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/optimization_guide/browser_test_util.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h" #include "chrome/browser/optimization_guide/prediction/prediction_manager.h" @@ -47,39 +47,6 @@ namespace { -// Fetch and calculate the total number of samples from all the bins for -// |histogram_name|. Note: from some browertests run (such as chromeos) there -// might be two profiles created, and this will return the total sample count -// across profiles. -int GetTotalHistogramSamples(const base::HistogramTester* histogram_tester, - const std::string& histogram_name) { - std::vector<base::Bucket> buckets = - histogram_tester->GetAllSamples(histogram_name); - int total = 0; - for (const auto& bucket : buckets) - total += bucket.count; - - return total; -} - -// Retries fetching |histogram_name| until it contains at least |count| samples. -void RetryForHistogramUntilCountReached( - const base::HistogramTester* histogram_tester, - const std::string& histogram_name, - int count) { - while (true) { - base::ThreadPoolInstance::Get()->FlushForTesting(); - base::RunLoop().RunUntilIdle(); - - content::FetchHistogramsFromChildProcesses(); - metrics::SubprocessMetricsProvider::MergeHistogramDeltasForTesting(); - - int total = GetTotalHistogramSamples(histogram_tester, histogram_name); - if (total >= count) - return; - } -} - std::unique_ptr<optimization_guide::proto::PredictionModel> GetValidDecisionTreePredictionModel() { std::unique_ptr<optimization_guide::proto::PredictionModel> prediction_model =
diff --git a/chrome/browser/policy/test/promotional_tabs_enabled_policy_browsertest.cc b/chrome/browser/policy/test/promotional_tabs_enabled_policy_browsertest.cc index 9f8c9ff..21b0a49 100644 --- a/chrome/browser/policy/test/promotional_tabs_enabled_policy_browsertest.cc +++ b/chrome/browser/policy/test/promotional_tabs_enabled_policy_browsertest.cc
@@ -17,6 +17,7 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/webui/whats_new/whats_new_ui.h" +#include "chrome/browser/ui/webui/whats_new/whats_new_util.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_version.h" @@ -29,6 +30,7 @@ #include "components/policy/policy_constants.h" #include "components/prefs/pref_service.h" #include "content/public/test/browser_test.h" +#include "net/base/url_util.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -49,6 +51,12 @@ const PromotionalTabsEnabledPolicyTest&) = delete; protected: + static std::string GetWhatsNewAutoURL() { + GURL url(chrome::kChromeUIWhatsNewURL); + return net::AppendQueryParameter(url, "auto", "true") + .possibly_invalid_spec(); + } + PromotionalTabsEnabledPolicyTest() { const std::vector<base::Feature> kEnabledFeatures = { features::kChromeWhatsNewUI, @@ -56,6 +64,7 @@ welcome::kForceEnabled, #endif }; + whats_new::g_force_enable_for_tests = true; scoped_feature_list_.InitWithFeatures(kEnabledFeatures, {}); } ~PromotionalTabsEnabledPolicyTest() override = default; @@ -130,7 +139,7 @@ // One or more onboarding tabs should show. EXPECT_NE(url.possibly_invalid_spec(), chrome::kChromeUINewTabURL); // Welcome should override What's New. - EXPECT_NE(url.possibly_invalid_spec(), chrome::kChromeUIWhatsNewURL); + EXPECT_NE(url.possibly_invalid_spec(), GetWhatsNewAutoURL()); EXPECT_FALSE(search::IsNTPOrRelatedURL(url, browser()->profile())) << url; break; } @@ -211,8 +220,8 @@ break; case BooleanPolicy::kNotConfigured: case BooleanPolicy::kTrue: - // Whats's New should show. - EXPECT_EQ(url.possibly_invalid_spec(), chrome::kChromeUIWhatsNewURL); + // Whats's New should show with auto=true query param. + EXPECT_EQ(url.possibly_invalid_spec(), GetWhatsNewAutoURL()); break; } }
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index adff84d..bc25f20 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -251,6 +251,7 @@ #include "chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h" #include "chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h" #include "chrome/browser/ui/webui/settings/settings_ui.h" +#include "chrome/browser/ui/webui/tab_search/tab_search_prefs.h" #include "chrome/browser/ui/webui/whats_new/whats_new_ui.h" #include "chrome/browser/upgrade_detector/upgrade_detector.h" #include "components/ntp_tiles/custom_links_manager_impl.h" @@ -1236,6 +1237,7 @@ registry); signin::RegisterProfilePrefs(registry); StartupBrowserCreator::RegisterProfilePrefs(registry); + tab_search_prefs::RegisterProfilePrefs(registry); TaskModuleService::RegisterProfilePrefs(registry); UnifiedAutoplayConfig::RegisterProfilePrefs(registry); CartService::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js index 7dd29f4..d27e6fd 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
@@ -3349,8 +3349,8 @@ .call(doCmd('nextObject')) .expectSpeech('Hello') .call(doCmd('nextObject')) - .expectSpeech('Separator content should be read') - .expectBraille('Separator content should be read') + .expectSpeech('Separator content should be read', 'Separator') + .expectBraille('Separator content should be read seprtr') .call(doCmd('nextObject')) .expectSpeech('World') .replay(); @@ -3629,18 +3629,42 @@ const mockFeedback = this.createMockFeedback(); const site = ` <p>start</p> - <div tabindex=0 role="textbox" contenteditable>123</div> + <div tabindex=0 role="textbox" contenteditable><p>abc</p><p>123</p></div> `; this.runWithLoadedTree(site, function(root) { const contentEditable = root.find({role: RoleType.TEXT_FIELD}); this.listenOnce(contentEditable, EventType.FOCUS, function() { mockFeedback.call(press(KeyCode.RIGHT)) + .expectSpeech('b') + .call(press(KeyCode.RIGHT)) + .expectSpeech('c') + .call(press(KeyCode.RIGHT)) + .expectSpeech('\n') + .call(press(KeyCode.RIGHT)) + .expectSpeech('1') + .call(press(KeyCode.RIGHT)) .expectSpeech('2') .call(press(KeyCode.RIGHT)) .expectSpeech('3') .call(press(KeyCode.RIGHT)) .expectSpeech('End of text') + + .call(press(KeyCode.LEFT)) + .expectSpeech('3') + .call(press(KeyCode.LEFT)) + .expectSpeech('2') + .call(press(KeyCode.LEFT)) + .expectSpeech('1') + .call(press(KeyCode.LEFT)) + .expectSpeech('\n') + .call(press(KeyCode.LEFT)) + .expectSpeech('c') + .call(press(KeyCode.LEFT)) + .expectSpeech('b') + .call(press(KeyCode.LEFT)) + .expectSpeech('a') + .replay(); }.bind(this)); contentEditable.focus();
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js index 05a5c682..23ea3b1 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js
@@ -1768,11 +1768,13 @@ mockFeedback.call(this.press(KeyCode.DOWN)) .expectSpeech('Hello') .call(this.press(KeyCode.DOWN)) - .expectSpeech('Separator content should be read') + .expectSpeech('Separator content should be read', 'Separator') .call(this.press(KeyCode.DOWN)) - .expectSpeech('World') + .expectSpeech('World', 'Exited Separator.') .call(this.press(KeyCode.LEFT)) - .expectSpeech('\n') + .expectNextSpeechUtteranceIsNot('\n') + .expectSpeech('Separator content should be read', 'Separator') + .replay(); }); input.focus();
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler.js index 3e416dd..f06a5775 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler.js
@@ -88,33 +88,50 @@ switch (intent.textBoundary) { case IntentTextBoundaryType.CHARACTER: { const text = cur.text.substring(cur.startOffset, cur.startOffset + 1); - // Return false if |text| is empty. Do this to give the user more - // information than just "new line". For example, if moving by character - // moves us to the beginning/end of a separator, we want to include - // additional context. + + // First, handle the case where there is no text to the right of the + // cursor. if (!text) { + // Detect cases where |cur| is immediately before an abstractSpan. + const nextCursor = + cur.end.move(Unit.CHARACTER, Movement.DIRECTIONAL, Dir.FORWARD); + const ancestors = + AutomationUtil.getUniqueAncestors(nextCursor.node, cur.end.node); + + // Scan up only to a root or the editable root. + let ancestor; + while ((ancestor = ancestors.pop()) && + !AutomationPredicate.rootOrEditableRoot(ancestor)) { + const roleInfo = Output.ROLE_INFO[ancestor.role]; + if (roleInfo && roleInfo['inherits'] === 'abstractSpan') { + // Let the caller handle this case. + return false; + } + } + + // It is assumed to be a new line otherwise. ChromeVox.tts.speak('\n', QueueMode.CATEGORY_FLUSH); - return false; + return true; } - // Read character to the right of the cursor. It is assumed to be a new - // line if empty. - // TODO: detect when this is the end of the document; read "end of text" - // if so. - // Use the Output module for feedback so that we get contextual - // information e.g. if we've entered a suggestion, insertion, or - // deletion. + // Read character to the right of the cursor by building a character + // range. let prevRange = null; if (prev) { prevRange = prev.createCharRange(); } const newRange = cur.createCharRange(); + + // Use the Output module for feedback so that we get contextual + // information e.g. if we've entered a suggestion, insertion, or + // deletion. new Output() .withContextFirst() .withRichSpeechAndBraille( newRange, prevRange, OutputEventType.NAVIGATE) .go(); + // Handled. return true; } case IntentTextBoundaryType.LINE_END:
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js index 16f961e..61a926a 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
@@ -646,10 +646,10 @@ if (parent.role === RoleType.WINDOW) { break; } - if (Output.ROLE_INFO_[parent.role] && - Output.ROLE_INFO_[parent.role].contextOrder) { + if (Output.ROLE_INFO[parent.role] && + Output.ROLE_INFO[parent.role].contextOrder) { this.contextOrder_ = - Output.ROLE_INFO_[parent.role].contextOrder || this.contextOrder_; + Output.ROLE_INFO[parent.role].contextOrder || this.contextOrder_; break; } } @@ -1195,7 +1195,7 @@ formatRole_(node, token, buff, options, ruleStr) { options.annotation.push(token); let msg = node.role; - const info = Output.ROLE_INFO_[node.role]; + const info = Output.ROLE_INFO[node.role]; if (node.roleDescription) { msg = node.roleDescription; } else if (info) { @@ -1709,8 +1709,8 @@ return; } - if (Output.ROLE_INFO_[node.role] && - Output.ROLE_INFO_[node.role].ignoreAncestry) { + if (Output.ROLE_INFO[node.role] && + Output.ROLE_INFO[node.role].ignoreAncestry) { return; } @@ -1726,7 +1726,7 @@ contextFirst = []; rest = []; } - if ((Output.ROLE_INFO_[node.role] || {}).contextOrder === + if ((Output.ROLE_INFO[node.role] || {}).contextOrder === OutputContextOrder.FIRST) { contextFirst.push(node); } else { @@ -1860,7 +1860,7 @@ const secondaryRole = secondaryFormatNode.role; const parentRole = - (Output.ROLE_INFO_[secondaryFormatNode.role] || {}).inherits; + (Output.ROLE_INFO[secondaryFormatNode.role] || {}).inherits; if (secondaryRole && eventBlock[secondaryRole] && eventBlock[secondaryRole][secondaryFormatName]) { rule.role = secondaryRole; @@ -1897,7 +1897,7 @@ continue; } - const parentRole = (Output.ROLE_INFO_[formatNode.role] || {}).inherits; + const parentRole = (Output.ROLE_INFO[formatNode.role] || {}).inherits; if (eventBlock[formatNode.role] && eventBlock[formatNode.role][formatName]) { rule.role = formatNode.role; @@ -1963,7 +1963,7 @@ // Navigate is the default event. rule.event = Output.RULES[type] ? type : 'navigate'; const eventBlock = Output.RULES[rule.event]; - const parentRole = (Output.ROLE_INFO_[node.role] || {}).inherits || ''; + const parentRole = (Output.ROLE_INFO[node.role] || {}).inherits || ''; /** * Use Output.RULES for node.role if exists. * If not, use Output.RULES for parentRole if exists. @@ -2451,7 +2451,7 @@ } while (earconFinder = ancestors.pop()) { - const info = Output.ROLE_INFO_[earconFinder.role]; + const info = Output.ROLE_INFO[earconFinder.role]; if (info && info.earconId) { return new OutputEarconAction( info.earconId, node.location || undefined); @@ -2540,9 +2540,8 @@ * inherits: inherits rules from this role. * contextOrder: where to place the context output. * ignoreAncestry: ignores ancestry (context) output for this role. - * @private */ -Output.ROLE_INFO_ = { +Output.ROLE_INFO = { abbr: {msgId: 'tag_abbr', inherits: 'abstractContainer'}, alert: {msgId: 'role_alert'}, alertDialog: @@ -2706,7 +2705,7 @@ inherits: 'abstractRange', earconId: 'LISTBOX' }, - splitter: {msgId: 'role_separator'}, + splitter: {msgId: 'role_separator', inherits: 'abstractSpan'}, status: {msgId: 'role_status', inherits: 'abstractNameFromContents'}, suggestion: { msgId: 'role_suggestion',
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js index 023bfec..12a46c49 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js
@@ -627,8 +627,8 @@ 'graphicsSymbol', 'suggestion', ]); - for (const key in Output.ROLE_INFO_) { - const value = Output.ROLE_INFO_[key]; + for (const key in Output.ROLE_INFO) { + const value = Output.ROLE_INFO[key]; if (value.msgId) { Msgs.getMsg(value.msgId); if (!kNoBrailleMessageRequired.has(key)) {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_next_e2e_test_base.js b/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_next_e2e_test_base.js index 19381eb..1e934bf 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_next_e2e_test_base.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_next_e2e_test_base.js
@@ -29,9 +29,9 @@ DesktopAutomationHandler.announceActions = true; this.originalOutputContextValues_ = {}; - for (const role in Output.ROLE_INFO_) { + for (const role in Output.ROLE_INFO) { this.originalOutputContextValues_[role] = - Output.ROLE_INFO_[role]['contextOrder']; + Output.ROLE_INFO[role]['contextOrder']; } } @@ -126,8 +126,8 @@ * rebaselining when changing context ordering for a specific role. */ forceContextualLastOutput() { - for (const role in Output.ROLE_INFO_) { - Output.ROLE_INFO_[role]['contextOrder'] = OutputContextOrder.LAST; + for (const role in Output.ROLE_INFO) { + Output.ROLE_INFO[role]['contextOrder'] = OutputContextOrder.LAST; } } @@ -135,15 +135,15 @@ * Forces output to place context utterances at the beginning of output. */ forceContextualFirstOutput() { - for (const role in Output.ROLE_INFO_) { - Output.ROLE_INFO_[role]['contextOrder'] = OutputContextOrder.FIRST; + for (const role in Output.ROLE_INFO) { + Output.ROLE_INFO[role]['contextOrder'] = OutputContextOrder.FIRST; } } /** Resets contextual output values to their defaults. */ resetContextualOutput() { - for (const role in Output.ROLE_INFO_) { - Output.ROLE_INFO_[role]['contextOrder'] = + for (const role in Output.ROLE_INFO) { + Output.ROLE_INFO[role]['contextOrder'] = this.originalOutputContextValues_[role]; } }
diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resources/settings/BUILD.gn index be07226..d10716bf 100644 --- a/chrome/browser/resources/settings/BUILD.gn +++ b/chrome/browser/resources/settings/BUILD.gn
@@ -125,9 +125,9 @@ "extension_control_browser_proxy.js", "global_scroll_target_mixin.js", "hats_browser_proxy.js", - "i18n_setup.js", + "i18n_setup.ts", "incompatible_applications_page/incompatible_applications_browser_proxy.js", - "lazy_load.js", + "lazy_load.ts", "lifetime_browser_proxy.js", "metrics_browser_proxy.js", "on_startup_page/on_startup_browser_proxy.js", @@ -142,14 +142,14 @@ "prefs/pref_util.js", "privacy_page/privacy_page_browser_proxy.js", "privacy_page/security_keys_browser_proxy.js", - "reset_page/reset_browser_proxy.js", + "reset_page/reset_browser_proxy.ts", "route.js", "router.js", "safety_check_page/safety_check_browser_proxy.js", "search_engines_page/search_engines_browser_proxy.js", "search_settings.js", - "setting_id_param_util.js", - "settings.js", + "setting_id_param_util.ts", + "settings.ts", "settings_page/main_page_mixin.js", "settings_routes.js", "site_settings/constants.js", @@ -236,7 +236,7 @@ "controls/settings_textarea.js", "controls/settings_toggle_button.js", "downloads_page/downloads_page.js", - "icons.js", + "icons.ts", "settings_menu/settings_menu.js", "on_startup_page/on_startup_page.js", "on_startup_page/startup_url_dialog.js", @@ -264,9 +264,9 @@ "privacy_page/security_keys_reset_dialog.js", "privacy_page/security_keys_set_pin_dialog.js", "privacy_page/security_keys_subpage.js", - "reset_page/reset_page.js", - "reset_page/reset_profile_dialog.js", - "reset_page/reset_profile_banner.js", + "reset_page/reset_page.ts", + "reset_page/reset_profile_dialog.ts", + "reset_page/reset_profile_banner.ts", "safety_check_page/safety_check_child.js", "safety_check_page/safety_check_extensions_child.js", "safety_check_page/safety_check_page.js", @@ -285,9 +285,9 @@ "settings_page/settings_section.js", "settings_page/settings_subpage.js", "settings_ui/settings_ui.js", - "settings_page_css.js", - "settings_shared_css.js", - "settings_vars_css.js", + "settings_page_css.ts", + "settings_shared_css.ts", + "settings_vars_css.ts", "site_favicon.js", "site_settings/add_site_dialog.js", "site_settings/all_sites.js", @@ -382,7 +382,6 @@ "privacy_page:closure_compile", "privacy_page/privacy_review:closure_compile", "privacy_sandbox:closure_compile", - "reset_page:closure_compile", "safety_check_page:closure_compile", "search_engines_page:closure_compile", "search_page:closure_compile", @@ -441,6 +440,8 @@ } js_library("settings") { + sources = + [ "$root_gen_dir/chrome/browser/resources/settings/tsc/settings.js" ] deps = [ ":hats_browser_proxy", ":lifetime_browser_proxy", @@ -457,6 +458,7 @@ "search_engines_page:search_engines_browser_proxy", "settings_ui:settings_ui", ] + extra_deps = [ ":build_ts" ] } js_library("base_mixin") { @@ -471,7 +473,10 @@ } js_library("i18n_setup") { + sources = + [ "$root_gen_dir/chrome/browser/resources/settings/tsc/i18n_setup.js" ] deps = [ "//ui/webui/resources/js:load_time_data.m" ] + extra_deps = [ ":build_ts" ] } js_library("global_scroll_target_mixin") { @@ -487,6 +492,8 @@ } js_library("lazy_load") { + sources = + [ "$root_gen_dir/chrome/browser/resources/settings/tsc/lazy_load.js" ] deps = [ "autofill_page:autofill_section", "autofill_page:payments_section", @@ -511,6 +518,7 @@ "languages_page:languages_subpage", ] } + extra_deps = [ ":build_ts" ] } js_library("lifetime_browser_proxy") { @@ -558,10 +566,12 @@ } js_library("setting_id_param_util") { + sources = [ "$root_gen_dir/chrome/browser/resources/settings/tsc/setting_id_param_util.js" ] deps = [ ":router", "//ui/webui/resources/js:load_time_data.m", ] + extra_deps = [ ":build_ts" ] } js_library("settings_routes") { @@ -626,10 +636,10 @@ html_to_js("web_components_local") { js_files = [ - "icons.js", - "settings_vars_css.js", - "settings_page_css.js", - "settings_shared_css.js", + "icons.ts", + "settings_vars_css.ts", + "settings_page_css.ts", + "settings_shared_css.ts", "site_favicon.js", ] } @@ -709,9 +719,9 @@ "extension_control_browser_proxy.js", "global_scroll_target_mixin.js", "hats_browser_proxy.js", - "i18n_setup.js", - "icons.js", - "lazy_load.js", + "i18n_setup.ts", + "icons.ts", + "lazy_load.ts", "lifetime_browser_proxy.js", "metrics_browser_proxy.js", "on_startup_page/on_startup_browser_proxy.js", @@ -752,10 +762,10 @@ "privacy_page/security_keys_set_pin_dialog.js", "privacy_page/security_keys_subpage.js", "privacy_page/security_page.js", - "reset_page/reset_browser_proxy.js", - "reset_page/reset_page.js", - "reset_page/reset_profile_banner.js", - "reset_page/reset_profile_dialog.js", + "reset_page/reset_browser_proxy.ts", + "reset_page/reset_page.ts", + "reset_page/reset_profile_banner.ts", + "reset_page/reset_profile_dialog.ts", "route.js", "router.js", "safety_check_page/safety_check_browser_proxy.js", @@ -774,19 +784,19 @@ "search_engines_page/search_engines_page.js", "search_page/search_page.js", "search_settings.js", - "setting_id_param_util.js", - "settings.js", + "setting_id_param_util.ts", + "settings.ts", "settings_main/settings_main.js", "settings_menu/settings_menu.js", - "settings_page_css.js", + "settings_page_css.ts", "settings_page/main_page_mixin.js", "settings_page/settings_animated_pages.js", "settings_page/settings_section.js", "settings_page/settings_subpage.js", "settings_routes.js", - "settings_shared_css.js", + "settings_shared_css.ts", "settings_ui/settings_ui.js", - "settings_vars_css.js", + "settings_vars_css.ts", "site_favicon.js", "site_settings/add_site_dialog.js", "site_settings/all_sites_icons.js", @@ -877,6 +887,8 @@ [ "//ui/webui/resources/cr_components/certificate_manager:build_ts" ] } + definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ] + extra_deps = [ ":preprocess", ":preprocess_generated",
diff --git a/chrome/browser/resources/settings/chromeos/BUILD.gn b/chrome/browser/resources/settings/chromeos/BUILD.gn index 1c08bba..3bcc926 100644 --- a/chrome/browser/resources/settings/chromeos/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/BUILD.gn
@@ -16,6 +16,7 @@ preprocess_v3_manifest = "preprocessed_manifest.json" preprocess_gen_v3_manifest = "preprocessed_gen_manifest.json" +browser_settings_tsc_manifest = "browser_settings_tsc_manifest.json" preprocess_external_mojo_manifest = "preprocessed_external_mojo_manifest.json" preprocess_mojo_manifest = "preprocessed_mojo_manifest.json" @@ -193,6 +194,7 @@ ] } else { deps += [ + ":copy_browser_settings_tsc", ":preprocess_gen_v3", ":preprocess_mojo_v3", ":preprocess_v3", @@ -201,6 +203,7 @@ grdp_files += [ "$root_gen_dir/chrome/browser/resources/nearby_share/shared/nearby_share_resources_v3.grdp" ] manifest_files += [ "$target_gen_dir/$preprocess_gen_v3_manifest", + "$target_gen_dir/$browser_settings_tsc_manifest", "$target_gen_dir/$preprocess_v3_manifest", "$target_gen_dir/$preprocess_mojo_manifest", ] @@ -233,6 +236,7 @@ "chromeos/os_printing_page/cups_printers_browser_proxy.js", "chromeos/os_printing_page/cups_printers_entry_manager.js", "chromeos/bluetooth_page/bluetooth_page_browser_proxy.js", + "chromeos/os_about_page/device_name_browser_proxy.js", "chromeos/os_reset_page/os_reset_browser_proxy.js", "chromeos/os_settings.js", "chromeos/personalization_page/change_picture_browser_proxy.js", @@ -241,7 +245,6 @@ "controls/pref_control_behavior.js", "controls/settings_boolean_control_behavior.js", "extension_control_browser_proxy.js", - "i18n_setup.js", "languages_page/languages.js", "languages_page/languages_browser_proxy.js", "lifetime_browser_proxy.js", @@ -258,7 +261,25 @@ "privacy_page/privacy_page_browser_proxy.js", "router.js", "search_engines_page/search_engines_browser_proxy.js", + ] +} + +# Since Browser Settings is migrating to TypeScript (crbug.com/1234307), and +# some files are still shared with CrOS Settings, need to copy the transpiled +# JS file from TS compiler's output. +preprocess_if_expr("copy_browser_settings_tsc") { + defines = chrome_grit_defines + deps = [ "..:build_ts" ] + in_folder = "$root_gen_dir/chrome/browser/resources/settings/tsc" + out_folder = "$target_gen_dir/$preprocess_folder_v3" + out_manifest = "$target_gen_dir/$browser_settings_tsc_manifest" + in_files = [ + "i18n_setup.js", + "icons.js", "setting_id_param_util.js", + "settings_page_css.js", + "settings_shared_css.js", + "settings_vars_css.js", ] } @@ -384,12 +405,11 @@ "chromeos/os_a11y_page/manage_a11y_page_browser_proxy.m.js", "chromeos/os_a11y_page/tts_subpage.m.js", "chromeos/os_a11y_page/tts_subpage_browser_proxy.m.js", - "chromeos/os_about_page/channel_switcher_dialog.m.js", - "chromeos/os_about_page/detailed_build_info.m.js", - "chromeos/os_about_page/device_name_browser_proxy.m.js", - "chromeos/os_about_page/edit_hostname_dialog.m.js", - "chromeos/os_about_page/os_about_page.m.js", - "chromeos/os_about_page/update_warning_dialog.m.js", + "chromeos/os_about_page/channel_switcher_dialog.js", + "chromeos/os_about_page/detailed_build_info.js", + "chromeos/os_about_page/edit_hostname_dialog.js", + "chromeos/os_about_page/os_about_page.js", + "chromeos/os_about_page/update_warning_dialog.js", "chromeos/os_apps_page/android_apps_browser_proxy.m.js", "chromeos/os_apps_page/android_apps_subpage.m.js", "chromeos/os_apps_page/app_notifications_page/app_notifications_subpage.js", @@ -511,7 +531,6 @@ "controls/settings_slider.js", "controls/settings_textarea.js", "controls/settings_toggle_button.js", - "icons.js", "people_page/signout_dialog.js", "people_page/sync_account_control.js", "people_page/sync_controls.js", @@ -523,9 +542,6 @@ "settings_page/settings_animated_pages.js", "settings_page/settings_section.js", "settings_page/settings_subpage.js", - "settings_page_css.js", - "settings_shared_css.js", - "settings_vars_css.js", ] } @@ -708,7 +724,7 @@ "nearby_share_page:polymer3_elements", "os_a11y_page:polymer3_elements", "os_a11y_page:web_components", - "os_about_page:polymer3_elements", + "os_about_page:web_components", "os_apps_page:polymer3_elements", "os_apps_page/app_management_page:polymer3_elements", "os_apps_page/app_management_page/borealis_page:polymer3_elements",
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_about_page/BUILD.gn index b1b4c16..32c4417 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/os_about_page/BUILD.gn
@@ -3,39 +3,35 @@ # found in the LICENSE file. import("//third_party/closure_compiler/compile_js.gni") -import("//tools/polymer/polymer.gni") -import("//ui/webui/resources/tools/js_modulizer.gni") +import("//tools/polymer/html_to_js.gni") import("../os_settings.gni") js_type_check("closure_compile_module") { closure_flags = os_settings_closure_flags is_polymer3 = true deps = [ - ":channel_switcher_dialog.m", - ":detailed_build_info.m", - ":device_name_browser_proxy.m", - ":edit_hostname_dialog.m", - ":os_about_page.m", - ":update_warning_dialog.m", + ":channel_switcher_dialog", + ":detailed_build_info", + ":device_name_browser_proxy", + ":edit_hostname_dialog", + ":os_about_page", + ":update_warning_dialog", ] } -js_library("channel_switcher_dialog.m") { - sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/os_about_page/channel_switcher_dialog.m.js" ] +js_library("channel_switcher_dialog") { deps = [ "../../about_page:about_page_browser_proxy", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", "//ui/webui/resources/js:assert.m", "//ui/webui/resources/js:load_time_data.m", ] - extra_deps = [ ":channel_switcher_dialog_module" ] } -js_library("detailed_build_info.m") { - sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.m.js" ] +js_library("detailed_build_info") { deps = [ - ":channel_switcher_dialog.m", - ":edit_hostname_dialog.m", + ":channel_switcher_dialog", + ":edit_hostname_dialog", "..:deep_linking_behavior.m", "..:os_route.m", "../..:router", @@ -45,31 +41,25 @@ "//ui/webui/resources/cr_elements/policy:cr_tooltip_icon.m", "//ui/webui/resources/js:i18n_behavior.m", ] - extra_deps = [ ":detailed_build_info_module" ] } -js_library("device_name_browser_proxy.m") { - sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/os_about_page/device_name_browser_proxy.m.js" ] +js_library("device_name_browser_proxy") { deps = [ "//ui/webui/resources/js:cr.m" ] externs_list = [ "$externs_path/chrome_send.js" ] - extra_deps = [ ":modulize" ] } -js_library("edit_hostname_dialog.m") { - sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/os_about_page/edit_hostname_dialog.m.js" ] +js_library("edit_hostname_dialog") { deps = [ "../../about_page:about_page_browser_proxy", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", "//ui/webui/resources/js:assert.m", "//ui/webui/resources/js:load_time_data.m", ] - extra_deps = [ ":edit_hostname_dialog_module" ] } -js_library("os_about_page.m") { - sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.m.js" ] +js_library("os_about_page") { deps = [ - ":device_name_browser_proxy.m", + ":device_name_browser_proxy", "..:deep_linking_behavior.m", "..:os_route.m", "../..:i18n_setup", @@ -83,75 +73,22 @@ "//ui/webui/resources/js:parse_html_subset.m", "//ui/webui/resources/js:web_ui_listener_behavior.m", ] - extra_deps = [ ":os_about_page_module" ] } -js_library("update_warning_dialog.m") { - sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/os_about_page/update_warning_dialog.m.js" ] +js_library("update_warning_dialog") { deps = [ "../../about_page:about_page_browser_proxy", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", "//ui/webui/resources/js:i18n_behavior.m", ] - extra_deps = [ ":update_warning_dialog_module" ] } -group("polymer3_elements") { - public_deps = [ - ":channel_switcher_dialog_module", - ":detailed_build_info_module", - ":edit_hostname_dialog_module", - ":modulize", - ":os_about_page_module", - ":update_warning_dialog_module", +html_to_js("web_components") { + js_files = [ + "channel_switcher_dialog.js", + "detailed_build_info.js", + "edit_hostname_dialog.js", + "os_about_page.js", + "update_warning_dialog.js", ] } - -polymer_modulizer("channel_switcher_dialog") { - js_file = "channel_switcher_dialog.js" - html_file = "channel_switcher_dialog.html" - html_type = "dom-module" - migrated_imports = os_settings_migrated_imports - namespace_rewrites = os_settings_namespace_rewrites - auto_imports = os_settings_auto_imports -} - -polymer_modulizer("detailed_build_info") { - js_file = "detailed_build_info.js" - html_file = "detailed_build_info.html" - html_type = "dom-module" - migrated_imports = os_settings_migrated_imports - namespace_rewrites = os_settings_namespace_rewrites - auto_imports = os_settings_auto_imports -} - -polymer_modulizer("edit_hostname_dialog") { - js_file = "edit_hostname_dialog.js" - html_file = "edit_hostname_dialog.html" - html_type = "dom-module" - migrated_imports = os_settings_migrated_imports - namespace_rewrites = os_settings_namespace_rewrites - auto_imports = os_settings_auto_imports -} - -polymer_modulizer("os_about_page") { - js_file = "os_about_page.js" - html_file = "os_about_page.html" - html_type = "dom-module" - migrated_imports = os_settings_migrated_imports - namespace_rewrites = os_settings_namespace_rewrites - auto_imports = os_settings_auto_imports -} - -polymer_modulizer("update_warning_dialog") { - js_file = "update_warning_dialog.js" - html_file = "update_warning_dialog.html" - html_type = "dom-module" - migrated_imports = os_settings_migrated_imports - namespace_rewrites = os_settings_namespace_rewrites - auto_imports = os_settings_auto_imports -} - -js_modulizer("modulize") { - input_files = [ "device_name_browser_proxy.js" ] -}
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/channel_switcher_dialog.html b/chrome/browser/resources/settings/chromeos/os_about_page/channel_switcher_dialog.html index 36ccecd55..348b21d 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/channel_switcher_dialog.html +++ b/chrome/browser/resources/settings/chromeos/os_about_page/channel_switcher_dialog.html
@@ -1,73 +1,56 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> - -<link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_radio_button/cr_radio_button.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_radio_group/cr_radio_group.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/iron-selector/iron-selector.html"> -<link rel="import" href="../../about_page/about_page_browser_proxy.html"> -<link rel="import" href="../../settings_shared_css.html"> -<link rel="import" href="chrome://resources/html/assert.html"> -<link rel="import" href="chrome://resources/html/load_time_data.html"> - -<dom-module id="settings-channel-switcher-dialog"> - <template> - <style include="settings-shared"> - #warningSelector > :not(.iron-selected) { - display: none; - } - </style> - <cr-dialog id="dialog" close-text="$i18n{close}"> - <div slot="title">$i18n{aboutChangeChannel}</div> - <div slot="body"> - <!-- TODO(dbeam): this can be policy-controlled. Show this in the UI. - https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ChromeOsReleaseChannel - --> - <cr-radio-group on-selected-changed="onChannelSelectionChanged_"> - <cr-radio-button name="[[browserChannelEnum_.STABLE]]"> - $i18n{aboutChannelDialogStable} - </cr-radio-button> - <cr-radio-button name="[[browserChannelEnum_.BETA]]"> - $i18n{aboutChannelDialogBeta} - </cr-radio-button> - <cr-radio-button name="[[browserChannelEnum_.DEV]]"> - $i18n{aboutChannelDialogDev} - </cr-radio-button> - </cr-radio-group> - <iron-selector id="warningSelector"> - <div> - <h2>$i18n{aboutDelayedWarningTitle}</h2> - <div>[[substituteString_( - '$i18nPolymer{aboutDelayedWarningMessage}', - '$i18nPolymer{aboutOsProductTitle}')]]</div> - </div> - <div> - <h2>$i18n{aboutPowerwashWarningTitle}</h2> - <div>$i18n{aboutPowerwashWarningMessage}</div> - </div> - <div> - <h2>$i18n{aboutUnstableWarningTitle}</h2> - <div>[[substituteString_( - '$i18nPolymer{aboutUnstableWarningMessage}', - '$i18nPolymer{aboutOsProductTitle}')]]</div> - </div> - </iron-selector> +<style include="settings-shared"> + #warningSelector > :not(.iron-selected) { + display: none; + } +</style> +<cr-dialog id="dialog" close-text="$i18n{close}"> + <div slot="title">$i18n{aboutChangeChannel}</div> + <div slot="body"> + <!-- TODO(dbeam): this can be policy-controlled. Show this in the UI. + https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ChromeOsReleaseChannel + --> + <cr-radio-group on-selected-changed="onChannelSelectionChanged_"> + <cr-radio-button name="[[browserChannelEnum_.STABLE]]"> + $i18n{aboutChannelDialogStable} + </cr-radio-button> + <cr-radio-button name="[[browserChannelEnum_.BETA]]"> + $i18n{aboutChannelDialogBeta} + </cr-radio-button> + <cr-radio-button name="[[browserChannelEnum_.DEV]]"> + $i18n{aboutChannelDialogDev} + </cr-radio-button> + </cr-radio-group> + <iron-selector id="warningSelector"> + <div> + <h2>$i18n{aboutDelayedWarningTitle}</h2> + <div>[[substituteString_( + '$i18nPolymer{aboutDelayedWarningMessage}', + '$i18nPolymer{aboutOsProductTitle}')]]</div> </div> - <div slot="button-container"> - <cr-button class="cancel-button" on-click="onCancelTap_" - id="cancel">$i18n{cancel}</cr-button> - <cr-button id="changeChannel" class="action-button" - on-click="onChangeChannelTap_" - hidden="[[!shouldShowButtons_.changeChannel]]"> - $i18n{aboutChangeChannel} - </cr-button> - <cr-button id="changeChannelAndPowerwash" class="action-button" - on-click="onChangeChannelAndPowerwashTap_" - hidden="[[!shouldShowButtons_.changeChannelAndPowerwash]]"> - $i18n{aboutChangeChannelAndPowerwash} - </cr-button> + <div> + <h2>$i18n{aboutPowerwashWarningTitle}</h2> + <div>$i18n{aboutPowerwashWarningMessage}</div> </div> - </cr-dialog> - </template> - <script src="channel_switcher_dialog.js"></script> -</dom-module> + <div> + <h2>$i18n{aboutUnstableWarningTitle}</h2> + <div>[[substituteString_( + '$i18nPolymer{aboutUnstableWarningMessage}', + '$i18nPolymer{aboutOsProductTitle}')]]</div> + </div> + </iron-selector> + </div> + <div slot="button-container"> + <cr-button class="cancel-button" on-click="onCancelTap_" + id="cancel">$i18n{cancel}</cr-button> + <cr-button id="changeChannel" class="action-button" + on-click="onChangeChannelTap_" + hidden="[[!shouldShowButtons_.changeChannel]]"> + $i18n{aboutChangeChannel} + </cr-button> + <cr-button id="changeChannelAndPowerwash" class="action-button" + on-click="onChangeChannelAndPowerwashTap_" + hidden="[[!shouldShowButtons_.changeChannelAndPowerwash]]"> + $i18n{aboutChangeChannelAndPowerwash} + </cr-button> + </div> +</cr-dialog>
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/channel_switcher_dialog.js b/chrome/browser/resources/settings/chromeos/os_about_page/channel_switcher_dialog.js index e39e438..3e30edc5 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/channel_switcher_dialog.js +++ b/chrome/browser/resources/settings/chromeos/os_about_page/channel_switcher_dialog.js
@@ -2,7 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -(function() { +import '//resources/cr_elements/cr_dialog/cr_dialog.m.js'; +import '//resources/cr_elements/cr_button/cr_button.m.js'; +import '//resources/cr_elements/cr_radio_button/cr_radio_button.m.js'; +import '//resources/cr_elements/cr_radio_group/cr_radio_group.m.js'; +import '//resources/polymer/v3_0/iron-selector/iron-selector.js'; +import '../../settings_shared_css.js'; + +import {assert, assertNotReached} from '//resources/js/assert.m.js'; +import {loadTimeData} from '//resources/js/load_time_data.m.js'; +import {afterNextRender, flush, html, Polymer, TemplateInstanceBase, Templatizer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {AboutPageBrowserProxy, AboutPageBrowserProxyImpl, AboutPageUpdateInfo, BrowserChannel, browserChannelToI18nId, ChannelInfo, isTargetChannelMoreStable, RegulatoryInfo, TPMFirmwareUpdateStatusChangedEvent, UpdateStatus, UpdateStatusChangedEvent, VersionInfo} from '../../about_page/about_page_browser_proxy.js'; + /** */ @@ -20,6 +32,7 @@ * release channel to notify parents of this dialog. */ Polymer({ + _template: html`{__html_template__}`, is: 'settings-channel-switcher-dialog', properties: { @@ -45,12 +58,12 @@ }, }, - /** @private {?settings.AboutPageBrowserProxy} */ + /** @private {?AboutPageBrowserProxy} */ browserProxy_: null, /** @override */ ready() { - this.browserProxy_ = settings.AboutPageBrowserProxyImpl.getInstance(); + this.browserProxy_ = AboutPageBrowserProxyImpl.getInstance(); this.browserProxy_.getChannelInfo().then(info => { this.currentChannel_ = info.currentChannel; this.targetChannel_ = info.targetChannel; @@ -125,8 +138,7 @@ return; } - if (settings.isTargetChannelMoreStable( - this.currentChannel_, selectedChannel)) { + if (isTargetChannelMoreStable(this.currentChannel_, selectedChannel)) { // More stable channel selected. For non managed devices, notify the user // about powerwash. if (loadTimeData.getBoolean('aboutEnterpriseManaged')) { @@ -157,4 +169,3 @@ return loadTimeData.substituteString(format, replacement); }, }); -})(); \ No newline at end of file
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.html b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.html index 8c1d26fe..70c8d24 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.html +++ b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.html
@@ -1,133 +1,108 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> +<style include="settings-shared"> + cr-policy-indicator { + margin-inline-start: var(--cr-controlled-by-spacing); + } -<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html"> -<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_indicator.html"> -<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.html"> -<link rel="import" href="chrome://resources/cr_elements/policy/cr_tooltip_icon.html"> -<link rel="import" href="chrome://resources/html/assert.html"> -<link rel="import" href="chrome://resources/html/cr/ui/focus_without_ink.html"> -<link rel="import" href="chrome://resources/html/i18n_behavior.html"> -<link rel="import" href="../../about_page/about_page_browser_proxy.html"> -<link rel="import" href="../../i18n_setup.html"> -<link rel="import" href="../../router.html"> -<link rel="import" href="../../settings_shared_css.html"> -<link rel="import" href="../deep_linking_behavior.html"> -<link rel="import" href="../localized_link/localized_link.html"> -<link rel="import" href="../os_route.html"> -<link rel="import" href="channel_switcher_dialog.html"> -<link rel="import" href="device_name_browser_proxy.html"> -<link rel="import" href="edit_hostname_dialog.html"> + /* The command line string can contain very long substrings that + * don't have any spaces, need to force a line break in such cases. */ + #command-line { + overflow-wrap: break-word; + width: 100%; + } -<dom-module id="settings-detailed-build-info"> - <template> - <style include="settings-shared"> - cr-policy-indicator { - margin-inline-start: var(--cr-controlled-by-spacing); - } - - /* The command line string can contain very long substrings that - * don't have any spaces, need to force a line break in such cases. */ - #command-line { - overflow-wrap: break-word; - width: 100%; - } - - #managedEolTooltipIcon { - margin-inline-end: 54px; - } - </style> - <div class="settings-box two-line"> - <div class="start"> - <div role="heading" aria-level="2">$i18n{aboutChannelLabel}</div> - <div id="currentlyOnChannelText" aria-hidden="true" class="secondary"> - [[currentlyOnChannelText_]] - </div> - </div> - <div class="separator"></div> - <cr-button on-click="onChangeChannelTap_" - aria-describedby="currentlyOnChannelText" - disabled="[[!canChangeChannel_]]" - deep-link-focus-id$="[[Setting.kChangeChromeChannel]]"> - $i18n{aboutChangeChannel} - </cr-button> - <template is="dom-if" if="[[!canChangeChannel_]]"> - <cr-policy-indicator - indicator-source-name="[[getChangeChannelIndicatorSourceName_( - canChangeChannel_)]]" - indicator-type="[[getChangeChannelIndicatorType_( - canChangeChannel_)]]"> - </cr-policy-indicator> - </template> - <template is="dom-if" if="[[showChannelSwitcherDialog_]]" restamp> - <settings-channel-switcher-dialog - on-close="onChannelSwitcherDialogClosed_"> - </settings-channel-switcher-dialog> - </template> + #managedEolTooltipIcon { + margin-inline-end: 54px; + } +</style> +<div class="settings-box two-line"> + <div class="start"> + <div role="heading" aria-level="2">$i18n{aboutChannelLabel}</div> + <div id="currentlyOnChannelText" aria-hidden="true" class="secondary"> + [[currentlyOnChannelText_]] </div> - <div id="endOfLifeSectionContainer" - class="settings-box two-line single-column" - hidden="[[shouldHideEolInfo_]]"> - <div role="heading" aria-level="2">$i18n{aboutEndOfLifeTitle}</div> - <settings-localized-link class="secondary" - localized-string="[[eolMessageWithMonthAndYear]]"> - </settings-localized-link> - </div> - <template is="dom-if" if="[[isManaged_]]"> - <div class="settings-box two-line"> - <div class="start" aria-hidden="true"> - <div role="heading">$i18n{aboutEndOfLifeTitle}</div> - <div class="secondary"> - $i18n{aboutManagedEndOfLifeSubtitle} - </div> - </div> - <cr-tooltip-icon - id="managedEolTooltipIcon" - icon-class="cr20:domain" - tooltip-text="$i18n{aboutManagedEndOfLifeSubtitle}" - icon-aria-label="$i18n{aboutManagedEndOfLifeSubtitle}" - tooltip-position="bottom"> - </cr-tooltip-icon> - </div> - </template> - <template is="dom-if" if="[[isHostnameSettingEnabled_]]"> - <div class="settings-box two-line"> - <div class="start"> - <div role="heading">$i18n{aboutDeviceName}</div> - <div id="deviceName" aria-hidden="true" class="secondary"> - [[deviceNameText_]] - </div> - </div> - <cr-icon-button class="icon-edit" on-click="onEditHostnameTap_"> - </cr-icon-button> - </div> - <template is="dom-if" if="[[showEditHostnameDialog_]]" restamp> - <edit-hostname-dialog - on-close="onEditHostnameDialogClosed_"> - </edit-hostname-dialog> - </template> - </template> - <div id="buildDetailsLinkContainer" class="settings-box"> - <div class="start" id="aboutBuildDetailsTitle"> - $i18n{aboutBuildDetailsTitle} - </div> - <cr-icon-button id="copyBuildDetailsButton" class="icon-copy-content" - aria-labelledby="copyBuildDetailsButtonToolTip" - on-click="onCopyBuildDetailsToClipBoardTap_" - disabled="[[!copyToClipBoardEnabled_(versionInfo_, channelInfo_)]]" - deep-link-focus-id$="[[Setting.kCopyDetailedBuildInfo]]"> - </cr-icon-button> - <paper-tooltip id="copyBuildDetailsButtonToolTip" - for="copyBuildDetailsButton" - position="bottom" fit-to-visible-bounds> - $i18n{aboutBuildDetailsCopyTooltipLabel} - </paper-tooltip> - <div class="separator"></div> - <cr-icon-button on-click="onVisitBuildDetailsPageTap_" - aria-labelledby="aboutBuildDetailsTitle" - class="icon-external"> - </cr-icon-button> - </div> - <div class="hr"></div> + </div> + <div class="separator"></div> + <cr-button on-click="onChangeChannelTap_" + aria-describedby="currentlyOnChannelText" + disabled="[[!canChangeChannel_]]" + deep-link-focus-id$="[[Setting.kChangeChromeChannel]]"> + $i18n{aboutChangeChannel} + </cr-button> + <template is="dom-if" if="[[!canChangeChannel_]]"> + <cr-policy-indicator + indicator-source-name="[[getChangeChannelIndicatorSourceName_( + canChangeChannel_)]]" + indicator-type="[[getChangeChannelIndicatorType_( + canChangeChannel_)]]"> + </cr-policy-indicator> </template> - <script src="detailed_build_info.js"></script> -</dom-module> + <template is="dom-if" if="[[showChannelSwitcherDialog_]]" restamp> + <settings-channel-switcher-dialog + on-close="onChannelSwitcherDialogClosed_"> + </settings-channel-switcher-dialog> + </template> +</div> +<div id="endOfLifeSectionContainer" + class="settings-box two-line single-column" + hidden="[[shouldHideEolInfo_]]"> + <div role="heading" aria-level="2">$i18n{aboutEndOfLifeTitle}</div> + <settings-localized-link class="secondary" + localized-string="[[eolMessageWithMonthAndYear]]"> + </settings-localized-link> +</div> +<template is="dom-if" if="[[isManaged_]]"> + <div class="settings-box two-line"> + <div class="start" aria-hidden="true"> + <div role="heading">$i18n{aboutEndOfLifeTitle}</div> + <div class="secondary"> + $i18n{aboutManagedEndOfLifeSubtitle} + </div> + </div> + <cr-tooltip-icon + id="managedEolTooltipIcon" + icon-class="cr20:domain" + tooltip-text="$i18n{aboutManagedEndOfLifeSubtitle}" + icon-aria-label="$i18n{aboutManagedEndOfLifeSubtitle}" + tooltip-position="bottom"> + </cr-tooltip-icon> + </div> +</template> +<template is="dom-if" if="[[isHostnameSettingEnabled_]]"> + <div class="settings-box two-line"> + <div class="start"> + <div role="heading">$i18n{aboutDeviceName}</div> + <div id="deviceName" aria-hidden="true" class="secondary"> + [[deviceNameText_]] + </div> + </div> + <cr-icon-button class="icon-edit" on-click="onEditHostnameTap_"> + </cr-icon-button> + </div> + <template is="dom-if" if="[[showEditHostnameDialog_]]" restamp> + <edit-hostname-dialog + on-close="onEditHostnameDialogClosed_"> + </edit-hostname-dialog> + </template> +</template> +<div id="buildDetailsLinkContainer" class="settings-box"> + <div class="start" id="aboutBuildDetailsTitle"> + $i18n{aboutBuildDetailsTitle} + </div> + <cr-icon-button id="copyBuildDetailsButton" class="icon-copy-content" + aria-labelledby="copyBuildDetailsButtonToolTip" + on-click="onCopyBuildDetailsToClipBoardTap_" + disabled="[[!copyToClipBoardEnabled_(versionInfo_, channelInfo_)]]" + deep-link-focus-id$="[[Setting.kCopyDetailedBuildInfo]]"> + </cr-icon-button> + <paper-tooltip id="copyBuildDetailsButtonToolTip" + for="copyBuildDetailsButton" + position="bottom" fit-to-visible-bounds> + $i18n{aboutBuildDetailsCopyTooltipLabel} + </paper-tooltip> + <div class="separator"></div> + <cr-icon-button on-click="onVisitBuildDetailsPageTap_" + aria-labelledby="aboutBuildDetailsTitle" + class="icon-external"> + </cr-icon-button> +</div> +<div class="hr"></div>
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js index d77ddbd..3da862b 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js +++ b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js
@@ -7,13 +7,36 @@ * information for ChromeOS. */ +import '//resources/cr_elements/cr_button/cr_button.m.js'; +import '//resources/cr_elements/policy/cr_policy_indicator.m.js'; +import '//resources/cr_elements/policy/cr_tooltip_icon.m.js'; +import '../../settings_shared_css.js'; +import '../localized_link/localized_link.js'; +import './channel_switcher_dialog.js'; +import './edit_hostname_dialog.js'; + +import {CrPolicyIndicatorType} from '//resources/cr_elements/policy/cr_policy_indicator_behavior.m.js'; +import {assert, assertNotReached} from '//resources/js/assert.m.js'; +import {focusWithoutInk} from '//resources/js/cr/ui/focus_without_ink.m.js'; +import {I18nBehavior} from '//resources/js/i18n_behavior.m.js'; +import {afterNextRender, flush, html, Polymer, TemplateInstanceBase, Templatizer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {AboutPageBrowserProxy, AboutPageBrowserProxyImpl, AboutPageUpdateInfo, BrowserChannel, browserChannelToI18nId, ChannelInfo, isTargetChannelMoreStable, RegulatoryInfo, TPMFirmwareUpdateStatusChangedEvent, UpdateStatus, UpdateStatusChangedEvent, VersionInfo} from '../../about_page/about_page_browser_proxy.js'; +import {loadTimeData} from '../../i18n_setup.js'; +import {Route, RouteObserverBehavior, Router} from '../../router.js'; +import {DeepLinkingBehavior} from '../deep_linking_behavior.m.js'; +import {routes} from '../os_route.m.js'; + +import {DeviceNameBrowserProxy, DeviceNameBrowserProxyImpl} from './device_name_browser_proxy.js'; + Polymer({ + _template: html`{__html_template__}`, is: 'settings-detailed-build-info', behaviors: [ DeepLinkingBehavior, I18nBehavior, - settings.RouteObserverBehavior, + RouteObserverBehavior, ], properties: { @@ -86,7 +109,7 @@ /** @override */ ready() { - const browserProxy = settings.AboutPageBrowserProxyImpl.getInstance(); + const browserProxy = AboutPageBrowserProxyImpl.getInstance(); browserProxy.pageReady(); browserProxy.getVersionInfo().then(versionInfo => { @@ -101,12 +124,12 @@ }, /** - * @param {!settings.Route} route - * @param {!settings.Route} oldRoute + * @param {!Route} route + * @param {!Route} oldRoute */ currentRouteChanged(route, oldRoute) { // Does not apply to this page. - if (route !== settings.routes.DETAILED_BUILD_INFO) { + if (route !== routes.DETAILED_BUILD_INFO) { return; } @@ -123,7 +146,7 @@ /** @private */ updateChannelInfo_() { - const browserProxy = settings.AboutPageBrowserProxyImpl.getInstance(); + const browserProxy = AboutPageBrowserProxyImpl.getInstance(); // canChangeChannel() call is expected to be low-latency, so fetch this // value by itself to ensure UI consistency (see https://crbug.com/848750). @@ -138,8 +161,7 @@ // Display the target channel for the 'Currently on' message. this.currentlyOnChannelText_ = this.i18n( 'aboutCurrentlyOnChannel', - this.i18n( - settings.browserChannelToI18nId(info.targetChannel, info.isLts))); + this.i18n(browserChannelToI18nId(info.targetChannel, info.isLts))); }); }, @@ -238,14 +260,14 @@ /** @private */ onChannelSwitcherDialogClosed_() { this.showChannelSwitcherDialog_ = false; - cr.ui.focusWithoutInk(assert(this.$$('cr-button'))); + focusWithoutInk(assert(this.$$('cr-button'))); this.updateChannelInfo_(); }, /** @private */ onEditHostnameDialogClosed_() { this.showEditHostnameDialog_ = false; - cr.ui.focusWithoutInk(assert(this.$$('cr-button'))); + focusWithoutInk(assert(this.$$('cr-button'))); // TODO(jhawkins): Verify hostname property updated at this point. }, });
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/device_name_browser_proxy.js b/chrome/browser/resources/settings/chromeos/os_about_page/device_name_browser_proxy.js index df0e1f1..f8cfff17 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/device_name_browser_proxy.js +++ b/chrome/browser/resources/settings/chromeos/os_about_page/device_name_browser_proxy.js
@@ -3,7 +3,7 @@ // found in the LICENSE file. // clang-format off -// #import {addSingletonGetter, sendWithPromise} from 'chrome://resources/js/cr.m.js'; +import {addSingletonGetter, sendWithPromise} from 'chrome://resources/js/cr.m.js'; // clang-format on /** @@ -11,10 +11,10 @@ * deviceName: string, * }} */ -/* #export */ let DeviceNameMetadata; +export let DeviceNameMetadata; /** @interface */ -/* #export */ class DeviceNameBrowserProxy { +export class DeviceNameBrowserProxy { /** * Queries the system for metadata about the device name. * @return {!Promise<!DeviceNameMetadata>} @@ -25,13 +25,13 @@ /** * @implements {DeviceNameBrowserProxy} */ -/* #export */ class DeviceNameBrowserProxyImpl { +export class DeviceNameBrowserProxyImpl { /** @override */ getDeviceNameMetadata() { - return cr.sendWithPromise('getDeviceNameMetadata'); + return sendWithPromise('getDeviceNameMetadata'); } } // The singleton instance_ is replaced with a test version of this wrapper // during testing. -cr.addSingletonGetter(DeviceNameBrowserProxyImpl); +addSingletonGetter(DeviceNameBrowserProxyImpl);
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/edit_hostname_dialog.html b/chrome/browser/resources/settings/chromeos/os_about_page/edit_hostname_dialog.html index 8a64870..251350654 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/edit_hostname_dialog.html +++ b/chrome/browser/resources/settings/chromeos/os_about_page/edit_hostname_dialog.html
@@ -1,50 +1,32 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> +<style include="settings-shared"> + cr-input { + --cr-input-error-display: none; + } -<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_input/cr_input.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_radio_button/cr_radio_button.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_radio_group/cr_radio_group.html"> -<link rel="import" href="chrome://resources/html/assert.html"> -<link rel="import" href="chrome://resources/html/load_time_data.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/iron-selector/iron-selector.html"> -<link rel="import" href="../../about_page/about_page_browser_proxy.html"> -<link rel="import" href="../../settings_shared_css.html"> + #input-subtext { + display: flex; + } -<dom-module id="edit-hostname-dialog"> - <template> - <style include="settings-shared"> - cr-input { - --cr-input-error-display: none; - } - - #input-subtext { - display: flex; - } - - #input-subtext span:last-child { - margin-inline-start: auto; - } - </style> - <cr-dialog id="dialog" show-on-attach> - <div slot="title">$i18n{aboutEditDeviceName}</div> - <div slot="body"> - <div>$i18n{aboutDeviceNameInfo}</div> - <cr-input></cr-input> - <div id="input-subtext"> - <span>$i18n{aboutDeviceNameConstraints}</span> - <span>1/15</span> - </div> - </div> - <div slot="button-container"> - <cr-button class="cancel-button" on-click="onCancelTap_"> - $i18n{cancel} - </cr-button> - <cr-button class="action-button" on-click="onDoneTap_"> - $i18n{done} - </cr-button> - </div> - </cr-dialog> - </template> - <script src="edit_hostname_dialog.js"></script> -</dom-module> + #input-subtext span:last-child { + margin-inline-start: auto; + } +</style> +<cr-dialog id="dialog" show-on-attach> + <div slot="title">$i18n{aboutEditDeviceName}</div> + <div slot="body"> + <div>$i18n{aboutDeviceNameInfo}</div> + <cr-input></cr-input> + <div id="input-subtext"> + <span>$i18n{aboutDeviceNameConstraints}</span> + <span>1/15</span> + </div> + </div> + <div slot="button-container"> + <cr-button class="cancel-button" on-click="onCancelTap_"> + $i18n{cancel} + </cr-button> + <cr-button class="action-button" on-click="onDoneTap_"> + $i18n{done} + </cr-button> + </div> +</cr-dialog>
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/edit_hostname_dialog.js b/chrome/browser/resources/settings/chromeos/os_about_page/edit_hostname_dialog.js index fa76e09..d27796e0 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/edit_hostname_dialog.js +++ b/chrome/browser/resources/settings/chromeos/os_about_page/edit_hostname_dialog.js
@@ -6,7 +6,22 @@ * @fileoverview 'edit-hostname-dialog' is a component allowing the * user to edit the device hostname. */ +import '//resources/cr_elements/cr_button/cr_button.m.js'; +import '//resources/cr_elements/cr_dialog/cr_dialog.m.js'; +import '//resources/cr_elements/cr_input/cr_input.m.js'; +import '//resources/cr_elements/cr_radio_button/cr_radio_button.m.js'; +import '//resources/cr_elements/cr_radio_group/cr_radio_group.m.js'; +import '//resources/polymer/v3_0/iron-selector/iron-selector.js'; +import '../../settings_shared_css.js'; + +import {assert, assertNotReached} from '//resources/js/assert.m.js'; +import {loadTimeData} from '//resources/js/load_time_data.m.js'; +import {afterNextRender, flush, html, Polymer, TemplateInstanceBase, Templatizer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {AboutPageBrowserProxy, AboutPageBrowserProxyImpl, AboutPageUpdateInfo, BrowserChannel, browserChannelToI18nId, ChannelInfo, isTargetChannelMoreStable, RegulatoryInfo, TPMFirmwareUpdateStatusChangedEvent, UpdateStatus, UpdateStatusChangedEvent, VersionInfo} from '../../about_page/about_page_browser_proxy.js'; + Polymer({ + _template: html`{__html_template__}`, is: 'edit-hostname-dialog', /** @private */
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html index ea71d9f..e29a1478 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html +++ b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html
@@ -1,260 +1,224 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> +<style include="settings-shared settings-page-styles"> + :host { + --about-page-image-space: 10px; + } -<link rel="import" href="chrome://resources/html/parse_html_subset.html"> -<link rel="import" href="../../about_page/about_page_browser_proxy.html"> -<link rel="import" href="../../i18n_setup.html"> -<link rel="import" href="../../icons.html"> -<link rel="import" href="../../lifetime_browser_proxy.html"> -<link rel="import" href="../../prefs/prefs.html"> -<link rel="import" href="../os_settings_page/main_page_behavior.html"> -<link rel="import" href="../../settings_page/settings_animated_pages.html"> -<link rel="import" href="../../settings_page/settings_section.html"> -<link rel="import" href="../../settings_page/settings_subpage.html"> -<link rel="import" href="../../settings_page_css.html"> -<link rel="import" href="../../settings_shared_css.html"> -<link rel="import" href="../deep_linking_behavior.html"> -<link rel="import" href="../metrics_recorder.html"> -<link rel="import" href="../os_icons.html"> -<link rel="import" href="../os_route.html"> -<link rel="import" href="../../router.html"> -<link rel="import" href="../os_reset_page/os_powerwash_dialog.html"> -<link rel="import" href="../localized_link/localized_link.html"> -<link rel="import" href="detailed_build_info.html"> -<link rel="import" href="update_warning_dialog.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_link_row/cr_link_row.html"> -<link rel="import" href="chrome://resources/cr_elements/icons.html"> -<link rel="import" href="chrome://resources/html/assert.html"> -<link rel="import" href="chrome://resources/html/i18n_behavior.html"> -<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html"> + .info-section { + margin-bottom: 12px; + } -<dom-module id="os-settings-about-page"> - <template> - <style include="settings-shared settings-page-styles"> - :host { - --about-page-image-space: 10px; - } + .padded { + padding-bottom: 10px; + padding-top: 10px; + } - .info-section { - margin-bottom: 12px; - } + .product-title { + font-size: 153.85%; /* 20px / 13px */ + font-weight: 400; + margin-bottom: auto; + margin-top: auto; + } - .padded { - padding-bottom: 10px; - padding-top: 10px; - } + img { + margin-inline-end: var(--about-page-image-space); + } - .product-title { - font-size: 153.85%; /* 20px / 13px */ - font-weight: 400; - margin-bottom: auto; - margin-top: auto; - } + .icon-container { + margin-inline-end: var(--about-page-image-space); + min-width: 32px; /* The width of the product-logo img. */ + text-align: center; + } - img { - margin-inline-end: var(--about-page-image-space); - } + /* TODO(crbug.com/986596): Don't use browser icons here. Fork them. */ + iron-icon[icon='settings:check-circle'] { + fill: var(--cros-icon-color-prominent); + } - .icon-container { - margin-inline-end: var(--about-page-image-space); - min-width: 32px; /* The width of the product-logo img. */ - text-align: center; - } + iron-icon[icon='cr:error-outline'] { + fill: var(--cros-text-color-alert); + } - /* TODO(crbug.com/986596): Don't use browser icons here. Fork them. */ - iron-icon[icon='settings:check-circle'] { - fill: var(--cros-icon-color-prominent); - } + .settings-box .start { + overflow-x: auto; + } - iron-icon[icon='cr:error-outline'] { - fill: var(--cros-text-color-alert); - } + cr-button { + white-space: nowrap; + } - .settings-box .start { - overflow-x: auto; - } - - cr-button { - white-space: nowrap; - } - - #regulatoryInfo img { - width: 330px; - } - </style> - <settings-section page-title="$i18n{aboutOsPageTitle}" section="about"> - <settings-animated-pages id="pages" section="about" - focus-config="[[focusConfig_]]"> - <div route-path="default"> - <div class="settings-box two-line first"> - <img id="product-logo" on-click="onProductLogoClick_" - srcset="chrome://theme/current-channel-logo@1x 1x, - chrome://theme/current-channel-logo@2x 2x" - alt="$i18n{aboutProductLogoAlt}" - role="presentation"> - <h1 class="product-title">$i18n{aboutOsProductTitle}</h1> - </div> - <div class="settings-box two-line"> - <!-- Set the icon from the iconset (when it's obsolete/EOL and - when update is done) or set the src (when it's updating). --> - <div class="icon-container" - hidden="[[!shouldShowIcons_(showUpdateStatus_)]]"> - <!-- TODO(crbug.com/986596): Don't use browser icons here. Fork them. --> - <iron-icon - icon$="[[getUpdateStatusIcon_( - hasEndOfLife_, currentUpdateStatusEvent_)]]" - src="[[getThrobberSrcIfUpdating_( - hasEndOfLife_, currentUpdateStatusEvent_)]]"> - </iron-icon> - </div> - <div class="start padded"> - <div id="updateStatusMessage" hidden="[[!showUpdateStatus_]]"> - <div - inner-h-t-m-l="[[getUpdateStatusMessage_( - currentUpdateStatusEvent_, targetChannel_)]]"></div> - <a hidden$="[[!shouldShowLearnMoreLink_( - currentUpdateStatusEvent_)]]" target="_blank" - href="https://support.google.com/chrome?p=update_error"> - $i18n{learnMore} - </a> - </div> - <settings-localized-link - id="endOfLifeMessageContainer" hidden="[[!hasEndOfLife_]]" - localized-string="$i18n{endOfLifeMessage}"> - </settings-localized-link> - <div class="secondary">$i18n{aboutBrowserVersion}</div> - </div> - <div class="separator" hidden="[[!showButtonContainer_]]"></div> - <span id="buttonContainer" hidden="[[!showButtonContainer_]]"> - <cr-button id="relaunch" hidden$="[[!showRelaunch_]]" - on-click="onRelaunchClick_"> - [[getRelaunchButtonText_( - currentUpdateStatusEvent_)]] - </cr-button> - <cr-button id="checkForUpdates" hidden="[[!showCheckUpdates_]]" - on-click="onCheckUpdatesClick_" - deep-link-focus-id$="[[Setting.kCheckForOsUpdate]]"> - $i18n{aboutCheckForUpdates} - </cr-button> - </span> - </div> - <cr-link-row - id="aboutTPMFirmwareUpdate" - class="hr" - hidden$="[[!showTPMFirmwareUpdateLineItem_]]" - label="$i18n{aboutTPMFirmwareUpdateTitle}" - on-click="onTPMFirmwareUpdateClick_"> - <div slot="sub-label"> - $i18n{aboutTPMFirmwareUpdateDescription} - <a href="$i18n{aboutTPMFirmwareUpdateLearnMoreURL}" - target="_blank" on-click="onLearnMoreClick_"> - $i18n{learnMore} - </a> - </div> - </cr-link-row> - <template is="dom-if" if="[[hasInternetConnection_]]"> - <cr-link-row class="hr" id="releaseNotesOnline" - on-click="onReleaseNotesTap_" - label="$i18n{aboutShowReleaseNotes}" external - deep-link-focus-id$="[[Setting.kSeeWhatsNew]]"> - </cr-link-row> - </template> - <template is="dom-if" if="[[!hasInternetConnection_]]"> - <cr-link-row class="hr" id="releaseNotesOffline" - on-click="onReleaseNotesTap_" - label="$i18n{aboutShowReleaseNotes}" - title="$i18n{aboutReleaseNotesOffline}" external - deep-link-focus-id$="[[Setting.kSeeWhatsNew]]"> - </cr-link-row> - </template> - <cr-link-row class="hr" id="help" on-click="onHelpClick_" - label="$i18n{aboutGetHelpUsingChromeOs}" external - deep-link-focus-id$="[[Setting.kGetHelpWithChromeOs]]"> - </cr-link-row> -<if expr="_google_chrome"> - <cr-link-row class="hr" id="reportIssue" - on-click="onReportIssueClick_" - hidden="[[!prefs.feedback_allowed.value]]" - label="$i18n{aboutReportAnIssue}" external - deep-link-focus-id$="[[Setting.kReportAnIssue]]"> - </cr-link-row> -</if> - <cr-link-row class="hr" id="diagnostics" - on-click="onDiagnosticsClick_" - hidden$="[[!showDiagnosticsApp_]]" - label="$i18n{aboutDiagnostics}" external - deep-link-focus-id$="[[Setting.kDiagnostics]]"> - </cr-link-row> - <cr-link-row class="hr" id="detailed-build-info-trigger" - on-click="onDetailedBuildInfoClick_" - label="$i18n{aboutDetailedBuildInfo}" - role-description="$i18n{subpageArrowRoleDescription}"> - </cr-link-row> - <cr-link-row class="hr" on-click="onManagementPageClick_" - start-icon="cr:domain" label="$i18n{managementPage}" - hidden$="[[!isManaged_]]" external> - </cr-link-row> + #regulatoryInfo img { + width: 330px; + } +</style> +<settings-section page-title="$i18n{aboutOsPageTitle}" section="about"> + <settings-animated-pages id="pages" section="about" + focus-config="[[focusConfig_]]"> + <div route-path="default"> + <div class="settings-box two-line first"> + <img id="product-logo" on-click="onProductLogoClick_" + srcset="chrome://theme/current-channel-logo@1x 1x, + chrome://theme/current-channel-logo@2x 2x" + alt="$i18n{aboutProductLogoAlt}" + role="presentation"> + <h1 class="product-title">$i18n{aboutOsProductTitle}</h1> + </div> + <div class="settings-box two-line"> + <!-- Set the icon from the iconset (when it's obsolete/EOL and + when update is done) or set the src (when it's updating). --> + <div class="icon-container" + hidden="[[!shouldShowIcons_(showUpdateStatus_)]]"> + <!-- TODO(crbug.com/986596): Don't use browser icons here. Fork + them. --> + <iron-icon + icon$="[[getUpdateStatusIcon_( + hasEndOfLife_, currentUpdateStatusEvent_)]]" + src="[[getThrobberSrcIfUpdating_( + hasEndOfLife_, currentUpdateStatusEvent_)]]"> + </iron-icon> </div> - <template is="dom-if" route-path="/help/details"> - <settings-subpage page-title="$i18n{aboutDetailedBuildInfo}"> - <settings-detailed-build-info - eol-message-with-month-and-year= - "[[eolMessageWithMonthAndYear_]]"> - </settings-detailed-build-info> - </settings-subpage> - </template> - </settings-animated-pages> - </settings-section> - - <settings-section> - <div class="settings-box padded block first"> - <div class="info-section"> - <div class="secondary">$i18n{aboutOsProductTitle}</div> - <div class="secondary">$i18n{aboutProductCopyright}</div> - </div> - - <div class="info-section"> - <div class="secondary">$i18nRaw{aboutProductLicense}</div> - <div class="secondary" - inner-h-t-m-l="[[getAboutProductOsLicense_( - showCrostiniLicense_)]]"> + <div class="start padded"> + <div id="updateStatusMessage" hidden="[[!showUpdateStatus_]]"> + <div + inner-h-t-m-l="[[getUpdateStatusMessage_( + currentUpdateStatusEvent_, targetChannel_)]]"></div> + <a hidden$="[[!shouldShowLearnMoreLink_( + currentUpdateStatusEvent_)]]" target="_blank" + href="https://support.google.com/chrome?p=update_error"> + $i18n{learnMore} + </a> </div> + <settings-localized-link + id="endOfLifeMessageContainer" hidden="[[!hasEndOfLife_]]" + localized-string="$i18n{endOfLifeMessage}"> + </settings-localized-link> + <div class="secondary">$i18n{aboutBrowserVersion}</div> </div> -<if expr="_google_chrome"> - <div class="secondary"> - <a id="aboutProductTos" href="$i18n{aboutTermsURL}" target="_blank" - deep-link-focus-id$="[[Setting.kTermsOfService]]"> - $i18n{aboutProductTos} + <div class="separator" hidden="[[!showButtonContainer_]]"></div> + <span id="buttonContainer" hidden="[[!showButtonContainer_]]"> + <cr-button id="relaunch" hidden$="[[!showRelaunch_]]" + on-click="onRelaunchClick_"> + [[getRelaunchButtonText_( + currentUpdateStatusEvent_)]] + </cr-button> + <cr-button id="checkForUpdates" hidden="[[!showCheckUpdates_]]" + on-click="onCheckUpdatesClick_" + deep-link-focus-id$="[[Setting.kCheckForOsUpdate]]"> + $i18n{aboutCheckForUpdates} + </cr-button> + </span> + </div> + <cr-link-row + id="aboutTPMFirmwareUpdate" + class="hr" + hidden$="[[!showTPMFirmwareUpdateLineItem_]]" + label="$i18n{aboutTPMFirmwareUpdateTitle}" + on-click="onTPMFirmwareUpdateClick_"> + <div slot="sub-label"> + $i18n{aboutTPMFirmwareUpdateDescription} + <a href="$i18n{aboutTPMFirmwareUpdateLearnMoreURL}" + target="_blank" on-click="onLearnMoreClick_"> + $i18n{learnMore} </a> </div> -</if> - </div> - <div class="settings-box padded block" id="regulatoryInfo" - hidden$="[[!shouldShowRegulatoryOrSafetyInfo_(regulatoryInfo_)]]"> + </cr-link-row> + <template is="dom-if" if="[[hasInternetConnection_]]"> + <cr-link-row class="hr" id="releaseNotesOnline" + on-click="onReleaseNotesTap_" + label="$i18n{aboutShowReleaseNotes}" external + deep-link-focus-id$="[[Setting.kSeeWhatsNew]]"> + </cr-link-row> + </template> + <template is="dom-if" if="[[!hasInternetConnection_]]"> + <cr-link-row class="hr" id="releaseNotesOffline" + on-click="onReleaseNotesTap_" + label="$i18n{aboutShowReleaseNotes}" + title="$i18n{aboutReleaseNotesOffline}" external + deep-link-focus-id$="[[Setting.kSeeWhatsNew]]"> + </cr-link-row> + </template> + <cr-link-row class="hr" id="help" on-click="onHelpClick_" + label="$i18n{aboutGetHelpUsingChromeOs}" external + deep-link-focus-id$="[[Setting.kGetHelpWithChromeOs]]"> + </cr-link-row> <if expr="_google_chrome"> - <div class="secondary" hidden$="[[!shouldShowSafetyInfo_()]]"> - <a target="_blank" href="$i18n{aboutProductSafetyURL}"> - $i18nRaw{aboutProductSafety} - </a> - </div> + <cr-link-row class="hr" id="reportIssue" + on-click="onReportIssueClick_" + hidden="[[!prefs.feedback_allowed.value]]" + label="$i18n{aboutReportAnIssue}" external + deep-link-focus-id$="[[Setting.kReportAnIssue]]"> + </cr-link-row> </if> - <img src="[[regulatoryInfo_.url]]" alt="[[regulatoryInfo_.text]]" - hidden$="[[!shouldShowRegulatoryInfo_(regulatoryInfo_)]]"> + <cr-link-row class="hr" id="diagnostics" + on-click="onDiagnosticsClick_" + hidden$="[[!showDiagnosticsApp_]]" + label="$i18n{aboutDiagnostics}" external + deep-link-focus-id$="[[Setting.kDiagnostics]]"> + </cr-link-row> + <cr-link-row class="hr" id="detailed-build-info-trigger" + on-click="onDetailedBuildInfoClick_" + label="$i18n{aboutDetailedBuildInfo}" + role-description="$i18n{subpageArrowRoleDescription}"> + </cr-link-row> + <cr-link-row class="hr" on-click="onManagementPageClick_" + start-icon="cr:domain" label="$i18n{managementPage}" + hidden$="[[!isManaged_]]" external> + </cr-link-row> + </div> + <template is="dom-if" route-path="/help/details"> + <settings-subpage page-title="$i18n{aboutDetailedBuildInfo}"> + <settings-detailed-build-info + eol-message-with-month-and-year= + "[[eolMessageWithMonthAndYear_]]"> + </settings-detailed-build-info> + </settings-subpage> + </template> + </settings-animated-pages> +</settings-section> + +<settings-section> + <div class="settings-box padded block first"> + <div class="info-section"> + <div class="secondary">$i18n{aboutOsProductTitle}</div> + <div class="secondary">$i18n{aboutProductCopyright}</div> + </div> + + <div class="info-section"> + <div class="secondary">$i18nRaw{aboutProductLicense}</div> + <div class="secondary" + inner-h-t-m-l="[[getAboutProductOsLicense_( + showCrostiniLicense_)]]"> </div> - </settings-section> - <template is="dom-if" if="[[showUpdateWarningDialog_]]" restamp> - <settings-update-warning-dialog update-info="[[updateInfo_]]" - on-close="onUpdateWarningDialogClose_"> - </settings-update-warning-dialog> - </template> - <template is="dom-if" if="[[showTPMFirmwareUpdateDialog_]]" - restamp> - <os-settings-powerwash-dialog request-tpm-firmware-update - on-close="onPowerwashDialogClose_"> - </os-settings-powerwash-dialog> - </template> - </template> - <script src="os_about_page.js"></script> -</dom-module> + </div> +<if expr="_google_chrome"> + <div class="secondary"> + <a id="aboutProductTos" href="$i18n{aboutTermsURL}" target="_blank" + deep-link-focus-id$="[[Setting.kTermsOfService]]"> + $i18n{aboutProductTos} + </a> + </div> +</if> + </div> + <div class="settings-box padded block" id="regulatoryInfo" + hidden$="[[!shouldShowRegulatoryOrSafetyInfo_(regulatoryInfo_)]]"> +<if expr="_google_chrome"> + <div class="secondary" hidden$="[[!shouldShowSafetyInfo_()]]"> + <a target="_blank" href="$i18n{aboutProductSafetyURL}"> + $i18nRaw{aboutProductSafety} + </a> + </div> +</if> + <img src="[[regulatoryInfo_.url]]" alt="[[regulatoryInfo_.text]]" + hidden$="[[!shouldShowRegulatoryInfo_(regulatoryInfo_)]]"> + </div> +</settings-section> +<template is="dom-if" if="[[showUpdateWarningDialog_]]" restamp> + <settings-update-warning-dialog update-info="[[updateInfo_]]" + on-close="onUpdateWarningDialogClose_"> + </settings-update-warning-dialog> +</template> +<template is="dom-if" if="[[showTPMFirmwareUpdateDialog_]]" + restamp> + <os-settings-powerwash-dialog request-tpm-firmware-update + on-close="onPowerwashDialogClose_"> + </os-settings-powerwash-dialog> +</template>
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.js b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.js index 3363fd3..a20cf221 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.js +++ b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.js
@@ -7,14 +7,48 @@ * information. */ +import '../../icons.js'; +import '../../prefs/prefs.js'; +import '../../settings_page/settings_animated_pages.js'; +import '../../settings_page/settings_section.js'; +import '../../settings_page/settings_subpage.js'; +import '../../settings_page_css.js'; +import '../../settings_shared_css.js'; +import '../os_icons.m.js'; +import '../os_reset_page/os_powerwash_dialog.js'; +import '../localized_link/localized_link.js'; +import './detailed_build_info.js'; +import './update_warning_dialog.js'; +import '//resources/cr_elements/cr_button/cr_button.m.js'; +import '//resources/cr_elements/cr_icon_button/cr_icon_button.m.js'; +import '//resources/cr_elements/cr_link_row/cr_link_row.js'; +import '//resources/cr_elements/icons.m.js'; +import '//resources/polymer/v3_0/iron-icon/iron-icon.js'; + +import {assert, assertNotReached} from '//resources/js/assert.m.js'; +import {I18nBehavior} from '//resources/js/i18n_behavior.m.js'; +import {parseHtmlSubset} from '//resources/js/parse_html_subset.m.js'; +import {WebUIListenerBehavior} from '//resources/js/web_ui_listener_behavior.m.js'; +import {afterNextRender, flush, html, Polymer, TemplateInstanceBase, Templatizer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {AboutPageBrowserProxy, AboutPageBrowserProxyImpl, AboutPageUpdateInfo, BrowserChannel, browserChannelToI18nId, ChannelInfo, isTargetChannelMoreStable, RegulatoryInfo, TPMFirmwareUpdateStatusChangedEvent, UpdateStatus, UpdateStatusChangedEvent, VersionInfo} from '../../about_page/about_page_browser_proxy.js'; +import {loadTimeData} from '../../i18n_setup.js'; +import {LifetimeBrowserProxy, LifetimeBrowserProxyImpl} from '../../lifetime_browser_proxy.js'; +import {Route, RouteObserverBehavior, Router} from '../../router.js'; +import {DeepLinkingBehavior} from '../deep_linking_behavior.m.js'; +import {recordClick, recordNavigation, recordPageBlur, recordPageFocus, recordSearch, recordSettingChange, setUserActionRecorderForTesting} from '../metrics_recorder.m.js'; +import {routes} from '../os_route.m.js'; +import {MainPageBehavior} from '../os_settings_page/main_page_behavior.m.js'; + Polymer({ + _template: html`{__html_template__}`, is: 'os-settings-about-page', behaviors: [ DeepLinkingBehavior, WebUIListenerBehavior, - settings.MainPageBehavior, - settings.RouteObserverBehavior, + MainPageBehavior, + RouteObserverBehavior, I18nBehavior, ], @@ -127,10 +161,9 @@ type: Object, value() { const map = new Map(); - if (settings.routes.DETAILED_BUILD_INFO) { + if (routes.DETAILED_BUILD_INFO) { map.set( - settings.routes.DETAILED_BUILD_INFO.path, - '#detailed-build-info-trigger'); + routes.DETAILED_BUILD_INFO.path, '#detailed-build-info-trigger'); } return map; }, @@ -190,19 +223,18 @@ 'handleCrostiniEnabledChanged_(prefs.crostini.enabled.value)', ], - /** @private {?settings.AboutPageBrowserProxy} */ + /** @private {?AboutPageBrowserProxy} */ aboutBrowserProxy_: null, - /** @private {?settings.LifetimeBrowserProxy} */ + /** @private {?LifetimeBrowserProxy} */ lifetimeBrowserProxy_: null, /** @override */ attached() { - this.aboutBrowserProxy_ = settings.AboutPageBrowserProxyImpl.getInstance(); + this.aboutBrowserProxy_ = AboutPageBrowserProxyImpl.getInstance(); this.aboutBrowserProxy_.pageReady(); - this.lifetimeBrowserProxy_ = - settings.LifetimeBrowserProxyImpl.getInstance(); + this.lifetimeBrowserProxy_ = LifetimeBrowserProxyImpl.getInstance(); this.addEventListener('target-channel-changed', e => { this.targetChannel_ = e.detail; @@ -228,22 +260,21 @@ this.hasInternetConnection_ = result; }); - if (settings.Router.getInstance().getQueryParameters().get( - 'checkForUpdate') === 'true') { + if (Router.getInstance().getQueryParameters().get('checkForUpdate') === + 'true') { this.onCheckUpdatesClick_(); } }, /** - * @param {!settings.Route} newRoute - * @param {settings.Route} oldRoute + * @param {!Route} newRoute + * @param {Route} oldRoute */ currentRouteChanged(newRoute, oldRoute) { - settings.MainPageBehavior.currentRouteChanged.call( - this, newRoute, oldRoute); + MainPageBehavior.currentRouteChanged.call(this, newRoute, oldRoute); // Does not apply to this page. - if (newRoute !== settings.routes.ABOUT_ABOUT) { + if (newRoute !== routes.ABOUT_ABOUT) { return; } @@ -259,9 +290,9 @@ }); }, - // Override settings.MainPageBehavior method. + // Override MainPageBehavior method. containsRoute(route) { - return !route || settings.routes.ABOUT.contains(route); + return !route || routes.ABOUT.contains(route); }, /** @private */ @@ -313,12 +344,12 @@ onDiagnosticsClick_() { assert(this.showDiagnosticsApp_); this.aboutBrowserProxy_.openDiagnostics(); - settings.recordSettingChange(chromeos.settings.mojom.Setting.kDiagnostics); + recordSettingChange(chromeos.settings.mojom.Setting.kDiagnostics); }, /** @private */ onRelaunchClick_() { - settings.recordSettingChange(); + recordSettingChange(); this.lifetimeBrowserProxy_.relaunch(); }, @@ -409,8 +440,8 @@ if (this.currentChannel_ !== this.targetChannel_) { return this.i18nAdvanced('aboutUpgradeUpdatingChannelSwitch', { substitutions: [ - this.i18nAdvanced(settings.browserChannelToI18nId( - this.targetChannel_, this.isLts_)), + this.i18nAdvanced( + browserChannelToI18nId(this.targetChannel_, this.isLts_)), progressPercent ] }); @@ -524,8 +555,7 @@ /** @private */ onDetailedBuildInfoClick_() { - settings.Router.getInstance().navigateTo( - settings.routes.DETAILED_BUILD_INFO); + Router.getInstance().navigateTo(routes.DETAILED_BUILD_INFO); }, /**
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/update_warning_dialog.html b/chrome/browser/resources/settings/chromeos/os_about_page/update_warning_dialog.html index 3080573a..bcb0f7d9 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/update_warning_dialog.html +++ b/chrome/browser/resources/settings/chromeos/os_about_page/update_warning_dialog.html
@@ -1,28 +1,15 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> - -<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> -<link rel="import" href="chrome://resources/html/i18n_behavior.html"> -<link rel="import" href="../../about_page/about_page_browser_proxy.html"> -<link rel="import" href="../../settings_shared_css.html"> - -<dom-module id="settings-update-warning-dialog"> - <template> - <style include="settings-shared"></style> - <cr-dialog id="dialog" close-text="$i18n{close}"> - <div slot="title">$i18n{aboutUpdateWarningTitle}</div> - <div slot="body"> - <div id="update-warning-message"></div> - </div> - <div slot="button-container"> - <cr-button id="cancel" class="cancel-button" - on-click="onCancelTap_">$i18n{cancel}</cr-button> - <cr-button id="continue" class="action-button" - on-click="onContinueTap_"> - $i18n{continue} - </cr-button> - </div> - </cr-dialog> - </template> - <script src="update_warning_dialog.js"></script> -</dom-module> +<style include="settings-shared"></style> +<cr-dialog id="dialog" close-text="$i18n{close}"> + <div slot="title">$i18n{aboutUpdateWarningTitle}</div> + <div slot="body"> + <div id="update-warning-message"></div> + </div> + <div slot="button-container"> + <cr-button id="cancel" class="cancel-button" + on-click="onCancelTap_">$i18n{cancel}</cr-button> + <cr-button id="continue" class="action-button" + on-click="onContinueTap_"> + $i18n{continue} + </cr-button> + </div> +</cr-dialog>
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/update_warning_dialog.js b/chrome/browser/resources/settings/chromeos/os_about_page/update_warning_dialog.js index e679770..e0e90a3 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/update_warning_dialog.js +++ b/chrome/browser/resources/settings/chromeos/os_about_page/update_warning_dialog.js
@@ -7,7 +7,17 @@ * user about update over mobile data. By clicking 'Continue', the user * agrees to download update using mobile data. */ +import '//resources/cr_elements/cr_button/cr_button.m.js'; +import '//resources/cr_elements/cr_dialog/cr_dialog.m.js'; +import '../../settings_shared_css.js'; + +import {I18nBehavior} from '//resources/js/i18n_behavior.m.js'; +import {afterNextRender, flush, html, Polymer, TemplateInstanceBase, Templatizer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {AboutPageBrowserProxy, AboutPageBrowserProxyImpl, AboutPageUpdateInfo, BrowserChannel, browserChannelToI18nId, ChannelInfo, isTargetChannelMoreStable, RegulatoryInfo, TPMFirmwareUpdateStatusChangedEvent, UpdateStatus, UpdateStatusChangedEvent, VersionInfo} from '../../about_page/about_page_browser_proxy.js'; + Polymer({ + _template: html`{__html_template__}`, is: 'settings-update-warning-dialog', behaviors: [I18nBehavior], @@ -20,12 +30,12 @@ }, }, - /** @private {?settings.AboutPageBrowserProxy} */ + /** @private {?AboutPageBrowserProxy} */ browserProxy_: null, /** @override */ ready() { - this.browserProxy_ = settings.AboutPageBrowserProxyImpl.getInstance(); + this.browserProxy_ = AboutPageBrowserProxyImpl.getInstance(); }, /** @override */
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.gni b/chrome/browser/resources/settings/chromeos/os_settings.gni index 7366cba..814c999 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings.gni +++ b/chrome/browser/resources/settings/chromeos/os_settings.gni
@@ -332,6 +332,12 @@ "chrome/browser/resources/settings/chromeos/internet_page/tether_connection_dialog.html", "chrome/browser/resources/settings/chromeos/localized_link/localized_link.html", "chrome/browser/resources/settings/chromeos/on_startup_page/on_startup_page.html", + "chrome/browser/resources/settings/chromeos/os_about_page/channel_switcher_dialog.html", + "chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.html", + "chrome/browser/resources/settings/chromeos/os_about_page/device_name_browser_proxy.html", + "chrome/browser/resources/settings/chromeos/os_about_page/edit_hostname_dialog.html", + "chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html", + "chrome/browser/resources/settings/chromeos/os_about_page/update_warning_dialog.html", "chrome/browser/resources/settings/chromeos/os_a11y_page/change_dictation_locale_dialog.html", "chrome/browser/resources/settings/chromeos/os_apps_page/app_notifications_page/app_notifications_subpage.html", "chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_page.html",
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.js b/chrome/browser/resources/settings/chromeos/os_settings.js index 8bbeb4c..a4749294 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings.js +++ b/chrome/browser/resources/settings/chromeos/os_settings.js
@@ -43,10 +43,10 @@ import './personalization_page/dark_mode_subpage.m.js'; import './personalization_page/personalization_page.m.js'; import './os_a11y_page/change_dictation_locale_dialog.js'; -import './os_about_page/channel_switcher_dialog.m.js'; -import './os_about_page/detailed_build_info.m.js'; -import './os_about_page/os_about_page.m.js'; -import './os_about_page/update_warning_dialog.m.js'; +import './os_about_page/channel_switcher_dialog.js'; +import './os_about_page/detailed_build_info.js'; +import './os_about_page/os_about_page.js'; +import './os_about_page/update_warning_dialog.js'; import './os_apps_page/android_apps_subpage.m.js'; import './os_apps_page/app_notifications_page/app_notifications_subpage.js'; import './os_apps_page/app_management_page/app_item.m.js'; @@ -121,7 +121,7 @@ export {OsA11yPageBrowserProxy, OsA11yPageBrowserProxyImpl} from './os_a11y_page/os_a11y_page_browser_proxy.m.js'; export {SwitchAccessSubpageBrowserProxy, SwitchAccessSubpageBrowserProxyImpl} from './os_a11y_page/switch_access_subpage_browser_proxy.m.js'; export {TtsSubpageBrowserProxy, TtsSubpageBrowserProxyImpl} from './os_a11y_page/tts_subpage_browser_proxy.m.js'; -export {DeviceNameBrowserProxy, DeviceNameBrowserProxyImpl} from './os_about_page/device_name_browser_proxy.m.js'; +export {DeviceNameBrowserProxy, DeviceNameBrowserProxyImpl} from './os_about_page/device_name_browser_proxy.js'; export {AndroidAppsBrowserProxyImpl} from './os_apps_page/android_apps_browser_proxy.m.js'; export {addApp, changeApp, removeApp, updateSelectedAppId} from './os_apps_page/app_management_page/actions.m.js'; export {BrowserProxy} from './os_apps_page/app_management_page/browser_proxy.m.js';
diff --git a/chrome/browser/resources/settings/i18n_setup.js b/chrome/browser/resources/settings/i18n_setup.ts similarity index 100% rename from chrome/browser/resources/settings/i18n_setup.js rename to chrome/browser/resources/settings/i18n_setup.ts
diff --git a/chrome/browser/resources/settings/icons.js b/chrome/browser/resources/settings/icons.ts similarity index 100% rename from chrome/browser/resources/settings/icons.js rename to chrome/browser/resources/settings/icons.ts
diff --git a/chrome/browser/resources/settings/lazy_load.js b/chrome/browser/resources/settings/lazy_load.ts similarity index 100% rename from chrome/browser/resources/settings/lazy_load.js rename to chrome/browser/resources/settings/lazy_load.ts
diff --git a/chrome/browser/resources/settings/reset_page/BUILD.gn b/chrome/browser/resources/settings/reset_page/BUILD.gn index ee5edd8..c1c9d9c 100644 --- a/chrome/browser/resources/settings/reset_page/BUILD.gn +++ b/chrome/browser/resources/settings/reset_page/BUILD.gn
@@ -2,62 +2,12 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//third_party/closure_compiler/compile_js.gni") import("//tools/polymer/html_to_js.gni") -import("../settings.gni") - -js_type_check("closure_compile") { - is_polymer3 = true - closure_flags = settings_closure_flags - deps = [ - ":reset_browser_proxy", - ":reset_page", - ":reset_profile_banner", - ":reset_profile_dialog", - ] -} - -js_library("reset_browser_proxy") { - deps = [ "//ui/webui/resources/js:cr.m" ] -} - -js_library("reset_page") { - deps = [ - ":reset_profile_dialog", - "..:route", - "..:router", - "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", - "//ui/webui/resources/cr_elements/cr_lazy_render:cr_lazy_render.m", - "//ui/webui/resources/js:assert", - "//ui/webui/resources/js:load_time_data.m", - ] -} - -js_library("reset_profile_banner") { - deps = [ - ":reset_browser_proxy", - "..:route", - "..:router", - "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", - "//ui/webui/resources/cr_elements/cr_dialog:cr_dialog.m", - ] -} - -js_library("reset_profile_dialog") { - deps = [ - ":reset_browser_proxy", - "..:route", - "..:router", - "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", - "//ui/webui/resources/js:i18n_behavior.m", - "//ui/webui/resources/js:load_time_data.m", - ] -} html_to_js("web_components") { js_files = [ - "reset_page.js", - "reset_profile_banner.js", - "reset_profile_dialog.js", + "reset_page.ts", + "reset_profile_banner.ts", + "reset_profile_dialog.ts", ] }
diff --git a/chrome/browser/resources/settings/reset_page/reset_browser_proxy.js b/chrome/browser/resources/settings/reset_page/reset_browser_proxy.js deleted file mode 100644 index 839f5514..0000000 --- a/chrome/browser/resources/settings/reset_page/reset_browser_proxy.js +++ /dev/null
@@ -1,93 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// clang-format off -import {addSingletonGetter, sendWithPromise} from 'chrome://resources/js/cr.m.js'; -// clang-format on - -/** @interface */ -export class ResetBrowserProxy { - /** - * @param {boolean} sendSettings Whether the user gave consent to upload - * broken settings to Google for analysis. - * @param {string} requestOrigin The origin of the reset request. - * @return {!Promise} A promise firing once resetting has completed. - */ - performResetProfileSettings(sendSettings, requestOrigin) {} - - /** - * A method to be called when the reset profile dialog is hidden. - */ - onHideResetProfileDialog() {} - - /** - * A method to be called when the reset profile banner is hidden. - */ - onHideResetProfileBanner() {} - - /** - * A method to be called when the reset profile dialog is shown. - */ - onShowResetProfileDialog() {} - - /** - * Shows the settings that are about to be reset and which will be reported - * to Google for analysis, in a new tab. - */ - showReportedSettings() {} - - /** - * Retrieves the triggered reset tool name. - * @return {!Promise<string>} A promise firing with the tool name, once it - * has been retrieved. - */ - getTriggeredResetToolName() {} -} - -/** - * @implements {ResetBrowserProxy} - */ -export class ResetBrowserProxyImpl { - /** @override */ - performResetProfileSettings(sendSettings, requestOrigin) { - return sendWithPromise( - 'performResetProfileSettings', sendSettings, requestOrigin); - } - - /** @override */ - onHideResetProfileDialog() { - chrome.send('onHideResetProfileDialog'); - } - - /** @override */ - onHideResetProfileBanner() { - chrome.send('onHideResetProfileBanner'); - } - - /** @override */ - onShowResetProfileDialog() { - chrome.send('onShowResetProfileDialog'); - } - - /** @override */ - showReportedSettings() { - sendWithPromise('getReportedSettings').then(function(settings) { - const output = settings.map(function(entry) { - return entry.key + ': ' + entry.value.replace(/\n/g, ', '); - }); - const win = window.open('about:blank'); - const div = win.document.createElement('div'); - div.textContent = output.join('\n'); - div.style.whiteSpace = 'pre'; - win.document.body.appendChild(div); - }); - } - - /** @override */ - getTriggeredResetToolName() { - return sendWithPromise('getTriggeredResetToolName'); - } -} - -addSingletonGetter(ResetBrowserProxyImpl);
diff --git a/chrome/browser/resources/settings/reset_page/reset_browser_proxy.ts b/chrome/browser/resources/settings/reset_page/reset_browser_proxy.ts new file mode 100644 index 0000000..dd2c6d4 --- /dev/null +++ b/chrome/browser/resources/settings/reset_page/reset_browser_proxy.ts
@@ -0,0 +1,92 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// clang-format off +import {sendWithPromise} from 'chrome://resources/js/cr.m.js'; +// clang-format on + +export interface ResetBrowserProxy { + /** + * @param sendSettings Whether the user gave consent to upload broken settings + * to Google for analysis. + * @param requestOrigin The origin of the reset request. + * @return A promise firing once resetting has completed. + */ + performResetProfileSettings(sendSettings: boolean, requestOrigin: string): + Promise<void>; + + /** + * A method to be called when the reset profile dialog is hidden. + */ + onHideResetProfileDialog(): void; + + /** + * A method to be called when the reset profile banner is hidden. + */ + onHideResetProfileBanner(): void; + + /** + * A method to be called when the reset profile dialog is shown. + */ + onShowResetProfileDialog(): void; + + /** + * Shows the settings that are about to be reset and which will be reported + * to Google for analysis, in a new tab. + */ + showReportedSettings(): void; + + /** + * Retrieves the triggered reset tool name. + * @return A promise firing with the tool name, once it has been retrieved. + */ + getTriggeredResetToolName(): Promise<string>; +} + +export class ResetBrowserProxyImpl implements ResetBrowserProxy { + performResetProfileSettings(sendSettings: boolean, requestOrigin: string) { + return sendWithPromise( + 'performResetProfileSettings', sendSettings, requestOrigin); + } + + onHideResetProfileDialog() { + chrome.send('onHideResetProfileDialog'); + } + + onHideResetProfileBanner() { + chrome.send('onHideResetProfileBanner'); + } + + onShowResetProfileDialog() { + chrome.send('onShowResetProfileDialog'); + } + + showReportedSettings() { + sendWithPromise('getReportedSettings') + .then(function(settings: Array<{key: string, value: string}>) { + const output = settings.map(function(entry) { + return entry.key + ': ' + entry.value.replace(/\n/g, ', '); + }); + const win = window.open('about:blank')!; + const div = win.document.createElement('div'); + div.textContent = output.join('\n'); + div.style.whiteSpace = 'pre'; + win.document.body.appendChild(div); + }); + } + + getTriggeredResetToolName(): Promise<string> { + return sendWithPromise('getTriggeredResetToolName'); + } + + static getInstance(): ResetBrowserProxy { + return instance || (instance = new ResetBrowserProxyImpl()); + } + + static setInstance(obj: ResetBrowserProxy) { + instance = obj; + } +} + +let instance: ResetBrowserProxy|null = null;
diff --git a/chrome/browser/resources/settings/reset_page/reset_page.js b/chrome/browser/resources/settings/reset_page/reset_page.ts similarity index 77% rename from chrome/browser/resources/settings/reset_page/reset_page.js rename to chrome/browser/resources/settings/reset_page/reset_page.ts index 7f37e97a..ea1e826c 100644 --- a/chrome/browser/resources/settings/reset_page/reset_page.js +++ b/chrome/browser/resources/settings/reset_page/reset_page.ts
@@ -10,12 +10,14 @@ import 'chrome://resources/cr_elements/cr_lazy_render/cr_lazy_render.m.js'; import '../settings_page/settings_animated_pages.js'; import '../settings_shared_css.js'; +import './reset_profile_dialog.js'; // <if expr="_google_chrome and is_win"> import '../chrome_cleanup_page/chrome_cleanup_page.js'; import '../incompatible_applications_page/incompatible_applications_page.js'; // </if> +import {CrLazyRenderElement} from 'chrome://resources/cr_elements/cr_lazy_render/cr_lazy_render.m.js'; import {assert} from 'chrome://resources/js/assert.m.js'; import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js'; import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -26,13 +28,15 @@ import {SettingsResetProfileDialogElement} from './reset_profile_dialog.js'; +interface SettingsResetPageElement { + $: { + resetProfileDialog: CrLazyRenderElement<SettingsResetProfileDialogElement>, + resetProfile: HTMLElement, + }; +} -/** - * @constructor - * @extends {PolymerElement} - * @implements {RouteObserverMixinInterface} - */ -const SettingsResetPageElementBase = RouteObserverMixin(PolymerElement); +const SettingsResetPageElementBase = RouteObserverMixin(PolymerElement) as + {new (): PolymerElement & RouteObserverMixinInterface}; /** @polymer */ class SettingsResetPageElement extends SettingsResetPageElementBase { @@ -65,43 +69,36 @@ * RouteObserverMixin * @override */ - currentRouteChanged(route) { - const lazyRender = - /** @type {!CrLazyRenderElement} */ (this.$.resetProfileDialog); + currentRouteChanged(route: Route) { + const lazyRender = this.$.resetProfileDialog; if (route === routes.TRIGGERED_RESET_DIALOG || route === routes.RESET_DIALOG) { - /** @type {!SettingsResetProfileDialogElement} */ (lazyRender.get()) - .show(); + lazyRender.get().show(); } else { - const dialog = /** @type {?SettingsResetProfileDialogElement} */ ( - lazyRender.getIfExists()); + const dialog = lazyRender.getIfExists(); if (dialog) { dialog.cancel(); } } } - /** @private */ - onShowResetProfileDialog_() { + private onShowResetProfileDialog_() { Router.getInstance().navigateTo( routes.RESET_DIALOG, new URLSearchParams('origin=userclick')); } - /** @private */ - onResetProfileDialogClose_() { + private onResetProfileDialogClose_() { Router.getInstance().navigateToPreviousRoute(); focusWithoutInk(assert(this.$.resetProfile)); } // <if expr="_google_chrome and is_win"> - /** @private */ - onChromeCleanupTap_() { + private onChromeCleanupTap_() { Router.getInstance().navigateTo(routes.CHROME_CLEANUP); } - /** @private */ - onIncompatibleApplicationsTap_() { + private onIncompatibleApplicationsTap_() { Router.getInstance().navigateTo(routes.INCOMPATIBLE_APPLICATIONS); } // </if>
diff --git a/chrome/browser/resources/settings/reset_page/reset_profile_banner.js b/chrome/browser/resources/settings/reset_page/reset_profile_banner.ts similarity index 79% rename from chrome/browser/resources/settings/reset_page/reset_profile_banner.js rename to chrome/browser/resources/settings/reset_page/reset_profile_banner.ts index bf91555..f786d9e 100644 --- a/chrome/browser/resources/settings/reset_page/reset_profile_banner.js +++ b/chrome/browser/resources/settings/reset_page/reset_profile_banner.ts
@@ -10,6 +10,7 @@ import 'chrome://resources/cr_elements/cr_button/cr_button.m.js'; import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js'; +import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js'; import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {routes} from '../route.js'; @@ -17,6 +18,12 @@ import {ResetBrowserProxyImpl} from './reset_browser_proxy.js'; +interface SettingsResetProfileBannerElement { + $: { + dialog: CrDialogElement, + }; +} + /** @polymer */ class SettingsResetProfileBannerElement extends PolymerElement { static get is() { @@ -27,25 +34,21 @@ return html`{__html_template__}`; } - /** @override */ connectedCallback() { super.connectedCallback(); - /** @type {!CrDialogElement} */ (this.$.dialog).showModal(); + this.$.dialog.showModal(); } - /** @private */ - onOkTap_() { - /** @type {!CrDialogElement} */ (this.$.dialog).cancel(); + private onOkTap_() { + this.$.dialog.cancel(); } - /** @private */ - onCancel_() { + private onCancel_() { ResetBrowserProxyImpl.getInstance().onHideResetProfileBanner(); } - /** @private */ - onResetTap_() { + private onResetTap_() { this.$.dialog.close(); Router.getInstance().navigateTo(routes.RESET_DIALOG); }
diff --git a/chrome/browser/resources/settings/reset_page/reset_profile_dialog.js b/chrome/browser/resources/settings/reset_page/reset_profile_dialog.ts similarity index 80% rename from chrome/browser/resources/settings/reset_page/reset_profile_dialog.js rename to chrome/browser/resources/settings/reset_page/reset_profile_dialog.ts index a9dd583..d32bff6 100644 --- a/chrome/browser/resources/settings/reset_page/reset_profile_dialog.js +++ b/chrome/browser/resources/settings/reset_page/reset_profile_dialog.ts
@@ -18,7 +18,9 @@ import 'chrome://resources/polymer/v3_0/paper-spinner/paper-spinner-lite.js'; import '../settings_shared_css.js'; -import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js'; +import {CrCheckboxElement} from 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.m.js'; +import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js'; +import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js'; import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {loadTimeData} from '../i18n_setup.js'; @@ -27,14 +29,16 @@ import {ResetBrowserProxy, ResetBrowserProxyImpl} from './reset_browser_proxy.js'; +export interface SettingsResetProfileDialogElement { + $: { + dialog: CrDialogElement, + sendSettings: CrCheckboxElement, + }; +} -/** - * @constructor - * @extends {PolymerElement} - * @implements {I18nBehaviorInterface} - */ const SettingsResetProfileDialogElementBase = - mixinBehaviors([I18nBehavior], PolymerElement); + mixinBehaviors([I18nBehavior], PolymerElement) as + {new (): PolymerElement & I18nBehavior}; /** @polymer */ export class SettingsResetProfileDialogElement extends @@ -52,22 +56,18 @@ // TODO(dpapad): Evaluate whether this needs to be synced across different // settings tabs. - /** @private */ isTriggered_: { type: Boolean, value: false, }, - /** @private */ triggeredResetToolName_: { type: String, value: '', }, - /** @private */ resetRequestOrigin_: String, - /** @private */ clearingInProgress_: { type: Boolean, value: false, @@ -75,18 +75,14 @@ }; } - constructor() { - super(); + private isTriggered_: boolean; + private triggeredResetToolName_: string; + private resetRequestOrigin_: string; + private clearingInProgress_: boolean; + private browserProxy_: ResetBrowserProxy = + ResetBrowserProxyImpl.getInstance(); - /** @private {!ResetBrowserProxy} */ - this.browserProxy_ = ResetBrowserProxyImpl.getInstance(); - } - - /** - * @private - * @return {string} - */ - getExplanationText_() { + private getExplanationText_(): string { if (this.isTriggered_) { return loadTimeData.getStringF( 'triggeredResetPageExplanation', this.triggeredResetToolName_); @@ -94,6 +90,7 @@ if (loadTimeData.getBoolean('showExplanationWithBulletPoints')) { return this.i18nAdvanced('resetPageExplanationBulletPoints', { + attrs: [], substitutions: [], tags: ['LINE_BREAKS', 'LINE_BREAK'], }); @@ -102,11 +99,7 @@ return loadTimeData.getStringF('resetPageExplanation'); } - /** - * @private - * @return {string} - */ - getPageTitle_() { + private getPageTitle_(): string { if (this.isTriggered_) { return loadTimeData.getStringF( 'triggeredResetPageTitle', this.triggeredResetToolName_); @@ -114,7 +107,6 @@ return loadTimeData.getStringF('resetDialogTitle'); } - /** @override */ ready() { super.ready(); @@ -122,12 +114,11 @@ this.browserProxy_.onHideResetProfileDialog(); }); - this.shadowRoot.querySelector('cr-checkbox a') - .addEventListener('click', this.onShowReportedSettingsTap_.bind(this)); + this.shadowRoot!.querySelector('cr-checkbox a')!.addEventListener( + 'click', this.onShowReportedSettingsTap_.bind(this)); } - /** @private */ - showDialog_() { + private showDialog_() { if (!this.$.dialog.open) { this.$.dialog.showModal(); } @@ -155,8 +146,7 @@ } } - /** @private */ - onCancelTap_() { + private onCancelTap_() { this.cancel(); } @@ -166,8 +156,7 @@ } } - /** @private */ - onResetTap_() { + private onResetTap_() { this.clearingInProgress_ = true; this.browserProxy_ .performResetProfileSettings( @@ -184,10 +173,8 @@ /** * Displays the settings that will be reported in a new tab. - * @param {!Event} e - * @private */ - onShowReportedSettingsTap_(e) { + private onShowReportedSettingsTap_(e: Event) { this.browserProxy_.showReportedSettings(); e.stopPropagation(); }
diff --git a/chrome/browser/resources/settings/router.js b/chrome/browser/resources/settings/router.js index da457105..c74c062 100644 --- a/chrome/browser/resources/settings/router.js +++ b/chrome/browser/resources/settings/router.js
@@ -431,4 +431,10 @@ } /** @interface */ - export const RouteObserverMixinInterface = RouteObserverBehaviorInterface; + export class RouteObserverMixinInterface { + /** + * @param {!Route} newRoute + * @param {!Route=} opt_oldRoute + */ + currentRouteChanged(newRoute, opt_oldRoute) {} + }
diff --git a/chrome/browser/resources/settings/setting_id_param_util.js b/chrome/browser/resources/settings/setting_id_param_util.ts similarity index 85% rename from chrome/browser/resources/settings/setting_id_param_util.js rename to chrome/browser/resources/settings/setting_id_param_util.ts index dc5930b..e4acc90 100644 --- a/chrome/browser/resources/settings/setting_id_param_util.js +++ b/chrome/browser/resources/settings/setting_id_param_util.ts
@@ -10,15 +10,13 @@ import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {Router} from './router.js'; -/** @type {string} */ -const SETTING_ID_URL_PARAM_NAME = 'settingId'; +const SETTING_ID_URL_PARAM_NAME: string = 'settingId'; /** * Retrieves the setting ID saved in the URL's query parameter. Returns null if * setting ID is unavailable. - * @return {?string} */ -export function getSettingIdParameter() { +export function getSettingIdParameter(): string|null { // This flag must be enabled for the setting ID to be available. if (!loadTimeData.valueExists('isDeepLinkingEnabled') || !loadTimeData.getBoolean('isDeepLinkingEnabled')) {
diff --git a/chrome/browser/resources/settings/settings.gni b/chrome/browser/resources/settings/settings.gni index 9dcf9e0..e79fef2 100644 --- a/chrome/browser/resources/settings/settings.gni +++ b/chrome/browser/resources/settings/settings.gni
@@ -8,4 +8,5 @@ default_closure_args + [ "js_module_root=../../chrome/browser/resources/settings/", "js_module_root=./gen/chrome/browser/resources/settings/", + "js_module_root=./gen/chrome/browser/resources/settings/tsc/", ]
diff --git a/chrome/browser/resources/settings/settings.js b/chrome/browser/resources/settings/settings.ts similarity index 100% rename from chrome/browser/resources/settings/settings.js rename to chrome/browser/resources/settings/settings.ts
diff --git a/chrome/browser/resources/settings/settings_page_css.js b/chrome/browser/resources/settings/settings_page_css.ts similarity index 100% rename from chrome/browser/resources/settings/settings_page_css.js rename to chrome/browser/resources/settings/settings_page_css.ts
diff --git a/chrome/browser/resources/settings/settings_shared_css.js b/chrome/browser/resources/settings/settings_shared_css.ts similarity index 100% rename from chrome/browser/resources/settings/settings_shared_css.js rename to chrome/browser/resources/settings/settings_shared_css.ts
diff --git a/chrome/browser/resources/settings/settings_vars_css.js b/chrome/browser/resources/settings/settings_vars_css.ts similarity index 100% rename from chrome/browser/resources/settings/settings_vars_css.js rename to chrome/browser/resources/settings/settings_vars_css.ts
diff --git a/chrome/browser/resources/tab_search/BUILD.gn b/chrome/browser/resources/tab_search/BUILD.gn index 20a9d52..eb2bbc2 100644 --- a/chrome/browser/resources/tab_search/BUILD.gn +++ b/chrome/browser/resources/tab_search/BUILD.gn
@@ -192,6 +192,7 @@ ":title_item", "//third_party/polymer/v3_0/components-chromium/iron-a11y-announcer", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/cr_elements/cr_expand_button:cr_expand_button.m", "//ui/webui/resources/js:cr.m", "//ui/webui/resources/js:load_time_data.m", "//ui/webui/resources/js:util.m",
diff --git a/chrome/browser/resources/tab_search/app.html b/chrome/browser/resources/tab_search/app.html index a0bbb21..3185012 100644 --- a/chrome/browser/resources/tab_search/app.html +++ b/chrome/browser/resources/tab_search/app.html
@@ -43,13 +43,23 @@ color: var(--cr-secondary-text-color); display: flex; font-size: var(--mwb-list-section-title-font-size); + font-weight: bolder; height: var(--mwb-list-section-title-height); - padding-inline-start: 8px; + padding-inline-end: 24px; + padding-inline-start: 16px; position: sticky; text-transform: uppercase; top: 0; + user-select: none; z-index: 1000; } + + cr-expand-button { + --cr-expand-button-size: 28px; + --cr-expand-button-icon-size: 16px; + --cr-section-vertical-padding: 0; + flex-grow: 1; + } </style> <tab-search-search-field id="searchField" autofocus clear-label="$i18n{clearSearch}" label="$i18n{searchTabs}" @@ -61,7 +71,16 @@ <infinite-list id="tabsList" max-height="[[listMaxHeight_(availableHeight_)]]" items="[[filteredItems_]]"> <template data-type="TitleItem"> - <div class="list-section-title">[[item.title]]</div> + <div class="list-section-title"> + <div>[[item.title]]</div> + <template is="dom-if" if="[[item.expandable]]"> + <cr-expand-button aria-label="$i18n{recentlyClosedExpandA11yLabel}" + expand-icon="cr:arrow-drop-down" collapse-icon="cr:arrow-drop-up" + expanded="[[item.expanded]]" + on-expanded-changed="onTitleExpandChanged_" no-hover> + </cr-expand-button> + </template> + </div> </template> <template data-type="TabData" data-selectable> <tab-search-item id="[[item.tab.tabId]]" aria-label="[[ariaLabel_(item)]]"
diff --git a/chrome/browser/resources/tab_search/app.js b/chrome/browser/resources/tab_search/app.js index fc655cdc..7ace13d 100644 --- a/chrome/browser/resources/tab_search/app.js +++ b/chrome/browser/resources/tab_search/app.js
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.m.js'; import 'chrome://resources/cr_elements/shared_vars_css.m.js'; import 'chrome://resources/cr_elements/mwb_shared_style.js'; import 'chrome://resources/cr_elements/mwb_shared_vars.js'; @@ -11,6 +12,7 @@ import './tab_search_group_item.js'; import './tab_search_item.js'; import './tab_search_search_field.js'; +import './title_item.js'; import './strings.m.js'; import {assert} from 'chrome://resources/js/assert.m.js'; @@ -141,8 +143,9 @@ this.openTabsTitleItem_ = new TitleItem(loadTimeData.getString('openTabs')); /** @private {!TitleItem} */ - this.recentlyClosedTitleItem_ = - new TitleItem(loadTimeData.getString('recentlyClosed')); + this.recentlyClosedTitleItem_ = new TitleItem( + loadTimeData.getString('recentlyClosed'), true /*expandable*/, + true /*expanded*/); } /** @override */ @@ -233,8 +236,7 @@ /** @private */ onDocumentHidden_() { - this.$.tabsList.scrollTop = 0; - this.$.tabsList.selected = NO_SELECTION; + this.filteredItems_ = []; this.$.searchField.setValue(''); this.$.searchField.getSearchInput().focus(); @@ -456,6 +458,8 @@ loadTimeData.getString('a11yRecentlyClosedTabGroup'); return tabGroupData; }); + this.recentlyClosedTitleItem_.expanded = + profileData.recentlyClosedSectionExpanded; this.updateFilteredTabs_(); @@ -479,6 +483,25 @@ /** @type {number} */ (e.model.index); } + /** + * @param {CustomEvent} e + * @private + */ + onTitleExpandChanged_(e) { + // Instead of relying on two-way binding to update the `expanded` property, + // we update the value directly as the `expanded-changed` event takes place + // before a two way bound property update and we need the TitleItem + // instance to reflect the updated state prior to calling the + // updateFilteredTabs_ function. + const expanded = e.detail.value; + const titleItem = /** @type {TitleItem} */ (e.model.item); + titleItem.expanded = expanded; + this.apiProxy_.saveRecentlyClosedExpandedPref(expanded); + + this.updateFilteredTabs_(); + e.stopPropagation(); + } + /** @private */ onSearchFocus_() { const tabsList = /** @type {!InfiniteList} */ (this.$.tabsList); @@ -654,7 +677,11 @@ [this.recentlyClosedTitleItem_, filteredRecentlyClosedItems], ].reduce((acc, [sectionTitle, sectionItems]) => { if (sectionItems.length !== 0) { - acc.push(sectionTitle, ...sectionItems); + acc.push(sectionTitle); + if (!sectionTitle.expandable || + sectionTitle.expandable && sectionTitle.expanded) { + acc.push(...sectionItems); + } } return acc; }, []);
diff --git a/chrome/browser/resources/tab_search/tab_search_api_proxy.js b/chrome/browser/resources/tab_search/tab_search_api_proxy.js index f22e7ff..5afe9093 100644 --- a/chrome/browser/resources/tab_search/tab_search_api_proxy.js +++ b/chrome/browser/resources/tab_search/tab_search_api_proxy.js
@@ -55,6 +55,9 @@ /** @return {!PageCallbackRouter} */ getCallbackRouter() {} + /** @param {boolean} expanded */ + saveRecentlyClosedExpandedPref(expanded) {} + showUI() {} } @@ -120,6 +123,11 @@ } /** @override */ + saveRecentlyClosedExpandedPref(expanded) { + this.handler.saveRecentlyClosedExpandedPref(expanded); + } + + /** @override */ showUI() { this.handler.showUI(); }
diff --git a/chrome/browser/resources/tab_search/title_item.js b/chrome/browser/resources/tab_search/title_item.js index 2dd9c05..cc34631 100644 --- a/chrome/browser/resources/tab_search/title_item.js +++ b/chrome/browser/resources/tab_search/title_item.js
@@ -3,9 +3,19 @@ // found in the LICENSE file. export class TitleItem { - /** @param {string} title */ - constructor(title) { + /** + * @param {string} title + * @param {boolean} expandable + * @param {boolean} expanded + */ + constructor(title, expandable = false, expanded = false) { /** @type {string} */ this.title = title; + + /** @type {boolean} */ + this.expandable = expandable; + + /** @type {boolean} */ + this.expanded = expanded; } }
diff --git a/chrome/browser/resources/whats_new/whats_new_app.html b/chrome/browser/resources/whats_new/whats_new_app.html index 8da8c54..729dd10 100644 --- a/chrome/browser/resources/whats_new/whats_new_app.html +++ b/chrome/browser/resources/whats_new/whats_new_app.html
@@ -1,4 +1,12 @@ -<style include="cr-hidden-style"></style> -<template is="dom-if" if="[[loadFailed_]]"> +<style include="cr-hidden-style"> + #content { + height: 100%; + width: 100%; + } +</style> +<template is="dom-if" if="[[showErrorPage_]]"> <whats-new-error-page></whats-new-error-page> </template> +<template is="dom-if" if="[[url_]]"> + <iframe id="content" src="[[url_]]"></iframe> +</template>
diff --git a/chrome/browser/resources/whats_new/whats_new_app.ts b/chrome/browser/resources/whats_new/whats_new_app.ts index 6e76fe14..bffd70e 100644 --- a/chrome/browser/resources/whats_new/whats_new_app.ts +++ b/chrome/browser/resources/whats_new/whats_new_app.ts
@@ -6,7 +6,9 @@ import './whats_new_error_page.js'; import './strings.m.js'; -import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {sendWithPromise} from 'chrome://resources/js/cr.m.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +import {html, microTask, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; export class WhatsNewAppElement extends PolymerElement { static get is() { @@ -15,12 +17,28 @@ static get properties() { return { - loadFailed_: Boolean, + showErrorPage_: Boolean, + url_: String, }; } - // Temporarily default to true while there's no other content. - private loadFailed_: boolean = true; + private showErrorPage_: boolean = false; + private url_: string = ''; + + connectedCallback() { + super.connectedCallback(); + + const queryParams = new URLSearchParams(window.location.search); + const isAutoOpen = queryParams.has('auto'); + sendWithPromise('initialize', isAutoOpen).then(url => { + if (!url) { + this.showErrorPage_ = true; + return; + } + + this.url_ = isAutoOpen ? url.concat('?latest=true') : url; + }); + } static get template() { return html`{__html_template__}`;
diff --git a/chrome/browser/supervised_user/supervised_user_url_filter.cc b/chrome/browser/supervised_user/supervised_user_url_filter.cc index 1a7e292..7ade8cb 100644 --- a/chrome/browser/supervised_user/supervised_user_url_filter.cc +++ b/chrome/browser/supervised_user/supervised_user_url_filter.cc
@@ -137,6 +137,18 @@ // Reports ManualSiteListType which indicates approved list and blocked list // usage for current Family Link user on Chrome OS. constexpr char kManagedSiteListHistogramName[] = "FamilyUser.ManagedSiteList"; + +// UMA histogram FamilyUser.ManagedSiteListCount.Approved +// Reports the number of approved urls and domains for current Family Link user +// on Chrome OS. +constexpr char kApprovedSitesCountHistogramName[] = + "FamilyUser.ManagedSiteListCount.Approved"; + +// UMA histogram FamilyUser.ManagedSiteListCount.Blocked +// Reports the number of blocked urls and domains for current Family Link user +// on Chrome OS. +constexpr char kBlockedSitesCountHistogramName[] = + "FamilyUser.ManagedSiteListCount.Blocked"; #endif // BUILDFLAG(IS_CHROMEOS_ASH) // This class encapsulates all the state that is required during construction of @@ -266,6 +278,18 @@ return kManagedSiteListHistogramName; } +// static +const char* +SupervisedUserURLFilter::GetApprovedSitesCountHistogramNameForTest() { + return kApprovedSitesCountHistogramName; +} + +// static +const char* +SupervisedUserURLFilter::GetBlockedSitesCountHistogramNameForTest() { + return kBlockedSitesCountHistogramName; +} + #endif // BUILDFLAG(IS_CHROMEOS_ASH) // static @@ -737,40 +761,42 @@ if (url_map_.empty() && host_map_.empty()) { base::UmaHistogramEnumeration(kManagedSiteListHistogramName, ManagedSiteList::kEmpty); + base::UmaHistogramCounts1000(kApprovedSitesCountHistogramName, 0); + base::UmaHistogramCounts1000(kBlockedSitesCountHistogramName, 0); return; } ManagedSiteList managed_site_list = ManagedSiteList::kMaxValue; - bool approved_list = false; - bool blocked_list = false; + int approved_count = 0; + int blocked_count = 0; for (const auto& it : url_map_) { - if (approved_list && blocked_list) - break; if (it.second) { - approved_list = true; + approved_count++; } else { - blocked_list = true; + blocked_count++; } } for (const auto& it : host_map_) { - if (approved_list && blocked_list) - break; if (it.second) { - approved_list = true; + approved_count++; } else { - blocked_list = true; + blocked_count++; } } - if (approved_list && blocked_list) { + if (approved_count > 0 && blocked_count > 0) { managed_site_list = ManagedSiteList::kBoth; - } else if (approved_list) { + } else if (approved_count > 0) { managed_site_list = ManagedSiteList::kApprovedListOnly; } else { managed_site_list = ManagedSiteList::kBlockedListOnly; } + base::UmaHistogramCounts1000(kApprovedSitesCountHistogramName, + approved_count); + base::UmaHistogramCounts1000(kBlockedSitesCountHistogramName, blocked_count); + base::UmaHistogramEnumeration(kManagedSiteListHistogramName, managed_site_list); }
diff --git a/chrome/browser/supervised_user/supervised_user_url_filter.h b/chrome/browser/supervised_user/supervised_user_url_filter.h index eb7bdf8..73e4d85 100644 --- a/chrome/browser/supervised_user/supervised_user_url_filter.h +++ b/chrome/browser/supervised_user/supervised_user_url_filter.h
@@ -131,6 +131,8 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) static const char* GetWebFilterTypeHistogramNameForTest(); static const char* GetManagedSiteListHistogramNameForTest(); + static const char* GetApprovedSitesCountHistogramNameForTest(); + static const char* GetBlockedSitesCountHistogramNameForTest(); #endif // BUILDFLAG(IS_CHROMEOS_ASH) // Returns true if the parental allowlist/blocklist should be skipped in
diff --git a/chrome/browser/sync/test/integration/enable_disable_test.cc b/chrome/browser/sync/test/integration/enable_disable_test.cc index dde89a5..3f7369b 100644 --- a/chrome/browser/sync/test/integration/enable_disable_test.cc +++ b/chrome/browser/sync/test/integration/enable_disable_test.cc
@@ -127,7 +127,13 @@ DISALLOW_COPY_AND_ASSIGN(EnableDisableSingleClientTest); }; -IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, EnableOneAtATime) { +// TODO(crbug.com/1235713): Possibly fails/flaky on Linux. +#if defined(OS_LINUX) +#define MAYBE_EnableOneAtATime DISABLED_EnableOneAtATime +#else +#define MAYBE_EnableOneAtATime EnableOneAtATime +#endif +IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, MAYBE_EnableOneAtATime) { // Setup sync with no enabled types. SetupTest(/*all_types_enabled=*/false);
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java index e1e45159..cdb4a89 100644 --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java
@@ -281,6 +281,8 @@ return TabLaunchType.FROM_TAB_GROUP_UI; case FROM_LONGPRESS_BACKGROUND_IN_GROUP: return TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP; + case FROM_APP_WIDGET: + return TabLaunchType.FROM_APP_WIDGET; case SIZE: return TabLaunchType.SIZE; default: @@ -331,6 +333,8 @@ case TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP: return CriticalPersistedTabDataProto.LaunchTypeAtCreation .FROM_LONGPRESS_BACKGROUND_IN_GROUP; + case TabLaunchType.FROM_APP_WIDGET: + return CriticalPersistedTabDataProto.LaunchTypeAtCreation.FROM_APP_WIDGET; case TabLaunchType.SIZE: return CriticalPersistedTabDataProto.LaunchTypeAtCreation.SIZE; default:
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/proto/critical_persisted_tab_data.proto b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/proto/critical_persisted_tab_data.proto index ebc21375..1b3d2d0 100644 --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/proto/critical_persisted_tab_data.proto +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/proto/critical_persisted_tab_data.proto
@@ -48,8 +48,9 @@ FROM_START_SURFACE = 12; FROM_TAB_GROUP_UI = 13; FROM_LONGPRESS_BACKGROUND_IN_GROUP = 14; - SIZE = 15; - UNKNOWN = 16; + FROM_APP_WIDGET = 15; + SIZE = 16; + UNKNOWN = 17; } optional LaunchTypeAtCreation launch_type_at_creation = 8; }
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index f975bd3c..7566fd8 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1569,6 +1569,8 @@ "webui/system_info_ui.h", "webui/tab_search/tab_search_page_handler.cc", "webui/tab_search/tab_search_page_handler.h", + "webui/tab_search/tab_search_prefs.cc", + "webui/tab_search/tab_search_prefs.h", "webui/tab_search/tab_search_ui.cc", "webui/tab_search/tab_search_ui.h", "webui/theme_handler.cc", @@ -1581,8 +1583,12 @@ "webui/web_app_internals/web_app_internals_source.h", "webui/web_footer_experiment_ui.cc", "webui/web_footer_experiment_ui.h", + "webui/whats_new/whats_new_handler.cc", + "webui/whats_new/whats_new_handler.h", "webui/whats_new/whats_new_ui.cc", "webui/whats_new/whats_new_ui.h", + "webui/whats_new/whats_new_util.cc", + "webui/whats_new/whats_new_util.h", "window_sizer/window_sizer.cc", "window_sizer/window_sizer.h", "zoom/chrome_zoom_level_otr_delegate.cc",
diff --git a/chrome/browser/ui/android/layouts/test/java/src/org/chromium/chrome/browser/layouts/LayoutTestUtils.java b/chrome/browser/ui/android/layouts/test/java/src/org/chromium/chrome/browser/layouts/LayoutTestUtils.java index 58bc024..a7bf7b3 100644 --- a/chrome/browser/ui/android/layouts/test/java/src/org/chromium/chrome/browser/layouts/LayoutTestUtils.java +++ b/chrome/browser/ui/android/layouts/test/java/src/org/chromium/chrome/browser/layouts/LayoutTestUtils.java
@@ -21,8 +21,6 @@ */ public static void waitForLayout(LayoutManager layoutManager, @LayoutType int type) throws TimeoutException { - if (layoutManager.isLayoutVisible(type)) return; - CallbackHelper finishedShowingCallbackHelper = new CallbackHelper(); LayoutStateObserver observer = new LayoutStateObserver() { @Override @@ -30,7 +28,13 @@ finishedShowingCallbackHelper.notifyCalled(); } }; - TestThreadUtils.runOnUiThreadBlocking(() -> layoutManager.addObserver(observer)); + TestThreadUtils.runOnUiThreadBlocking(() -> { + if (layoutManager.isLayoutVisible(type)) { + finishedShowingCallbackHelper.notifyCalled(); + return; + } + layoutManager.addObserver(observer); + }); finishedShowingCallbackHelper.waitForFirst(); TestThreadUtils.runOnUiThreadBlocking(() -> layoutManager.removeObserver(observer));
diff --git a/chrome/browser/ui/android/quickactionsearchwidget/BUILD.gn b/chrome/browser/ui/android/quickactionsearchwidget/BUILD.gn index 3b68c53..47a32aa 100644 --- a/chrome/browser/ui/android/quickactionsearchwidget/BUILD.gn +++ b/chrome/browser/ui/android/quickactionsearchwidget/BUILD.gn
@@ -42,6 +42,7 @@ "//chrome/android:chrome_java", "//chrome/browser/flags:java", "//chrome/browser/tab:java", + "//chrome/browser/tabmodel:java", "//chrome/browser/ui/android/searchactivityutils:java", "//chrome/test/android:chrome_java_test_support", "//components/embedder_support/android:util_java",
diff --git a/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetProviderDelegate.java b/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetProviderDelegate.java index 72b0e11d..921bd33 100644 --- a/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetProviderDelegate.java +++ b/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetProviderDelegate.java
@@ -21,6 +21,7 @@ public class QuickActionSearchWidgetProviderDelegate { private final @QuickActionSearchWidgetType int mWidgetType; private final ComponentName mWidgetReceiverComponent; + private final Intent mStartIncognitoTabIntent; /** * Constructor for the {@link QuickActionSearchWidgetProviderDelegate} @@ -30,11 +31,15 @@ * android.content.BroadcastReceiver} that will receive the intents that are broadcast * when the user interacts with the widget. Generally this component is {@link * QuickActionSearchWidgetReceiver}. + * @param startIncognitoIntent A trusted intent starting a new Incognito tab. */ - public QuickActionSearchWidgetProviderDelegate( - @QuickActionSearchWidgetType int widgetType, ComponentName widgetReceiverComponent) { + public QuickActionSearchWidgetProviderDelegate(@QuickActionSearchWidgetType int widgetType, + ComponentName widgetReceiverComponent, Intent startIncognitoTabIntent) { mWidgetType = widgetType; mWidgetReceiverComponent = widgetReceiverComponent; + mStartIncognitoTabIntent = startIncognitoTabIntent; + mStartIncognitoTabIntent.addFlags( + Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT); } /** @@ -95,33 +100,39 @@ // Search Bar Intent PendingIntent textSearchPendingIntent = createPendingIntentForAction( - QuickActionSearchWidgetReceiverDelegate.ACTION_START_TEXT_QUERY, context); + context, QuickActionSearchWidgetReceiverDelegate.ACTION_START_TEXT_QUERY); remoteViews.setOnClickPendingIntent( R.id.quick_action_search_widget_search_bar_container, textSearchPendingIntent); // Voice Search Intent PendingIntent voiceSearchPendingIntent = createPendingIntentForAction( - QuickActionSearchWidgetReceiverDelegate.ACTION_START_VOICE_QUERY, context); + context, QuickActionSearchWidgetReceiverDelegate.ACTION_START_VOICE_QUERY); remoteViews.setOnClickPendingIntent( R.id.voice_search_quick_action_button, voiceSearchPendingIntent); + // Incognito Tab Intent + PendingIntent incognitoTabPendingIntent = + createPendingIntent(context, mStartIncognitoTabIntent); + remoteViews.setOnClickPendingIntent( + R.id.incognito_quick_action_button, incognitoTabPendingIntent); + // Dino Game intent PendingIntent dinoGamePendingIntent = createPendingIntentForAction( - QuickActionSearchWidgetReceiverDelegate.ACTION_START_DINO_GAME, context); + context, QuickActionSearchWidgetReceiverDelegate.ACTION_START_DINO_GAME); remoteViews.setOnClickPendingIntent(R.id.dino_quick_action_button, dinoGamePendingIntent); return remoteViews; } /** - * Creates a {@link PendingIntent} that will broadcast a trusted intent for a specified action. + * Creates a {@link PendingIntent} that will send a trusted intent with a specified action. * * @param context The Context from which the PendingIntent will perform the broadcast. * @param action A String specifying the action for the intent. * @return A {@link PendingIntent} that will broadcast a trusted intent for the specified * action. */ - private PendingIntent createPendingIntentForAction(final String action, final Context context) { + private PendingIntent createPendingIntentForAction(final Context context, final String action) { Intent intent = createTrustedIntentForAction(action); return PendingIntent.getBroadcast(context, /*requestCode=*/0, intent, PendingIntent.FLAG_UPDATE_CURRENT @@ -129,6 +140,20 @@ } /** + * Creates a {@link PendingIntent} that will send a trusted intent with a specified action. + * + * @param context The Context from which the PendingIntent will perform the broadcast. + * @param intent An intent to execute. + * @return A {@link PendingIntent} that will broadcast a trusted intent for the specified + * action. + */ + private PendingIntent createPendingIntent(final Context context, final Intent intent) { + return PendingIntent.getActivity(context, /*requestCode=*/0, intent, + PendingIntent.FLAG_UPDATE_CURRENT + | IntentUtils.getPendingIntentMutabilityFlag(false)); + } + + /** * Creates a trusted intent corresponding to a specified action. * * @param action a String specifying the action for the trusted intent. @@ -167,4 +192,4 @@ return R.layout.quick_action_search_widget_small_layout; } } -} \ No newline at end of file +}
diff --git a/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetProviderDelegateTest.java b/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetProviderDelegateTest.java index dd1a5f3..a331b2c7 100644 --- a/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetProviderDelegateTest.java +++ b/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetProviderDelegateTest.java
@@ -7,6 +7,7 @@ import android.app.Activity; import android.appwidget.AppWidgetManager; import android.content.ComponentName; +import android.content.Intent; import android.support.test.InstrumentationRegistry; import android.view.View; import android.widget.FrameLayout; @@ -25,6 +26,7 @@ import org.chromium.base.test.util.ApplicationTestUtils; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.DisabledTest; +import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.quickactionsearchwidget.QuickActionSearchWidgetReceiver; @@ -52,8 +54,8 @@ private static final class TestDelegate extends QuickActionSearchWidgetProviderDelegate { public TestDelegate(@QuickActionSearchWidgetType int widgetType, - ComponentName widgetReceiverComponent) { - super(widgetType, widgetReceiverComponent); + ComponentName widgetReceiverComponent, Intent startIncognitoTab) { + super(widgetType, widgetReceiverComponent, startIncognitoTab); } public final List<RemoteViews> mRemoteViews = new ArrayList<>(); @@ -87,7 +89,9 @@ ComponentName widgetReceiverComponent = new ComponentName(mContext, QuickActionSearchWidgetReceiver.class); - mDelegate = new TestDelegate(QuickActionSearchWidgetType.SMALL, widgetReceiverComponent); + + mDelegate = new TestDelegate(QuickActionSearchWidgetType.SMALL, widgetReceiverComponent, + IntentHandler.createTrustedOpenNewTabIntent(mContext, /*incognito=*/true)); setUpViews(); } @@ -114,6 +118,19 @@ @Test @SmallTest + public void testIncognitoTabClick() throws Exception { + for (View view : mWidgetViews) { + QuickActionSearchWidgetTestUtils.assertIncognitoModeLaunchedAfterAction( + mActivityTestRule, () -> { + QuickActionSearchWidgetTestUtils.clickOnView( + view, R.id.incognito_quick_action_button); + }); + ApplicationTestUtils.finishActivity(mActivityTestRule.getActivity()); + } + } + + @Test + @SmallTest public void testVoiceButtonClick() throws Exception { for (View view : mWidgetViews) { // clang-format off
diff --git a/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetTestUtils.java b/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetTestUtils.java index 4455a98..3c178b0 100644 --- a/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetTestUtils.java +++ b/chrome/browser/ui/android/quickactionsearchwidget/java/src/org/chromium/chrome/browser/ui/quickactionsearchwidget/QuickActionSearchWidgetTestUtils.java
@@ -6,6 +6,7 @@ import android.app.Activity; import android.content.Intent; +import android.support.test.InstrumentationRegistry; import android.support.test.runner.lifecycle.Stage; import android.view.View; @@ -32,6 +33,7 @@ * Asserts that {@link SearchActivity} is launched in the correct mode after a given {@link * Runnable} is ran. * + * @param testRule BaseActivityTestRule used to start an action and monitor for changes. * @param action The runnable such that after it is ran, {@link SearchActivity} is expected to * be launched. * @param shouldActivityLaunchVoiceMode Whether the search activity is expected to launched in @@ -50,6 +52,7 @@ * Asserts that {@link ChromeTabbedActivity} is launched with the URL chrome://dino after a * given {@link Runnable} is ran. * + * @param testRule BaseActivityTestRule used to start an action and monitor for changes. * @param action the runnable such that after running {@link ChromeTabbedActivity} is expected * to be launched. */ @@ -86,4 +89,28 @@ intent, SearchActivityConstants.EXTRA_SHOULD_START_VOICE_SEARCH, false); Assert.assertEquals(shouldActivityLaunchVoiceMode, isVoiceMode); } + + /** + * Asserts that {@link ChromeTabbedActivity} is launched in an incognito mode after a + * given {@link Runnable} is ran. + * + * @param testRule BaseActivityTestRule used to start an action and monitor for changes. + * @param action the runnable such that after running {@link ChromeTabbedActivity} is expected + * to be launched. + */ + public static void assertIncognitoModeLaunchedAfterAction( + BaseActivityTestRule<Activity> testRule, Runnable action) { + ChromeTabbedActivity activity = ApplicationTestUtils.waitForActivityWithClass( + ChromeTabbedActivity.class, Stage.CREATED, action); + testRule.setActivity(activity); + InstrumentationRegistry.getInstrumentation().waitForIdleSync(); + + CriteriaHelper.pollUiThread(() -> { + Tab activityTab = activity.getActivityTab(); + Assert.assertTrue(activity.getTabModelSelector().isIncognitoSelected()); + Criteria.checkThat(activityTab, Matchers.notNullValue()); + Criteria.checkThat( + activityTab.getUrl().getSpec(), Matchers.startsWith(UrlConstants.NTP_URL)); + }); + } }
diff --git a/chrome/browser/ui/android/tab_model/tab_model.h b/chrome/browser/ui/android/tab_model/tab_model.h index d866b05..baf7b29 100644 --- a/chrome/browser/ui/android/tab_model/tab_model.h +++ b/chrome/browser/ui/android/tab_model/tab_model.h
@@ -94,6 +94,8 @@ // Open from the long press context menu item 'Open in new tab in group'. // Will not be brought to the foreground. FROM_LONGPRESS_BACKGROUND_IN_GROUP, + // Opened from an app widget. + FROM_APP_WIDGET, // Must be last. SIZE };
diff --git a/chrome/browser/ui/android/toolbar/BUILD.gn b/chrome/browser/ui/android/toolbar/BUILD.gn index 593f012..5485ecb2 100644 --- a/chrome/browser/ui/android/toolbar/BUILD.gn +++ b/chrome/browser/ui/android/toolbar/BUILD.gn
@@ -264,6 +264,7 @@ "java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonControllerTest.java", "java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java", "java/src/org/chromium/chrome/browser/toolbar/adaptive/OptionalNewTabButtonControllerUnitTest.java", + "java/src/org/chromium/chrome/browser/toolbar/adaptive/settings/AdaptiveToolbarPreferenceFragmentUnitTest.java", "java/src/org/chromium/chrome/browser/toolbar/menu_button/MenuButtonCoordinatorTest.java", "java/src/org/chromium/chrome/browser/toolbar/menu_button/MenuButtonMediatorTest.java", "java/src/org/chromium/chrome/browser/toolbar/menu_button/MenuButtonTest.java", @@ -304,8 +305,11 @@ "//third_party/android_deps:guava_android_java", "//third_party/android_deps:robolectric_all_java", "//third_party/android_support_test_runner:runner_java", + "//third_party/androidx:androidx_fragment_fragment_java", + "//third_party/androidx:androidx_recyclerview_recyclerview_java", "//third_party/androidx:androidx_test_core_java", "//third_party/androidx:androidx_test_runner_java", + "//third_party/androidx:androidx_viewpager2_viewpager2_java", "//third_party/hamcrest:hamcrest_library_java", "//third_party/junit", "//third_party/mockito:mockito_java",
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/settings/AdaptiveToolbarPreferenceFragment.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/settings/AdaptiveToolbarPreferenceFragment.java index da0c083d..fb378ed 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/settings/AdaptiveToolbarPreferenceFragment.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/settings/AdaptiveToolbarPreferenceFragment.java
@@ -85,6 +85,6 @@ @VisibleForTesting /*package*/ void setCanUseVoiceSearchForTesting(boolean canUseVoiceSearch) { - mRadioButtonGroup.setCanUseVoiceSearch(false); + mRadioButtonGroup.setCanUseVoiceSearch(canUseVoiceSearch); } }
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/settings/AdaptiveToolbarPreferenceFragmentUnitTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/settings/AdaptiveToolbarPreferenceFragmentUnitTest.java new file mode 100644 index 0000000..8da9cefe --- /dev/null +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/settings/AdaptiveToolbarPreferenceFragmentUnitTest.java
@@ -0,0 +1,124 @@ +// 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. + +package org.chromium.chrome.browser.toolbar.adaptive.settings; + +import static org.junit.Assert.assertEquals; + +import android.os.Looper; +import android.util.Pair; +import android.view.View; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestRule; +import org.junit.runner.RunWith; +import org.robolectric.Robolectric; +import org.robolectric.Shadows; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; + +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarFeatures; +import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarFeatures.AdaptiveToolbarButtonVariant; +import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarStatePredictor; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.chrome.test.util.browser.Features.DisableFeatures; +import org.chromium.chrome.test.util.browser.Features.EnableFeatures; +import org.chromium.components.browser_ui.widget.RadioButtonWithDescription; + +/** + * Unit tests for {@link AdaptiveToolbarPreferenceFragment} and {@link + * RadioButtonGroupAdaptiveToolbarPreference}. + */ +@RunWith(BaseRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.PAUSED) +public class AdaptiveToolbarPreferenceFragmentUnitTest { + @Rule + public TestRule mProcessor = new Features.JUnitProcessor(); + + private FragmentActivity mTestActivity; + private AdaptiveToolbarPreferenceFragment mFragment; + + private static class TestFragmentAdapter extends FragmentStateAdapter { + private AdaptiveToolbarPreferenceFragment mLastFragment; + + public TestFragmentAdapter(FragmentActivity fragmentActivity) { + super(fragmentActivity); + } + + @Override + public Fragment createFragment(int i) { + mLastFragment = new AdaptiveToolbarPreferenceFragment(); + return mLastFragment; + } + + public AdaptiveToolbarPreferenceFragment getLastFragment() { + return mLastFragment; + } + + @Override + public int getItemCount() { + return 1; + } + } + + @Before + public void setUp() { + AdaptiveToolbarStatePredictor.setSegmentationResultsForTesting( + new Pair<>(true, AdaptiveToolbarButtonVariant.NEW_TAB)); + + mTestActivity = Robolectric.setupActivity(FragmentActivity.class); + ViewPager2 view = new ViewPager2(mTestActivity); + mTestActivity.setContentView(view); + + TestFragmentAdapter adapter = new TestFragmentAdapter(mTestActivity); + view.setAdapter(adapter); + Shadows.shadowOf(Looper.getMainLooper()).idle(); + mFragment = adapter.getLastFragment(); + } + + @After + public void tearDown() { + AdaptiveToolbarStatePredictor.setSegmentationResultsForTesting(null); + AdaptiveToolbarFeatures.clearParsedParamsForTesting(); + } + + @Test + @EnableFeatures({ChromeFeatureList.ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION}) + @DisableFeatures({ChromeFeatureList.VOICE_SEARCH_AUDIO_CAPTURE_POLICY}) + public void testCanUseVoiceSearch_enabled() { + mFragment.setCanUseVoiceSearchForTesting(true); + + RadioButtonGroupAdaptiveToolbarPreference radioButtonGroup = mFragment.findPreference( + AdaptiveToolbarPreferenceFragment.PREF_ADAPTIVE_RADIO_GROUP); + RadioButtonWithDescription voiceButton = + radioButtonGroup.getButton(AdaptiveToolbarButtonVariant.VOICE); + + assertEquals(View.VISIBLE, voiceButton.getVisibility()); + } + + @Test + @EnableFeatures({ChromeFeatureList.ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION}) + @DisableFeatures({ChromeFeatureList.VOICE_SEARCH_AUDIO_CAPTURE_POLICY}) + public void testCanUseVoiceSearch_disabled() { + mFragment.setCanUseVoiceSearchForTesting(false); + + RadioButtonGroupAdaptiveToolbarPreference radioButtonGroup = mFragment.findPreference( + AdaptiveToolbarPreferenceFragment.PREF_ADAPTIVE_RADIO_GROUP); + RadioButtonWithDescription voiceButton = + radioButtonGroup.getButton(AdaptiveToolbarButtonVariant.VOICE); + + assertEquals(View.GONE, voiceButton.getVisibility()); + } +}
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/Toolbar.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/Toolbar.java index 058290e..38ea0b8 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/Toolbar.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/Toolbar.java
@@ -86,4 +86,10 @@ * @return The primary color to use for the background drawable. */ int getPrimaryColor(); + + /** + * Updates the visibility of the reload button. + * @param isReloading Whether or not the page is loading. + */ + void updateReloadButtonVisibility(boolean isReloading); }
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java index 5af4182..201262e 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java
@@ -398,11 +398,7 @@ mToolbarLayout.updateForwardButtonVisibility(canGoForward); } - /** - * Gives inheriting classes the chance to update the visibility of the - * reload button. - * @param isReloading Whether or not the current tab is loading. - */ + @Override public void updateReloadButtonVisibility(boolean isReloading) { mToolbarLayout.updateReloadButtonVisibility(isReloading); }
diff --git a/chrome/browser/ui/ash/accessibility/fake_accessibility_controller.cc b/chrome/browser/ui/ash/accessibility/fake_accessibility_controller.cc index 1c11f47..335a975 100644 --- a/chrome/browser/ui/ash/accessibility/fake_accessibility_controller.cc +++ b/chrome/browser/ui/ash/accessibility/fake_accessibility_controller.cc
@@ -70,6 +70,10 @@ void FakeAccessibilityController::ToggleDictationFromSource( ash::DictationToggleSource source) {} +void FakeAccessibilityController::ShowDictationLanguageUpgradedNudge( + const std::string& dictation_locale, + const std::string& application_locale) {} + void FakeAccessibilityController::HandleAutoclickScrollableBoundsFound( gfx::Rect& bounds_in_screen) {}
diff --git a/chrome/browser/ui/ash/accessibility/fake_accessibility_controller.h b/chrome/browser/ui/ash/accessibility/fake_accessibility_controller.h index d6d2160..c162abb 100644 --- a/chrome/browser/ui/ash/accessibility/fake_accessibility_controller.h +++ b/chrome/browser/ui/ash/accessibility/fake_accessibility_controller.h
@@ -45,6 +45,9 @@ void SetPointScanSpeedDipsPerSecond( int point_scan_speed_dips_per_second) override; void ToggleDictationFromSource(ash::DictationToggleSource source) override; + void ShowDictationLanguageUpgradedNudge( + const std::string& dictation_locale, + const std::string& application_locale) override; void HandleAutoclickScrollableBoundsFound( gfx::Rect& bounds_in_screen) override; std::u16string GetBatteryDescription() const override;
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc index 0a4982c..cd07126 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc +++ b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
@@ -30,8 +30,8 @@ // Helpers --------------------------------------------------------------------- -// Returns a download event state converted from the specified item `state`. -crosapi::mojom::DownloadState ConvertToDownloadEventState( +// Returns a mojo download state converted from the specified item `state`. +crosapi::mojom::DownloadState ConvertToMojoDownloadState( download::DownloadItem::DownloadState state) { switch (state) { case download::DownloadItem::IN_PROGRESS: @@ -47,41 +47,42 @@ } } -// Returns a download event converted from the specified `item`. -crosapi::mojom::DownloadEventPtr ConvertToDownloadEvent( +// Returns a mojo download item converted from the specified `item`. +crosapi::mojom::DownloadItemPtr ConvertToMojoDownloadItem( const download::DownloadItem* item) { - auto download_event = crosapi::mojom::DownloadEvent::New(); - download_event->guid = item->GetGuid(); - download_event->state = ConvertToDownloadEventState(item->GetState()); - download_event->target_file_path = item->GetTargetFilePath(); - download_event->full_path = item->GetFullPath(); - download_event->is_paused = item->IsPaused(); - download_event->has_is_paused = true; - download_event->open_when_complete = item->GetOpenWhenComplete(); - download_event->has_open_when_complete = true; - download_event->received_bytes = item->GetReceivedBytes(); - download_event->has_received_bytes = true; - download_event->total_bytes = item->GetTotalBytes(); - download_event->has_total_bytes = true; + auto mojo_download_item = crosapi::mojom::DownloadItem::New(); + mojo_download_item->guid = item->GetGuid(); + mojo_download_item->state = ConvertToMojoDownloadState(item->GetState()); + mojo_download_item->target_file_path = item->GetTargetFilePath(); + mojo_download_item->full_path = item->GetFullPath(); + mojo_download_item->is_paused = item->IsPaused(); + mojo_download_item->has_is_paused = true; + mojo_download_item->open_when_complete = item->GetOpenWhenComplete(); + mojo_download_item->has_open_when_complete = true; + mojo_download_item->received_bytes = item->GetReceivedBytes(); + mojo_download_item->has_received_bytes = true; + mojo_download_item->total_bytes = item->GetTotalBytes(); + mojo_download_item->has_total_bytes = true; // NOTE: `browser_context` may be `nullptr` in tests. auto* browser_context = content::DownloadItemUtils::GetBrowserContext(item); - download_event->is_from_incognito_profile = + mojo_download_item->is_from_incognito_profile = browser_context ? Profile::FromBrowserContext(browser_context)->IsIncognitoProfile() : false; - return download_event; + return mojo_download_item; } -// Returns whether the underlying download for the given `event` is complete. -bool IsComplete(const crosapi::mojom::DownloadEvent* event) { - return event->state == crosapi::mojom::DownloadState::kComplete; +// Returns whether the specified `mojo_download_item` is complete. +bool IsComplete(const crosapi::mojom::DownloadItem* mojo_download_item) { + return mojo_download_item->state == crosapi::mojom::DownloadState::kComplete; } -// Returns whether the underlying download for the given `event` is in progress. -bool IsInProgress(const crosapi::mojom::DownloadEvent* event) { - return event->state == crosapi::mojom::DownloadState::kInProgress; +// Returns whether the specified `mojo_download_item` is in progress. +bool IsInProgress(const crosapi::mojom::DownloadItem* mojo_download_item) { + return mojo_download_item->state == + crosapi::mojom::DownloadState::kInProgress; } // Returns whether the specified `download_item` is in progress. @@ -93,19 +94,20 @@ // HoldingSpaceDownloadsDelegate::InProgressDownload --------------------------- -// A wrapper around an in-progress `crosapi::mojom::DownloadEvent` which -// notifies its associated `delegate_` of changes in download state. Each -// in-progress download is associated with a single in-progress holding space -// item once the target file path for the in-progress download has been set. -// NOTE: Instances of this class are immediately destroyed when the underlying -// download is no longer in-progress or when the associated in-progress holding -// space item is removed from the model. +// A wrapper around an in-progress `crosapi::mojom::DownloadItem` which notifies +// its associated `delegate_` of changes in download state. Each in-progress +// download is associated with a single in-progress holding space item once the +// target file path for the in-progress download has been set. NOTE: Instances +// of this class are immediately destroyed when the underlying download is no +// longer in-progress or when the associated in-progress holding space item is +// removed from the model. class HoldingSpaceDownloadsDelegate::InProgressDownload { public: InProgressDownload(HoldingSpaceDownloadsDelegate* delegate, - crosapi::mojom::DownloadEventPtr download_event) - : delegate_(delegate), download_event_(std::move(download_event)) { - DCHECK(IsInProgress(download_event_.get())); + crosapi::mojom::DownloadItemPtr mojo_download_item) + : delegate_(delegate), + mojo_download_item_(std::move(mojo_download_item)) { + DCHECK(IsInProgress(mojo_download_item_.get())); } InProgressDownload(const InProgressDownload&) = delete; @@ -128,23 +130,25 @@ virtual void OpenWhenComplete() = 0; // Returns the number of bytes received for the underlying download. - int64_t GetReceivedBytes() const { return download_event_->received_bytes; } + int64_t GetReceivedBytes() const { + return mojo_download_item_->received_bytes; + } // Returns the file path associated with the underlying download. // NOTE: The file path may be empty before a target file path has been picked. base::FilePath GetFilePath() const { - return download_event_->full_path.value_or(base::FilePath()); + return mojo_download_item_->full_path.value_or(base::FilePath()); } // Returns the target file path associated with the underlying download. // NOTE: Returned path may be empty before a target file path has been picked. const base::FilePath& GetTargetFilePath() const { - return download_event_->target_file_path; + return mojo_download_item_->target_file_path; } // Returns the current progress of the underlying download. HoldingSpaceProgress GetProgress() const { - if (IsComplete(download_event_.get())) + if (IsComplete(mojo_download_item_.get())) return HoldingSpaceProgress(); return HoldingSpaceProgress(GetReceivedBytes(), GetTotalBytes(), /*complete=*/false); @@ -153,12 +157,12 @@ // Returns the number of total bytes for the underlying download. // NOTE: The total number of bytes will be absent if unknown. absl::optional<int64_t> GetTotalBytes() const { - const int64_t total_bytes = download_event_->total_bytes; + const int64_t total_bytes = mojo_download_item_->total_bytes; return total_bytes >= 0 ? absl::make_optional(total_bytes) : absl::nullopt; } // Returns whether the underlying download is paused. - bool IsPaused() const { return download_event_->is_paused; } + bool IsPaused() const { return mojo_download_item_->is_paused; } // Associates this in-progress download with the specified in-progress // `holding_space_item`. NOTE: This association may be performed only once. @@ -187,7 +191,7 @@ return HoldingSpaceImage::CreateDefaultPlaceholderImageSkiaResolver() .Run(in_progress_download && IsInProgress( - in_progress_download->download_event_.get()) + in_progress_download->mojo_download_item_.get()) ? in_progress_download->GetTargetFilePath() : file_path, size, dark_background, is_folder); @@ -200,20 +204,20 @@ // Only in-progress download items override primary text. In other cases, // the primary text will fall back to the lossy display name of the backing // file and be automatically updated in response to file system changes. - if (!IsInProgress(download_event_.get())) + if (!IsInProgress(mojo_download_item_.get())) return absl::nullopt; - return download_event_->target_file_path.BaseName().LossyDisplayName(); + return mojo_download_item_->target_file_path.BaseName().LossyDisplayName(); } // Returns the secondary text to display for the underlying download. absl::optional<std::u16string> GetSecondaryText() const { // Only in-progress download items have secondary text. - if (!IsInProgress(download_event_.get())) + if (!IsInProgress(mojo_download_item_.get())) return absl::nullopt; // In-progress download items which are marked to be opened when complete // have a special secondary text treatment. - if (download_event_->open_when_complete) { + if (mojo_download_item_->open_when_complete) { return l10n_util::GetStringUTF16( IDS_ASH_HOLDING_SPACE_IN_PROGRESS_DOWNLOAD_OPEN_WHEN_COMPLETE); } @@ -238,7 +242,7 @@ secondary_text = ui::FormatBytes(received_bytes); } - if (download_event_->is_paused) { + if (mojo_download_item_->is_paused) { // If the `item` is paused, prepend "Paused, " to the `secondary_text` // such that the string is of the form "Paused, 10/100 MB" or "Paused, 10 // MB", depending on whether or not `total_bytes` is known. @@ -251,18 +255,19 @@ } protected: - // Updates the `download_event_` associated with this in-progress download, - // notifying `delegate_` of the change in state. Note that invoking this - // method may result in the destruction of `this`. - void UpdateDownloadEvent(crosapi::mojom::DownloadEventPtr download_event) { - download_event_ = std::move(download_event); + // Updates the `mojo_download_item_` associated with this in-progress + // download, notifying `delegate_` of the change in state. Note that invoking + // this method may result in the destruction of `this`. + void UpdateMojoDownloadItem( + crosapi::mojom::DownloadItemPtr mojo_download_item) { + mojo_download_item_ = std::move(mojo_download_item); - if (!download_event_) { + if (!mojo_download_item_) { delegate_->OnDownloadFailed(this); // NOTE: Destroys `this`. return; } - switch (download_event_->state) { + switch (mojo_download_item_->state) { case crosapi::mojom::DownloadState::kInProgress: delegate_->OnDownloadUpdated(this); break; @@ -281,7 +286,7 @@ private: HoldingSpaceDownloadsDelegate* const delegate_; // NOTE: Owns `this`. - crosapi::mojom::DownloadEventPtr download_event_; + crosapi::mojom::DownloadItemPtr mojo_download_item_; // The in-progress holding space item associated with this in-progress // download. NOTE: This may be `nullptr` until the target file path for the @@ -304,7 +309,7 @@ public: InProgressAshDownload(HoldingSpaceDownloadsDelegate* delegate, download::DownloadItem* download_item) - : InProgressDownload(delegate, ConvertToDownloadEvent(download_item)), + : InProgressDownload(delegate, ConvertToMojoDownloadItem(download_item)), download_item_(download_item) { download_item_observation_.Observe(download_item); } @@ -327,11 +332,11 @@ void OnDownloadUpdated(download::DownloadItem* download_item) override { // NOTE: This method invocation may result in destruction of `this`, // depending on the state of the underlying download. - UpdateDownloadEvent(ConvertToDownloadEvent(download_item)); + UpdateMojoDownloadItem(ConvertToMojoDownloadItem(download_item)); } void OnDownloadDestroyed(download::DownloadItem* download_item) override { - UpdateDownloadEvent(nullptr); // NOTE: Destroys `this`. + UpdateMojoDownloadItem(nullptr); // NOTE: Destroys `this`. } download::DownloadItem* const download_item_; @@ -524,15 +529,15 @@ // TODO(crbug.com/1184438): Support in-progress downloads. void HoldingSpaceDownloadsDelegate::OnLacrosDownloadUpdated( - const crosapi::mojom::DownloadEvent& event) { - if (event.is_from_incognito_profile && + const crosapi::mojom::DownloadItem& mojo_download_item) { + if (mojo_download_item.is_from_incognito_profile && !features::IsHoldingSpaceIncognitoProfileIntegrationEnabled()) { return; } - if (event.state == crosapi::mojom::DownloadState::kComplete) { + if (mojo_download_item.state == crosapi::mojom::DownloadState::kComplete) { service()->AddDownload(ash::HoldingSpaceItem::Type::kLacrosDownload, - event.target_file_path); + mojo_download_item.target_file_path); } }
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h index 638ace53..a4cf08f 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h +++ b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h
@@ -75,7 +75,7 @@ // crosapi::DownloadControllerAsh::DownloadControllerObserver: void OnLacrosDownloadUpdated( - const crosapi::mojom::DownloadEvent& event) override; + const crosapi::mojom::DownloadItem& download) override; // Invoked when the specified `in_progress_download` is updated. void OnDownloadUpdated(InProgressDownload* in_progress_download);
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc index 16cb82b..ef3d27f1 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc +++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc
@@ -805,9 +805,14 @@ } bool FromIncognitoProfile() const { return std::get<1>(GetParam()); } - bool IncognitoDownloadsEnabled() const { return std::get<2>(GetParam()); } + crosapi::DownloadControllerAsh* download_controller() { + return crosapi::CrosapiManager::Get() + ->crosapi_ash() + ->download_controller_ash(); + } + private: base::test::ScopedFeatureList scoped_feature_list; }; @@ -831,13 +836,10 @@ // Create a test downloaded file. auto file_path = CreateTextFile(GetTestMountPoint(), "foo.txt"); - // Create a corresponding `crosapi::mojom::DownloadEvent`. - crosapi::mojom::DownloadEventPtr dle = crosapi::mojom::DownloadEvent::New(); - dle->target_file_path = file_path; - dle->is_from_incognito_profile = FromIncognitoProfile(); - - auto* download_controller = - crosapi::CrosapiManager::Get()->crosapi_ash()->download_controller_ash(); + // Create a corresponding `crosapi::mojom::DownloadItem`. + auto download = crosapi::mojom::DownloadItem::New(); + download->target_file_path = file_path; + download->is_from_incognito_profile = FromIncognitoProfile(); // Only `crosapi::mojom::DownloadState::kComplete` events should currently do // anything. The rest should all be ignored. @@ -846,13 +848,13 @@ state <= static_cast<int>(DownloadState::kMaxValue); ++state) { if (state == static_cast<int>(crosapi::mojom::DownloadState::kComplete)) continue; - dle->state = static_cast<DownloadState>(state); - download_controller->OnDownloadUpdated(dle.Clone()); + download->state = static_cast<DownloadState>(state); + download_controller()->OnDownloadUpdated(download.Clone()); ASSERT_EQ(0u, model->items().size()); } - dle->state = crosapi::mojom::DownloadState::kComplete; - download_controller->OnDownloadUpdated(dle.Clone()); + download->state = crosapi::mojom::DownloadState::kComplete; + download_controller()->OnDownloadUpdated(download.Clone()); // Holding space should ignore a completed download from an incognito profile // if the feature flag is not enabled. if (FromIncognitoProfile() && !IncognitoDownloadsEnabled()) {
diff --git a/chrome/browser/ui/ash/shelf/app_service/app_service_shelf_context_menu.cc b/chrome/browser/ui/ash/shelf/app_service/app_service_shelf_context_menu.cc index 8e5f2fc..5b8e11a5 100644 --- a/chrome/browser/ui/ash/shelf/app_service/app_service_shelf_context_menu.cc +++ b/chrome/browser/ui/ash/shelf/app_service/app_service_shelf_context_menu.cc
@@ -325,7 +325,8 @@ return; } - if (app_type_ == apps::mojom::AppType::kWeb) { + if (app_type_ == apps::mojom::AppType::kWeb || + app_type_ == apps::mojom::AppType::kSystemWeb) { BuildAppShortcutsMenu(std::move(menu_items), std::move(menu_model), std::move(callback), shortcut_index); return;
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc index 65a44e2..1838ba3 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -52,7 +52,7 @@ #include "chrome/browser/ui/startup/startup_tab_provider.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/webui/welcome/helpers.h" -#include "chrome/browser/ui/webui/whats_new/whats_new_ui.h" +#include "chrome/browser/ui/webui/whats_new/whats_new_util.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_provider_factory.h" #include "chrome/common/chrome_switches.h" @@ -385,7 +385,7 @@ #endif // BUILDFLAG(IS_CHROMEOS_LACROS) const bool whats_new_enabled = - promotional_tabs_enabled && WhatsNewUI::ShouldShowForState(local_state); + promotional_tabs_enabled && whats_new::ShouldShowForState(local_state); StartupTabs tabs = DetermineStartupTabs( StartupTabProviderImpl(), cmd_line_tabs, process_startup, @@ -524,7 +524,7 @@ } else { // Record the current version so that What's New will not be shown until // after the next major version update. - WhatsNewUI::SetLastVersion(g_browser_process->local_state()); + whats_new::SetLastVersion(g_browser_process->local_state()); } }
diff --git a/chrome/browser/ui/startup/startup_tab_provider.cc b/chrome/browser/ui/startup/startup_tab_provider.cc index f632578..bc8310e 100644 --- a/chrome/browser/ui/startup/startup_tab_provider.cc +++ b/chrome/browser/ui/startup/startup_tab_provider.cc
@@ -252,7 +252,8 @@ bool whats_new_enabled) { StartupTabs tabs; if (whats_new_enabled) { - tabs.emplace_back(GURL(chrome::kChromeUIWhatsNewURL), false); + GURL url(chrome::kChromeUIWhatsNewURL); + tabs.emplace_back(net::AppendQueryParameter(url, "auto", "true"), false); } return tabs; }
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc index b620703b..3742073 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
@@ -45,9 +45,11 @@ #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" #include "chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.h" +#include "chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.h" #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" #include "chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.h" +#include "chrome/browser/ui/views/frame/immersive_mode_tester.h" #include "chrome/browser/ui/views/frame/tab_strip_region_view.h" #include "chrome/browser/ui/views/frame/webui_tab_strip_container_view.h" #include "chrome/browser/ui/views/fullscreen_control/fullscreen_control_host.h" @@ -109,179 +111,6 @@ #include "ui/views/window/caption_button_layout_constants.h" #include "ui/views/window/frame_caption_button.h" -namespace { - -// Toggles fullscreen mode and waits for the notification. -void ToggleFullscreenModeAndWait(Browser* browser) { - FullscreenNotificationObserver waiter(browser); - chrome::ToggleFullscreenMode(browser); - waiter.Wait(); -} - -// Enters fullscreen mode for tab and waits for the notification. -void EnterFullscreenModeForTabAndWait(Browser* browser, - content::WebContents* web_contents) { - FullscreenNotificationObserver waiter(browser); - static_cast<content::WebContentsDelegate*>(browser) - ->EnterFullscreenModeForTab(web_contents->GetMainFrame(), {}); - waiter.Wait(); -} - -// Exits fullscreen mode for tab and waits for the notification. -void ExitFullscreenModeForTabAndWait(Browser* browser, - content::WebContents* web_contents) { - FullscreenNotificationObserver waiter(browser); - browser->exclusive_access_manager() - ->fullscreen_controller() - ->ExitFullscreenModeForTab(web_contents); - waiter.Wait(); -} - -void StartOverview() { - ash::Shell::Get()->overview_controller()->StartOverview( - ash::OverviewStartAction::kTests); -} - -void EndOverview() { - ash::Shell::Get()->overview_controller()->EndOverview( - ash::OverviewEndAction::kTests); -} - -bool IsShelfVisible() { - return ash::ShelfTestApi().IsVisible(); -} - -BrowserNonClientFrameViewChromeOS* GetFrameViewAsh(BrowserView* browser_view) { - // We know we're using Ash, so static cast. - auto* frame_view = static_cast<BrowserNonClientFrameViewChromeOS*>( - browser_view->GetWidget()->non_client_view()->frame_view()); - DCHECK(frame_view); - return frame_view; -} - -// Template to be used as a base class for touch-optimized UI parameterized test -// fixtures. -template <class BaseTest> -class TopChromeMdParamTest : public BaseTest, - public ::testing::WithParamInterface<bool> { - public: - TopChromeMdParamTest() : touch_ui_scoper_(GetParam()) {} - ~TopChromeMdParamTest() override = default; - - private: - ui::TouchUiController::TouchUiScoperForTesting touch_ui_scoper_; -}; - -// Template used as a base class for touch-optimized UI test fixtures. -template <class BaseTest> -class TopChromeTouchTest : public BaseTest { - public: - TopChromeTouchTest() : touch_ui_scoper_(true) {} - ~TopChromeTouchTest() override = default; - - private: - ui::TouchUiController::TouchUiScoperForTesting touch_ui_scoper_; -}; - -// Template to be used when a test does not work with the webUI tabstrip. -template <bool kEnabled, class BaseTest> -class WebUiTabStripOverrideTest : public BaseTest { - public: - WebUiTabStripOverrideTest() { - if (kEnabled) - feature_override_.InitAndEnableFeature(features::kWebUITabStrip); - else - feature_override_.InitAndDisableFeature(features::kWebUITabStrip); - } - ~WebUiTabStripOverrideTest() override = default; - - private: - base::test::ScopedFeatureList feature_override_; -}; - -// A helper class for immersive mode tests. -class ImmersiveModeTester : public ImmersiveModeController::Observer { - public: - explicit ImmersiveModeTester(Browser* browser) : browser_(browser) { - scoped_observation_.Observe(GetBrowserView()->immersive_mode_controller()); - } - ~ImmersiveModeTester() override = default; - - BrowserView* GetBrowserView() { - return BrowserView::GetBrowserViewForBrowser(browser_); - } - - // Runs the given command, verifies that a reveal happens and the expected tab - // is active. - void RunCommand(int command, int expected_index) { - reveal_started_ = reveal_ended_ = false; - browser_->command_controller()->ExecuteCommand(command); - VerifyTabIndexAfterReveal(expected_index); - } - - // Verifies a reveal has happened and the expected tab is active. - void VerifyTabIndexAfterReveal(int expected_index) { - if (!reveal_ended_) { - reveal_loop_ = std::make_unique<base::RunLoop>(); - reveal_loop_->Run(); - } - EXPECT_TRUE(reveal_ended_); - EXPECT_EQ(expected_index, browser_->tab_strip_model()->active_index()); - } - - // Waits for the immersive fullscreen to end (or returns immediately if - // immersive fullscreen already ended). - void WaitForFullscreenToExit() { - if (GetBrowserView()->immersive_mode_controller()->IsEnabled()) { - fullscreen_loop_ = std::make_unique<base::RunLoop>(); - fullscreen_loop_->Run(); - } - ASSERT_FALSE(GetBrowserView()->immersive_mode_controller()->IsEnabled()); - } - - // ImmersiveModeController::Observer: - void OnImmersiveRevealStarted() override { - EXPECT_FALSE(reveal_started_); - EXPECT_FALSE(reveal_ended_); - reveal_started_ = true; - EXPECT_TRUE(GetBrowserView()->immersive_mode_controller()->IsRevealed()); - } - - void OnImmersiveRevealEnded() override { - EXPECT_TRUE(reveal_started_); - EXPECT_FALSE(reveal_ended_); - reveal_started_ = false; - reveal_ended_ = true; - EXPECT_FALSE(GetBrowserView()->immersive_mode_controller()->IsRevealed()); - if (reveal_loop_ && reveal_loop_->running()) - reveal_loop_->Quit(); - } - - void OnImmersiveModeControllerDestroyed() override { - DCHECK(scoped_observation_.IsObserving()); - scoped_observation_.Reset(); - } - - void OnImmersiveFullscreenExited() override { - if (fullscreen_loop_ && fullscreen_loop_->running()) - fullscreen_loop_->Quit(); - } - - private: - Browser* browser_ = nullptr; - base::ScopedObservation<ImmersiveModeController, - ImmersiveModeController::Observer> - scoped_observation_{this}; - bool reveal_started_ = false; - bool reveal_ended_ = false; - std::unique_ptr<base::RunLoop> reveal_loop_; - std::unique_ptr<base::RunLoop> fullscreen_loop_; - - DISALLOW_COPY_AND_ASSIGN(ImmersiveModeTester); -}; - -} // namespace - using views::Widget; using BrowserNonClientFrameViewChromeOSTest = @@ -301,7 +130,8 @@ NonClientHitTest) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); Widget* widget = browser_view->GetWidget(); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); // Click on the top edge of a restored window hits the top edge resize handle. const int kWindowWidth = 300; @@ -325,7 +155,8 @@ BrowserNonClientFrameViewChromeOSTouchTestWithWebUiTabStrip, TabletSplitViewNonClientHitTest) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); EXPECT_EQ(0, frame_view->GetBoundsForClientView().y()); Widget* widget = browser_view->GetWidget(); @@ -343,7 +174,8 @@ BrowserNonClientFrameViewChromeOSTouchTestWithWebUiTabStrip, TabletSplitViewSwipeDownFromEdgeOpensWebUiTabStrip) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); EXPECT_EQ(0, frame_view->GetBoundsForClientView().y()); Widget* widget = browser_view->GetWidget(); @@ -373,7 +205,8 @@ NonImmersiveFullscreen) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); content::WebContents* web_contents = browser_view->GetActiveWebContents(); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); // Frame paints by default. EXPECT_TRUE(frame_view->GetShouldPaint()); @@ -400,7 +233,8 @@ IN_PROC_BROWSER_TEST_P(BrowserNonClientFrameViewChromeOSTestNoWebUiTabStrip, AvatarDisplayOnTeleportedWindow) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); aura::Window* window = browser()->window()->GetNativeWindow(); EXPECT_FALSE(MultiUserWindowManagerHelper::ShouldShowAvatar(window)); @@ -437,10 +271,10 @@ BrowserView::GetBrowserViewForBrowser(browser()); StartOverview(); - EXPECT_EQ(0, GetFrameViewAsh(browser_view)->GetTopInset(false)); + EXPECT_EQ(0, GetFrameViewChromeOS(browser_view)->GetTopInset(false)); EndOverview(); - EXPECT_EQ(0, GetFrameViewAsh(browser_view)->GetTopInset(false)); + EXPECT_EQ(0, GetFrameViewChromeOS(browser_view)->GetTopInset(false)); } IN_PROC_BROWSER_TEST_P(BrowserNonClientFrameViewChromeOSTest, @@ -455,7 +289,8 @@ IN_PROC_BROWSER_TEST_P(BrowserNonClientFrameViewChromeOSTest, FrameMinSizeIsUpdated) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); BookmarkBarView* bookmark_bar = browser_view->GetBookmarkBarView(); EXPECT_FALSE(bookmark_bar->GetVisible()); @@ -575,7 +410,8 @@ ImmersiveFullscreen) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); content::WebContents* web_contents = browser_view->GetActiveWebContents(); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); ImmersiveModeController* immersive_mode_controller = browser_view->immersive_mode_controller(); @@ -954,7 +790,7 @@ browser_view_ = BrowserView::GetBrowserViewForBrowser(app_browser_); BrowserNonClientFrameViewChromeOS* frame_view = - GetFrameViewAsh(browser_view_); + GetFrameViewChromeOS(browser_view_); frame_header_ = static_cast<chromeos::DefaultFrameHeader*>( frame_view->frame_header_.get()); @@ -1082,7 +918,7 @@ // height of the caption buttons. IN_PROC_BROWSER_TEST_P(WebAppNonClientFrameViewAshTest, FrameSize) { SetUpWebApp(); - const int inset = GetFrameViewAsh(browser_view_)->GetTopInset(false); + const int inset = GetFrameViewChromeOS(browser_view_)->GetTopInset(false); EXPECT_EQ(inset, views::GetCaptionButtonLayoutSize( views::CaptionButtonLayoutSize::kNonBrowserCaption) .height()); @@ -1296,7 +1132,7 @@ ActiveStateOfButtonMatchesWidget) { SetUpWebApp(); chromeos::FrameCaptionButtonContainerView::TestApi test( - GetFrameViewAsh(browser_view_)->caption_button_container_); + GetFrameViewChromeOS(browser_view_)->caption_button_container_); EXPECT_TRUE(test.size_button()->GetPaintAsActive()); EXPECT_TRUE(GetPaintingAsActive()); @@ -1321,7 +1157,8 @@ Browser* popup_browser = BrowserList::GetInstance()->GetLastActive(); BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(popup_browser); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); EXPECT_FALSE(frame_view->web_app_frame_toolbar_for_testing()); } @@ -1360,7 +1197,8 @@ BrowserHeaderVisibilityInTabletModeTest) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); Widget* widget = browser_view->GetWidget(); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); widget->GetNativeWindow()->SetProperty( aura::client::kResizeBehaviorKey, @@ -1399,7 +1237,7 @@ BrowserView* browser_view2 = BrowserView::GetBrowserViewForBrowser(browser2); Widget* widget2 = browser_view2->GetWidget(); BrowserNonClientFrameViewChromeOS* frame_view2 = - GetFrameViewAsh(browser_view2); + GetFrameViewChromeOS(browser_view2); widget2->GetNativeWindow()->SetProperty( aura::client::kResizeBehaviorKey, aura::client::kResizeBehaviorCanMaximize | @@ -1513,7 +1351,8 @@ IN_PROC_BROWSER_TEST_P(HomeLauncherBrowserNonClientFrameViewChromeOSTest, TabletModeBrowserCaptionButtonVisibility) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); EXPECT_TRUE(frame_view->caption_button_container_->GetVisible()); ASSERT_NO_FATAL_FAILURE( @@ -1539,8 +1378,8 @@ CaptionButtonVisibilityForBrowserLaunchedInTabletMode) { ASSERT_NO_FATAL_FAILURE( ash::ShellTestApi().SetTabletModeEnabledForTest(true)); - EXPECT_FALSE(GetFrameViewAsh(BrowserView::GetBrowserViewForBrowser( - CreateBrowser(browser()->profile()))) + EXPECT_FALSE(GetFrameViewChromeOS(BrowserView::GetBrowserViewForBrowser( + CreateBrowser(browser()->profile()))) ->caption_button_container_->GetVisible()); } @@ -1558,7 +1397,8 @@ browser->window()->Show(); BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); EXPECT_TRUE(frame_view->caption_button_container_->GetVisible()); // Tablet mode doesn't affect app's caption button's visibility. @@ -1604,7 +1444,8 @@ IN_PROC_BROWSER_TEST_P(TabSearchFrameCaptionButtonTest, TabSearchBubbleHostTest) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); - BrowserNonClientFrameViewChromeOS* frame_view = GetFrameViewAsh(browser_view); + BrowserNonClientFrameViewChromeOS* frame_view = + GetFrameViewChromeOS(browser_view); ASSERT_TRUE(browser()->is_type_normal()); chromeos::FrameCaptionButtonContainerView::TestApi test(
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.cc new file mode 100644 index 0000000..dec3173 --- /dev/null +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.cc
@@ -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. + +#include "chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.h" + +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_commands.h" +#include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" +#include "chrome/browser/ui/exclusive_access/exclusive_access_test.h" +#include "chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.h" +#include "chrome/browser/ui/views/frame/browser_view.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_contents_delegate.h" +#include "third_party/blink/public/mojom/frame/fullscreen.mojom.h" +#include "ui/views/widget/widget.h" +#include "ui/views/window/non_client_view.h" + +#if BUILDFLAG(IS_CHROMEOS_ASH) +#include "ash/public/cpp/shelf_test_api.h" +#include "ash/shell.h" +#include "ash/wm/overview/overview_controller.h" +#endif // BUILDFLAG(IS_CHROMEOS_ASH) + +// Toggles fullscreen mode and waits for the notification. +void ToggleFullscreenModeAndWait(Browser* browser) { + FullscreenNotificationObserver waiter(browser); + chrome::ToggleFullscreenMode(browser); + waiter.Wait(); +} + +// Enters fullscreen mode for tab and waits for the notification. +void EnterFullscreenModeForTabAndWait(Browser* browser, + content::WebContents* web_contents) { + FullscreenNotificationObserver waiter(browser); + static_cast<content::WebContentsDelegate*>(browser) + ->EnterFullscreenModeForTab(web_contents->GetMainFrame(), {}); + waiter.Wait(); +} + +// Exits fullscreen mode for tab and waits for the notification. +void ExitFullscreenModeForTabAndWait(Browser* browser, + content::WebContents* web_contents) { + FullscreenNotificationObserver waiter(browser); + browser->exclusive_access_manager() + ->fullscreen_controller() + ->ExitFullscreenModeForTab(web_contents); + waiter.Wait(); +} + +BrowserNonClientFrameViewChromeOS* GetFrameViewChromeOS( + BrowserView* browser_view) { + // We know we're using ChromeOS, so static cast. + auto* frame_view = static_cast<BrowserNonClientFrameViewChromeOS*>( + browser_view->GetWidget()->non_client_view()->frame_view()); + DCHECK(frame_view); + return frame_view; +} + +#if BUILDFLAG(IS_CHROMEOS_ASH) +void StartOverview() { + ash::Shell::Get()->overview_controller()->StartOverview( + ash::OverviewStartAction::kTests); +} + +void EndOverview() { + ash::Shell::Get()->overview_controller()->EndOverview( + ash::OverviewEndAction::kTests); +} + +bool IsShelfVisible() { + return ash::ShelfTestApi().IsVisible(); +} +#endif // BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.h b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.h new file mode 100644 index 0000000..40d27938 --- /dev/null +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.h
@@ -0,0 +1,44 @@ +// 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_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_CHROMEOS_TEST_UTILS_H_ +#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_CHROMEOS_TEST_UTILS_H_ + +#include "build/chromeos_buildflags.h" + +class Browser; +class BrowserView; +class BrowserNonClientFrameViewChromeOS; + +namespace content { +class WebContents; +} + +// Toggles fullscreen mode and waits for the notification. +void ToggleFullscreenModeAndWait(Browser* browser); + +// Enters fullscreen mode for tab and waits for the notification. +void EnterFullscreenModeForTabAndWait(Browser* browser, + content::WebContents* web_contents); + +// Exits fullscreen mode for tab and waits for the notification. +void ExitFullscreenModeForTabAndWait(Browser* browser, + content::WebContents* web_contents); + +// Returns the non client frame view for |browser_view|. +BrowserNonClientFrameViewChromeOS* GetFrameViewChromeOS( + BrowserView* browser_view); + +#if BUILDFLAG(IS_CHROMEOS_ASH) +// Starts overview session which displays an overview of all windows. +void StartOverview(); + +// Ends overview session. +void EndOverview(); + +// Returns true if the shelf is visible (e.g. not auto-hidden). +bool IsShelfVisible(); +#endif // BUILDFLAG(IS_CHROMEOS_ASH) + +#endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_CHROMEOS_TEST_UTILS_H_
diff --git a/chrome/browser/ui/views/frame/immersive_mode_tester.cc b/chrome/browser/ui/views/frame/immersive_mode_tester.cc new file mode 100644 index 0000000..a16f21e --- /dev/null +++ b/chrome/browser/ui/views/frame/immersive_mode_tester.cc
@@ -0,0 +1,70 @@ +// 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/views/frame/immersive_mode_tester.h" + +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_command_controller.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/views/frame/browser_view.h" + +ImmersiveModeTester::ImmersiveModeTester(Browser* browser) : browser_(browser) { + scoped_observation_.Observe(GetBrowserView()->immersive_mode_controller()); +} + +ImmersiveModeTester::~ImmersiveModeTester() = default; + +BrowserView* ImmersiveModeTester::GetBrowserView() { + return BrowserView::GetBrowserViewForBrowser(browser_); +} + +void ImmersiveModeTester::RunCommand(int command, int expected_index) { + reveal_started_ = reveal_ended_ = false; + browser_->command_controller()->ExecuteCommand(command); + VerifyTabIndexAfterReveal(expected_index); +} + +void ImmersiveModeTester::VerifyTabIndexAfterReveal(int expected_index) { + if (!reveal_ended_) { + reveal_loop_ = std::make_unique<base::RunLoop>(); + reveal_loop_->Run(); + } + EXPECT_TRUE(reveal_ended_); + EXPECT_EQ(expected_index, browser_->tab_strip_model()->active_index()); +} + +void ImmersiveModeTester::WaitForFullscreenToExit() { + if (GetBrowserView()->immersive_mode_controller()->IsEnabled()) { + fullscreen_loop_ = std::make_unique<base::RunLoop>(); + fullscreen_loop_->Run(); + } + ASSERT_FALSE(GetBrowserView()->immersive_mode_controller()->IsEnabled()); +} + +void ImmersiveModeTester::OnImmersiveRevealStarted() { + EXPECT_FALSE(reveal_started_); + EXPECT_FALSE(reveal_ended_); + reveal_started_ = true; + EXPECT_TRUE(GetBrowserView()->immersive_mode_controller()->IsRevealed()); +} + +void ImmersiveModeTester::OnImmersiveRevealEnded() { + EXPECT_TRUE(reveal_started_); + EXPECT_FALSE(reveal_ended_); + reveal_started_ = false; + reveal_ended_ = true; + EXPECT_FALSE(GetBrowserView()->immersive_mode_controller()->IsRevealed()); + if (reveal_loop_ && reveal_loop_->running()) + reveal_loop_->Quit(); +} + +void ImmersiveModeTester::OnImmersiveModeControllerDestroyed() { + DCHECK(scoped_observation_.IsObserving()); + scoped_observation_.Reset(); +} + +void ImmersiveModeTester::OnImmersiveFullscreenExited() { + if (fullscreen_loop_ && fullscreen_loop_->running()) + fullscreen_loop_->Quit(); +}
diff --git a/chrome/browser/ui/views/frame/immersive_mode_tester.h b/chrome/browser/ui/views/frame/immersive_mode_tester.h new file mode 100644 index 0000000..e6c52ede --- /dev/null +++ b/chrome/browser/ui/views/frame/immersive_mode_tester.h
@@ -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. + +#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_TESTER_H_ +#define CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_TESTER_H_ + +#include <memory> + +#include "base/run_loop.h" +#include "base/scoped_observation.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/ui/ui_features.h" +#include "chrome/browser/ui/views/frame/immersive_mode_controller.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/base/pointer/touch_ui_controller.h" + +class BrowserView; +class Browser; + +// Template to be used as a base class for touch-optimized UI parameterized test +// fixtures. +template <class BaseTest> +class TopChromeMdParamTest : public BaseTest, + public ::testing::WithParamInterface<bool> { + public: + TopChromeMdParamTest() : touch_ui_scoper_(GetParam()) {} + ~TopChromeMdParamTest() override = default; + + private: + ui::TouchUiController::TouchUiScoperForTesting touch_ui_scoper_; +}; + +// Template used as a base class for touch-optimized UI test fixtures. +template <class BaseTest> +class TopChromeTouchTest : public BaseTest { + public: + TopChromeTouchTest() : touch_ui_scoper_(true) {} + ~TopChromeTouchTest() override = default; + + private: + ui::TouchUiController::TouchUiScoperForTesting touch_ui_scoper_; +}; + +// Template to be used when a test does not work with the webUI tabstrip. +template <bool kEnabled, class BaseTest> +class WebUiTabStripOverrideTest : public BaseTest { + public: + WebUiTabStripOverrideTest() { + if (kEnabled) + feature_override_.InitAndEnableFeature(features::kWebUITabStrip); + else + feature_override_.InitAndDisableFeature(features::kWebUITabStrip); + } + ~WebUiTabStripOverrideTest() override = default; + + private: + base::test::ScopedFeatureList feature_override_; +}; + +// A helper class for immersive mode tests. +class ImmersiveModeTester : public ImmersiveModeController::Observer { + public: + explicit ImmersiveModeTester(Browser* browser); + ImmersiveModeTester(const ImmersiveModeTester&) = delete; + ImmersiveModeTester& operator=(const ImmersiveModeTester&) = delete; + ~ImmersiveModeTester() override; + + BrowserView* GetBrowserView(); + + // Runs the given command, verifies that a reveal happens and the expected tab + // is active. + void RunCommand(int command, int expected_index); + + // Verifies a reveal has happened and the expected tab is active. + void VerifyTabIndexAfterReveal(int expected_index); + + // Waits for the immersive fullscreen to end (or returns immediately if + // immersive fullscreen already ended). + void WaitForFullscreenToExit(); + + // ImmersiveModeController::Observer: + void OnImmersiveRevealStarted() override; + void OnImmersiveRevealEnded() override; + void OnImmersiveModeControllerDestroyed() override; + void OnImmersiveFullscreenExited() override; + + private: + Browser* const browser_; + base::ScopedObservation<ImmersiveModeController, + ImmersiveModeController::Observer> + scoped_observation_{this}; + bool reveal_started_ = false; + bool reveal_ended_ = false; + std::unique_ptr<base::RunLoop> reveal_loop_; + std::unique_ptr<base::RunLoop> fullscreen_loop_; +}; + +#endif // CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_TESTER_H_
diff --git a/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.cc b/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.cc index be0ce19..2d27f37 100644 --- a/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.cc +++ b/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.cc
@@ -8,6 +8,7 @@ #include "chrome/browser/sharing_hub/sharing_hub_model.h" #include "chrome/browser/ui/views/hover_button.h" #include "chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.h" +#include "chrome/grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/metadata/metadata_impl_macros.h" #include "ui/base/models/image_model.h" @@ -58,6 +59,10 @@ action_is_first_party_(action_info.is_first_party), action_name_for_metrics_(action_info.feature_name_for_metrics) { SetEnabled(true); + if (!action_is_first_party_) { + SetAccessibleName(l10n_util::GetStringFUTF16( + IDS_SHARING_HUB_SHARE_LABEL_ACCESSIBILITY, action_info.title)); + } } SharingHubBubbleActionButton::~SharingHubBubbleActionButton() = default;
diff --git a/chrome/browser/ui/views/user_education/feature_promo_bubble_timeout.cc b/chrome/browser/ui/views/user_education/feature_promo_bubble_timeout.cc index 6863af1..d4cb775d 100644 --- a/chrome/browser/ui/views/user_education/feature_promo_bubble_timeout.cc +++ b/chrome/browser/ui/views/user_education/feature_promo_bubble_timeout.cc
@@ -6,13 +6,18 @@ #include <memory> +#include "base/bind.h" #include "chrome/browser/ui/views/user_education/feature_promo_bubble_view.h" +#include "third_party/abseil-cpp/absl/types/optional.h" FeaturePromoBubbleTimeout::FeaturePromoBubbleTimeout( base::TimeDelta delay_no_interaction, - base::TimeDelta delay_after_interaction) + base::TimeDelta delay_after_interaction, + base::RepeatingClosure timeout_callback) : delay_no_interaction_(delay_no_interaction), - delay_after_interaction_(delay_after_interaction) {} + delay_after_interaction_(delay_after_interaction), + timeout_callback_(timeout_callback) {} +FeaturePromoBubbleTimeout::~FeaturePromoBubbleTimeout() = default; void FeaturePromoBubbleTimeout::OnBubbleShown( FeaturePromoBubbleView* feature_promo_bubble_view) { @@ -38,6 +43,12 @@ void FeaturePromoBubbleTimeout::StartAutoCloseTimer( base::TimeDelta auto_close_duration) { - timer_.Start(FROM_HERE, auto_close_duration, feature_promo_bubble_view_, - &FeaturePromoBubbleView::CloseBubble); + timer_.Start(FROM_HERE, auto_close_duration, this, + &FeaturePromoBubbleTimeout::OnTimeout); +} + +void FeaturePromoBubbleTimeout::OnTimeout() { + if (timeout_callback_) + timeout_callback_.Run(); + feature_promo_bubble_view_->CloseBubble(); }
diff --git a/chrome/browser/ui/views/user_education/feature_promo_bubble_timeout.h b/chrome/browser/ui/views/user_education/feature_promo_bubble_timeout.h index 57686c3..2780206 100644 --- a/chrome/browser/ui/views/user_education/feature_promo_bubble_timeout.h +++ b/chrome/browser/ui/views/user_education/feature_promo_bubble_timeout.h
@@ -5,8 +5,10 @@ #ifndef CHROME_BROWSER_UI_VIEWS_USER_EDUCATION_FEATURE_PROMO_BUBBLE_TIMEOUT_H_ #define CHROME_BROWSER_UI_VIEWS_USER_EDUCATION_FEATURE_PROMO_BUBBLE_TIMEOUT_H_ +#include "base/bind.h" #include "base/macros.h" #include "base/timer/timer.h" +#include "third_party/abseil-cpp/absl/types/optional.h" class FeaturePromoBubbleView; @@ -15,15 +17,21 @@ class FeaturePromoBubbleTimeout { public: FeaturePromoBubbleTimeout(base::TimeDelta delay_no_interaction, - base::TimeDelta delay_after_interaction); + base::TimeDelta delay_after_interaction, + base::RepeatingClosure timeout_callback); + ~FeaturePromoBubbleTimeout(); void OnBubbleShown(FeaturePromoBubbleView* feature_promo_bubble_view); void OnMouseEntered(); void OnMouseExited(); + // Initiates callback on timeout of the timer and closes the bubble. + void OnTimeout(); + private: // Starts a timer to close the promo bubble. void StartAutoCloseTimer(base::TimeDelta auto_close_duration); + // Timer used to auto close the bubble. base::OneShotTimer timer_; @@ -32,6 +40,8 @@ const base::TimeDelta delay_no_interaction_; const base::TimeDelta delay_after_interaction_; + base::RepeatingClosure timeout_callback_; + DISALLOW_COPY_AND_ASSIGN(FeaturePromoBubbleTimeout); };
diff --git a/chrome/browser/ui/views/user_education/feature_promo_bubble_view.cc b/chrome/browser/ui/views/user_education/feature_promo_bubble_view.cc index 6b3aa17..314e9d9 100644 --- a/chrome/browser/ui/views/user_education/feature_promo_bubble_view.cc +++ b/chrome/browser/ui/views/user_education/feature_promo_bubble_view.cc
@@ -195,7 +195,8 @@ params.timeout_no_interaction ? *params.timeout_no_interaction : kDelayDefault, params.timeout_after_interaction ? *params.timeout_after_interaction - : kDelayShort); + : kDelayShort, + params.timeout_callback); } const std::u16string body_text = std::move(params.body_text); @@ -368,6 +369,10 @@ return new FeaturePromoBubbleView(std::move(params)); } +FeaturePromoBubbleTimeout* FeaturePromoBubbleView::GetTimeoutForTesting() { + return feature_promo_bubble_timeout_.get(); +} + void FeaturePromoBubbleView::CloseBubble() { GetWidget()->Close(); }
diff --git a/chrome/browser/ui/views/user_education/feature_promo_bubble_view.h b/chrome/browser/ui/views/user_education/feature_promo_bubble_view.h index f07cc9db..fd0c952 100644 --- a/chrome/browser/ui/views/user_education/feature_promo_bubble_view.h +++ b/chrome/browser/ui/views/user_education/feature_promo_bubble_view.h
@@ -74,9 +74,12 @@ absl::optional<int> tutorial_progress_current; absl::optional<int> tutorial_progress_max; - // Changes the bubble timeout. Intended for tests, avoid use. + // Changes the bubble timeout. absl::optional<base::TimeDelta> timeout_no_interaction; absl::optional<base::TimeDelta> timeout_after_interaction; + + // Used to call feature specific logic on timeout. + base::RepeatingClosure timeout_callback; }; // NOTE: Please read comment above class. This method shouldn't be @@ -91,6 +94,8 @@ views::Button* GetButtonForTesting(int index) const; + FeaturePromoBubbleTimeout* GetTimeoutForTesting(); + private: explicit FeaturePromoBubbleView(CreateParams params);
diff --git a/chrome/browser/ui/views/user_education/feature_promo_bubble_view_interactive_uitest.cc b/chrome/browser/ui/views/user_education/feature_promo_bubble_view_interactive_uitest.cc index cfb9e241..3940808 100644 --- a/chrome/browser/ui/views/user_education/feature_promo_bubble_view_interactive_uitest.cc +++ b/chrome/browser/ui/views/user_education/feature_promo_bubble_view_interactive_uitest.cc
@@ -11,6 +11,7 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/interactive_test_utils.h" #include "content/public/test/browser_test.h" +#include "ui/events/base_event_utils.h" #include "ui/views/focus/focus_manager.h" #include "ui/views/test/widget_test.h" @@ -69,3 +70,38 @@ // Browser view should lose activation. EXPECT_FALSE(browser_view->GetWidget()->IsActive()); } + +namespace { +struct MockTimeoutTarget { + int count = 0; + + void OnTimeout() { count++; } +}; +} // namespace + +IN_PROC_BROWSER_TEST_F(FeaturePromoBubbleViewInteractiveTest, + FeaturePromoBubbleTimeout) { + auto params = GetBubbleParams(); + + base::TimeDelta interaction_time = base::TimeDelta::FromMilliseconds(1); + params.timeout_no_interaction = interaction_time; + params.timeout_after_interaction = interaction_time; + + MockTimeoutTarget timeout_target; + params.timeout_callback = base::BindRepeating( + &MockTimeoutTarget::OnTimeout, base::Unretained(&timeout_target)); + + auto* const bubble = FeaturePromoBubbleView::Create(std::move(params)); + views::test::WidgetVisibleWaiter(bubble->GetWidget()).Wait(); + + // Check that the timeout exists in the bubble. + FeaturePromoBubbleTimeout* timeout = bubble->GetTimeoutForTesting(); + EXPECT_NE(nullptr, timeout); + EXPECT_EQ(0, timeout_target.count); + + // Force the timeout codepath to be called + timeout->OnTimeout(); + + // Check that the timeout has occurred + EXPECT_EQ(1, timeout_target.count); +}
diff --git a/chrome/browser/ui/views/user_education/feature_promo_controller_views.cc b/chrome/browser/ui/views/user_education/feature_promo_controller_views.cc index b29ef020..5e7e3d60 100644 --- a/chrome/browser/ui/views/user_education/feature_promo_controller_views.cc +++ b/chrome/browser/ui/views/user_education/feature_promo_controller_views.cc
@@ -331,6 +331,11 @@ weak_ptr_factory_.GetWeakPtr(), *current_iph_feature_); create_params.buttons.push_back(std::move(dismiss_button)); + // Snooze should dismiss the feature promo if it times out. + create_params.timeout_callback = base::BindRepeating( + &FeaturePromoControllerViews::OnUserDismiss, + weak_ptr_factory_.GetWeakPtr(), *current_iph_feature_); + if (views::PlatformStyle::kIsOkButtonLeading) std::swap(create_params.buttons[0], create_params.buttons[1]); }
diff --git a/chrome/browser/ui/webui/read_later/side_panel/bookmarks_page_handler.cc b/chrome/browser/ui/webui/read_later/side_panel/bookmarks_page_handler.cc index 6454b61..ed5e7ca7 100644 --- a/chrome/browser/ui/webui/read_later/side_panel/bookmarks_page_handler.cc +++ b/chrome/browser/ui/webui/read_later/side_panel/bookmarks_page_handler.cc
@@ -63,6 +63,10 @@ AddItem(IDC_BOOKMARK_BAR_REMOVE); AddSeparator(ui::NORMAL_SEPARATOR); + AddItem(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK); + AddItem(IDC_BOOKMARK_BAR_NEW_FOLDER); + AddSeparator(ui::NORMAL_SEPARATOR); + AddItem(IDC_BOOKMARK_MANAGER); } ~BookmarkContextMenu() override = default;
diff --git a/chrome/browser/ui/webui/tab_search/tab_search.mojom b/chrome/browser/ui/webui/tab_search/tab_search.mojom index 5e901da..f0cd6ac8 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search.mojom +++ b/chrome/browser/ui/webui/tab_search/tab_search.mojom
@@ -9,12 +9,13 @@ import "mojo/public/mojom/base/token.mojom"; import "url/mojom/url.mojom"; -// Collection of window details associated with a profile. +// Collection of tab searching details associated with a profile. struct ProfileData { array<Window> windows; array<TabGroup> tab_groups; array<RecentlyClosedTab> recently_closed_tabs; array<RecentlyClosedTabGroup> recently_closed_tab_groups; + bool recently_closed_section_expanded; }; // Properties and tabs associated with a window. @@ -163,6 +164,10 @@ // Open a recently closed tab or tab group. OpenRecentlyClosedEntry(int32 session_id); + // Save a user's preference for the state of the expandable 'Recently Closed' + // list section. + SaveRecentlyClosedExpandedPref(bool expanded); + // Notify the backend that the UI is ready to be shown. ShowUI(); };
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc index 3896533..ebcf759 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc
@@ -30,6 +30,7 @@ #include "chrome/browser/ui/tabs/tab_renderer_data.h" #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" #include "chrome/browser/ui/ui_features.h" +#include "chrome/browser/ui/webui/tab_search/tab_search_prefs.h" #include "chrome/browser/ui/webui/util/image_util.h" #include "chrome/common/webui_url_constants.h" #include "ui/base/l10n/time_format.h" @@ -188,6 +189,11 @@ WindowOpenDisposition::NEW_FOREGROUND_TAB); } +void TabSearchPageHandler::SaveRecentlyClosedExpandedPref(bool expanded) { + Profile::FromWebUI(web_ui_)->GetPrefs()->SetBoolean( + tab_search_prefs::kTabSearchRecentlyClosedSectionExpanded, expanded); +} + void TabSearchPageHandler::ShowUI() { auto embedder = webui_controller_->embedder(); if (embedder) @@ -245,6 +251,10 @@ tab_group_ids, profile_data->tab_groups, tab_dedup_keys); DCHECK(features::kTabSearchRecentlyClosedTabCountThreshold.Get() >= 0); + + profile_data->recently_closed_section_expanded = + Profile::FromWebUI(web_ui_)->GetPrefs()->GetBoolean( + tab_search_prefs::kTabSearchRecentlyClosedSectionExpanded); return profile_data; }
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h index 1ec80987..c9994b45 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h
@@ -50,6 +50,7 @@ void SwitchToTab( tab_search::mojom::SwitchToTabInfoPtr switch_to_tab_info) override; void OpenRecentlyClosedEntry(int32_t session_id) override; + void SaveRecentlyClosedExpandedPref(bool expanded) override; void ShowUI() override; // TabStripModelObserver:
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc b/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc index 7d0baf8..522904f 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc
@@ -742,4 +742,40 @@ handler()->GetProfileData(std::move(callback1)); } +TEST_F(TabSearchPageHandlerTest, RecentlyClosedSectionExpandedUserPref) { + TabRestoreServiceFactory::GetInstance()->SetTestingFactory( + profile(), + base::BindRepeating(&TabSearchPageHandlerTest::GetTabRestoreService)); + + AddTabWithTitle(browser1(), GURL(kTabUrl1), kTabName1); + AddTabWithTitle(browser1(), GURL(kTabUrl2), kTabName2); + + int tab_id = extensions::ExtensionTabUtil::GetTabId( + browser1()->tab_strip_model()->GetWebContentsAt(0)); + handler()->CloseTab(tab_id); + + EXPECT_CALL(page_, TabsRemoved(_)).Times(2); + EXPECT_CALL(page_, TabUpdated(_)).Times(1); + + tab_search::mojom::PageHandler::GetProfileDataCallback callback1 = + base::BindLambdaForTesting( + [&](tab_search::mojom::ProfileDataPtr profile_tabs) { + auto& tabs = profile_tabs->windows[0]->tabs; + ASSERT_EQ(1u, tabs.size()); + ExpectNewTab(tabs[0].get(), kTabUrl1, kTabName1, 0); + auto& recently_closed_tabs = profile_tabs->recently_closed_tabs; + ASSERT_EQ(1u, recently_closed_tabs.size()); + ASSERT_TRUE(profile_tabs->recently_closed_section_expanded); + }); + handler()->GetProfileData(std::move(callback1)); + + handler()->SaveRecentlyClosedExpandedPref(false); + tab_search::mojom::PageHandler::GetProfileDataCallback callback2 = + base::BindLambdaForTesting( + [&](tab_search::mojom::ProfileDataPtr profile_tabs) { + ASSERT_FALSE(profile_tabs->recently_closed_section_expanded); + }); + handler()->GetProfileData(std::move(callback2)); +} + } // namespace
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_prefs.cc b/chrome/browser/ui/webui/tab_search/tab_search_prefs.cc new file mode 100644 index 0000000..3b38561 --- /dev/null +++ b/chrome/browser/ui/webui/tab_search/tab_search_prefs.cc
@@ -0,0 +1,20 @@ +// 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/tab_search/tab_search_prefs.h" +#include "components/pref_registry/pref_registry_syncable.h" +#include "components/prefs/pref_registry_simple.h" + +namespace tab_search_prefs { + +// Boolean pref indicating whether the Tab Search recently closed section is in +// an expanded state. +const char kTabSearchRecentlyClosedSectionExpanded[] = + "tab_search.recently_closed_expanded"; + +void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { + registry->RegisterBooleanPref(kTabSearchRecentlyClosedSectionExpanded, true); +} + +} // namespace tab_search_prefs
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_prefs.h b/chrome/browser/ui/webui/tab_search/tab_search_prefs.h new file mode 100644 index 0000000..f10e60b --- /dev/null +++ b/chrome/browser/ui/webui/tab_search/tab_search_prefs.h
@@ -0,0 +1,22 @@ +// 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_TAB_SEARCH_TAB_SEARCH_PREFS_H_ +#define CHROME_BROWSER_UI_WEBUI_TAB_SEARCH_TAB_SEARCH_PREFS_H_ + +namespace user_prefs { + +class PrefRegistrySyncable; + +} // namespace user_prefs + +namespace tab_search_prefs { + +extern const char kTabSearchRecentlyClosedSectionExpanded[]; + +void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); + +} // namespace tab_search_prefs + +#endif // CHROME_BROWSER_UI_WEBUI_TAB_SEARCH_TAB_SEARCH_PREFS_H_
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_ui.cc b/chrome/browser/ui/webui/tab_search/tab_search_ui.cc index 90422806..0bc5e549 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_ui.cc +++ b/chrome/browser/ui/webui/tab_search/tab_search_ui.cc
@@ -51,6 +51,8 @@ {"oneTab", IDS_TAB_SEARCH_ONE_TAB}, {"tabCount", IDS_TAB_SEARCH_TAB_COUNT}, {"recentlyClosed", IDS_TAB_SEARCH_RECENTLY_CLOSED}, + {"recentlyClosedExpandA11yLabel", + IDS_TAB_SEARCH_EXPAND_RECENTLY_CLOSED_ENTRIES}, }; source->AddLocalizedStrings(kStrings); source->AddBoolean("useRipples", views::PlatformStyle::kUseRipples);
diff --git a/chrome/browser/ui/webui/whats_new/whats_new_handler.cc b/chrome/browser/ui/webui/whats_new/whats_new_handler.cc new file mode 100644 index 0000000..978671ad --- /dev/null +++ b/chrome/browser/ui/webui/whats_new/whats_new_handler.cc
@@ -0,0 +1,141 @@ +// 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/whats_new/whats_new_handler.h" + +#include "base/bind.h" +#include "base/values.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_finder.h" +#include "chrome/browser/ui/webui/whats_new/whats_new_util.h" +#include "chrome/common/chrome_version.h" +#include "chrome/common/pref_names.h" +#include "chrome/common/webui_url_constants.h" +#include "components/bookmarks/common/bookmark_pref_names.h" +#include "components/prefs/pref_change_registrar.h" +#include "components/prefs/pref_service.h" +#include "content/public/browser/storage_partition.h" +#include "services/network/public/cpp/resource_request.h" +#include "services/network/public/cpp/simple_url_loader.h" +#include "services/network/public/mojom/url_response_head.mojom.h" +#include "url/gurl.h" + +const int64_t kMaxDownloadBytes = 1024 * 1024; + +WhatsNewHandler::WhatsNewHandler() = default; + +WhatsNewHandler::~WhatsNewHandler() = default; + +void WhatsNewHandler::RegisterMessages() { + web_ui()->RegisterMessageCallback( + "initialize", base::BindRepeating(&WhatsNewHandler::HandleInitialize, + base::Unretained(this))); +} + +void WhatsNewHandler::OnJavascriptAllowed() {} + +void WhatsNewHandler::OnJavascriptDisallowed() { + weak_ptr_factory_.InvalidateWeakPtrs(); +} + +void WhatsNewHandler::HandleInitialize(const base::ListValue* args) { + CHECK_EQ(2U, args->GetSize()); + std::string callback_id; + CHECK(args->GetString(0, &callback_id)); + bool is_auto; + CHECK(args->GetBoolean(1, &is_auto)); + + AllowJavascript(); + if (whats_new::g_force_enable_for_tests) { + // Just resolve with failure. This shows the error page which is all local + // content, so that we don't trigger potentially flaky network requests in + // tests. + ResolveJavascriptCallback(base::Value(callback_id), base::Value()); + return; + } + + Fetch(GURL(whats_new::kChromeWhatsNewURL), + base::BindOnce(&WhatsNewHandler::OnFetchResult, + weak_ptr_factory_.GetWeakPtr(), callback_id, is_auto)); +} + +void WhatsNewHandler::Fetch(const GURL& url, OnFetchResultCallback on_result) { + auto traffic_annotation = + net::DefineNetworkTrafficAnnotation("whats_new_handler", R"( + semantics { + sender: "What's New Page" + description: "Attempts to fetch the content for the What's New page " + "to ensure it loads successfully." + trigger: + "Restarting Chrome after an update. Desktop only." + data: + "No data sent, other than URL of What's New. " + "Data does not contain PII." + destination: GOOGLE_OWNED_SERVICE + } + policy { + cookies_allowed: NO + setting: + "None" + chrome_policy { + PromotionalTabsEnabled { + PromotionalTabsEnabled: false + } + } + })"); + Profile* profile = Profile::FromWebUI(web_ui()); + auto url_loader_factory = profile->GetDefaultStoragePartition() + ->GetURLLoaderFactoryForBrowserProcess(); + auto request = std::make_unique<network::ResourceRequest>(); + request->url = url; + auto loader = + network::SimpleURLLoader::Create(std::move(request), traffic_annotation); + loader->DownloadToString(url_loader_factory.get(), + base::BindOnce(&WhatsNewHandler::OnResponseLoaded, + weak_ptr_factory_.GetWeakPtr(), + loader.get(), std::move(on_result)), + kMaxDownloadBytes); + loader_map_.insert({loader.get(), std::move(loader)}); +} + +void WhatsNewHandler::OnResponseLoaded(const network::SimpleURLLoader* loader, + OnFetchResultCallback on_result, + std::unique_ptr<std::string> body) { + bool success = loader->NetError() == net::OK && loader->ResponseInfo() && + loader->ResponseInfo()->headers && + loader->ResponseInfo()->headers->response_code() >= 200 && + loader->ResponseInfo()->headers->response_code() <= 299 && + body; + std::move(on_result).Run(success, std::move(body)); + loader_map_.erase(loader); +} + +void WhatsNewHandler::OnFetchResult(const std::string& callback_id, + bool is_auto, + bool success, + std::unique_ptr<std::string> body) { + if (!success && is_auto) { + // Open NTP if the page wasn't retrieved and What's New was opened + // automatically. + Browser* browser = chrome::FindLastActive(); + if (!browser) + return; + + content::OpenURLParams params(GURL(chrome::kChromeUINewTabPageURL), + content::Referrer(), + WindowOpenDisposition::CURRENT_TAB, + ui::PAGE_TRANSITION_AUTO_BOOKMARK, false); + browser->OpenURL(params); + } else { + // Update pref if successfully shown automatically. + if (success && is_auto) { + whats_new::SetLastVersion(g_browser_process->local_state()); + } + ResolveJavascriptCallback( + base::Value(callback_id), + success ? base::Value(whats_new::kChromeWhatsNewURL) : base::Value()); + } +}
diff --git a/chrome/browser/ui/webui/whats_new/whats_new_handler.h b/chrome/browser/ui/webui/whats_new/whats_new_handler.h new file mode 100644 index 0000000..41f5cf14 --- /dev/null +++ b/chrome/browser/ui/webui/whats_new/whats_new_handler.h
@@ -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. + +#ifndef CHROME_BROWSER_UI_WEBUI_WHATS_NEW_WHATS_NEW_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_WHATS_NEW_WHATS_NEW_HANDLER_H_ + +#include <unordered_map> + +#include "base/memory/weak_ptr.h" +#include "content/public/browser/web_ui_message_handler.h" + +namespace base { +class ListValue; +} + +namespace network { +class SimpleURLLoader; +} + +// Page handler for chrome://whats-new. +class WhatsNewHandler : public content::WebUIMessageHandler { + public: + WhatsNewHandler(); + ~WhatsNewHandler() override; + WhatsNewHandler(const WhatsNewHandler&) = delete; + WhatsNewHandler& operator=(const WhatsNewHandler&) = delete; + + private: + void HandleInitialize(const base::ListValue* args); + typedef base::OnceCallback<void(bool success, + std::unique_ptr<std::string> body)> + OnFetchResultCallback; + void Fetch(const GURL& url, OnFetchResultCallback on_result); + void OnResponseLoaded(const network::SimpleURLLoader* loader, + OnFetchResultCallback on_result, + std::unique_ptr<std::string> body); + void OnFetchResult(const std::string& callback_id, + bool is_auto, + bool success, + std::unique_ptr<std::string> body); + + // content::WebUIMessageHandler: + void RegisterMessages() override; + void OnJavascriptAllowed() override; + void OnJavascriptDisallowed() override; + + std::unordered_map<const network::SimpleURLLoader*, + std::unique_ptr<network::SimpleURLLoader>> + loader_map_; + base::WeakPtrFactory<WhatsNewHandler> weak_ptr_factory_{this}; +}; + +#endif // CHROME_BROWSER_UI_WEBUI_WHATS_NEW_WHATS_NEW_HANDLER_H_
diff --git a/chrome/browser/ui/webui/whats_new/whats_new_ui.cc b/chrome/browser/ui/webui/whats_new/whats_new_ui.cc index adfab6d..ca27e4f 100644 --- a/chrome/browser/ui/webui/whats_new/whats_new_ui.cc +++ b/chrome/browser/ui/webui/whats_new/whats_new_ui.cc
@@ -5,11 +5,13 @@ #include "chrome/browser/ui/webui/whats_new/whats_new_ui.h" #include "base/feature_list.h" +#include "base/strings/stringprintf.h" #include "base/version.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/webui/webui_util.h" -#include "chrome/common/chrome_version.h" +#include "chrome/browser/ui/webui/whats_new/whats_new_handler.h" +#include "chrome/browser/ui/webui/whats_new/whats_new_util.h" #include "chrome/common/pref_names.h" #include "chrome/common/webui_url_constants.h" #include "chrome/grit/generated_resources.h" @@ -19,6 +21,7 @@ #include "components/prefs/pref_service.h" #include "components/strings/grit/components_strings.h" #include "content/public/browser/web_ui_data_source.h" +#include "services/network/public/mojom/content_security_policy.mojom.h" #include "ui/base/webui/web_ui_util.h" namespace { @@ -36,7 +39,11 @@ {"reloadButton", IDS_RELOAD}, }; source->AddLocalizedStrings(kStrings); - + // Allow embedding of iframe from chrome.com + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ChildSrc, + base::StringPrintf("child-src https: %s;", + whats_new::kChromeWhatsNewURLShort)); return source; } @@ -47,34 +54,11 @@ registry->RegisterIntegerPref(prefs::kLastWhatsNewVersion, 0); } -// static -bool WhatsNewUI::ShouldShowForState(PrefService* local_state) { - if (!local_state) - return false; - - if (!base::FeatureList::IsEnabled(features::kChromeWhatsNewUI)) - return false; - - int last_version = local_state->GetInteger(prefs::kLastWhatsNewVersion); - return CHROME_VERSION_MAJOR > last_version; -} - -// static -void WhatsNewUI::SetLastVersion(PrefService* local_state) { - if (!local_state) { - return; - } - - local_state->SetInteger(prefs::kLastWhatsNewVersion, CHROME_VERSION_MAJOR); -} - WhatsNewUI::WhatsNewUI(content::WebUI* web_ui) : WebUIController(web_ui) { content::WebUIDataSource* source = CreateWhatsNewUIHtmlSource(Profile::FromWebUI(web_ui)); content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source); - - // TODO(rbpotter): Once we have a way to detect that the content has loaded - // successfully, update the kLastWhatsNewVersion pref. + web_ui->AddMessageHandler(std::make_unique<WhatsNewHandler>()); } WhatsNewUI::~WhatsNewUI() = default;
diff --git a/chrome/browser/ui/webui/whats_new/whats_new_ui.h b/chrome/browser/ui/webui/whats_new/whats_new_ui.h index 24da7f1..f1af727 100644 --- a/chrome/browser/ui/webui/whats_new/whats_new_ui.h +++ b/chrome/browser/ui/webui/whats_new/whats_new_ui.h
@@ -13,7 +13,6 @@ } class PrefRegistrySimple; -class PrefService; // The Web UI controller for the chrome://whats-new page. class WhatsNewUI : public content::WebUIController { @@ -22,8 +21,6 @@ ~WhatsNewUI() override; static void RegisterLocalStatePrefs(PrefRegistrySimple* registry); - static bool ShouldShowForState(PrefService* local_state); - static void SetLastVersion(PrefService* local_state); WhatsNewUI(const WhatsNewUI&) = delete; WhatsNewUI& operator=(const WhatsNewUI&) = delete;
diff --git a/chrome/browser/ui/webui/whats_new/whats_new_util.cc b/chrome/browser/ui/webui/whats_new/whats_new_util.cc new file mode 100644 index 0000000..ebfc546 --- /dev/null +++ b/chrome/browser/ui/webui/whats_new/whats_new_util.cc
@@ -0,0 +1,36 @@ +// 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/whats_new/whats_new_util.h" +#include "base/feature_list.h" +#include "chrome/browser/ui/ui_features.h" +#include "chrome/common/chrome_version.h" +#include "chrome/common/pref_names.h" +#include "components/prefs/pref_service.h" + +namespace whats_new { +const char kChromeWhatsNewURL[] = "https://www.google.com/chrome/whatsnew/"; +const char kChromeWhatsNewURLShort[] = "google.com/chrome/whatsnew/"; + +bool g_force_enable_for_tests = false; + +bool ShouldShowForState(PrefService* local_state) { + if (!local_state) + return false; + + if (!base::FeatureList::IsEnabled(features::kChromeWhatsNewUI)) + return false; + + int last_version = local_state->GetInteger(prefs::kLastWhatsNewVersion); + return CHROME_VERSION_MAJOR > last_version; +} + +void SetLastVersion(PrefService* local_state) { + if (!local_state) { + return; + } + + local_state->SetInteger(prefs::kLastWhatsNewVersion, CHROME_VERSION_MAJOR); +} +} // namespace whats_new
diff --git a/chrome/browser/ui/webui/whats_new/whats_new_util.h b/chrome/browser/ui/webui/whats_new/whats_new_util.h new file mode 100644 index 0000000..47c6820 --- /dev/null +++ b/chrome/browser/ui/webui/whats_new/whats_new_util.h
@@ -0,0 +1,22 @@ +// 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_WHATS_NEW_WHATS_NEW_UTIL_H_ +#define CHROME_BROWSER_UI_WEBUI_WHATS_NEW_WHATS_NEW_UTIL_H_ + +class PrefService; + +namespace whats_new { +extern const char kChromeWhatsNewURL[]; +extern const char kChromeWhatsNewURLShort[]; + +// Allows tests to force What's New to stay open even if loading remote content +// doesn't succeed, since this does not work in tests. +extern bool g_force_enable_for_tests; + +bool ShouldShowForState(PrefService* local_state); +void SetLastVersion(PrefService* local_state); +} // namespace whats_new + +#endif // CHROME_BROWSER_UI_WEBUI_WHATS_NEW_WHATS_NEW_UTIL_H_
diff --git a/chrome/browser/ui/window_sizer/window_sizer.cc b/chrome/browser/ui/window_sizer/window_sizer.cc index bbfa686..17262e7 100644 --- a/chrome/browser/ui/window_sizer/window_sizer.cc +++ b/chrome/browser/ui/window_sizer/window_sizer.cc
@@ -7,8 +7,8 @@ #include <utility> #include "base/command_line.h" -#include "base/cxx17_backports.h" #include "base/macros.h" +#include "base/numerics/ranges.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" @@ -312,10 +312,12 @@ !work_area.Contains(*bounds)) { bounds->set_width(std::min(bounds->width(), work_area.width())); bounds->set_height(std::min(bounds->height(), work_area.height())); - bounds->set_x(base::clamp(bounds->x(), work_area.x(), - work_area.right() - bounds->width())); - bounds->set_y(base::clamp(bounds->y(), work_area.y(), - work_area.bottom() - bounds->height())); + // TODO(crbug.com/1235666): Make sure these use correct ranges (lo <= hi) + // and migrate to base::clamp(). + bounds->set_x(base::BrokenClampThatShouldNotBeUsed( + bounds->x(), work_area.x(), work_area.right() - bounds->width())); + bounds->set_y(base::BrokenClampThatShouldNotBeUsed( + bounds->y(), work_area.y(), work_area.bottom() - bounds->height())); } #if defined(OS_MAC) @@ -343,8 +345,12 @@ const int min_x = work_area.x() + kMinVisibleWidth - bounds->width(); const int max_y = work_area.bottom() - kMinVisibleHeight; const int max_x = work_area.right() - kMinVisibleWidth; - bounds->set_y(base::clamp(bounds->y(), min_y, max_y)); - bounds->set_x(base::clamp(bounds->x(), min_x, max_x)); + // TODO(crbug.com/1235666): Make sure these use correct ranges (lo <= hi) + // and migrate to base::clamp(). + bounds->set_y( + base::BrokenClampThatShouldNotBeUsed(bounds->y(), min_y, max_y)); + bounds->set_x( + base::BrokenClampThatShouldNotBeUsed(bounds->x(), min_x, max_x)); #endif // defined(OS_MAC) }
diff --git a/chrome/browser/usb/web_usb_detector.cc b/chrome/browser/usb/web_usb_detector.cc index b35d1d1a..340754c 100644 --- a/chrome/browser/usb/web_usb_detector.cc +++ b/chrome/browser/usb/web_usb_detector.cc
@@ -184,14 +184,6 @@ WebUsbDetector::~WebUsbDetector() = default; void WebUsbDetector::Initialize() { -#if defined(OS_WIN) - // The WebUSB device detector is disabled on Windows due to jank and hangs - // caused by enumerating devices. The new USB backend is designed to resolve - // these issues so enable it for testing. https://crbug.com/656702 - if (!base::FeatureList::IsEnabled(device::kNewUsbBackend)) - return; -#endif // defined(OS_WIN) - // Tests may set a fake manager. if (!device_manager_) { // Receive mojo::Remote<UsbDeviceManager> from DeviceService.
diff --git a/chrome/browser/web_applications/app_service/web_apps_chromeos_browsertest.cc b/chrome/browser/web_applications/app_service/web_apps_chromeos_browsertest.cc index 994c48a..0ee8c660 100644 --- a/chrome/browser/web_applications/app_service/web_apps_chromeos_browsertest.cc +++ b/chrome/browser/web_applications/app_service/web_apps_chromeos_browsertest.cc
@@ -18,6 +18,8 @@ #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/common/chrome_features.h" +#include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/notification_service.h" #include "content/public/test/browser_test.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -25,6 +27,7 @@ #include "ui/base/models/image_model.h" #include "ui/base/models/simple_menu_model.h" #include "ui/display/display.h" +#include "ui/events/event_constants.h" #include "ui/gfx/image/image.h" #include "url/gurl.h" @@ -82,7 +85,7 @@ apps::AppServiceProxyFactory::GetForProfile(profile()) ->FlushMojoCallsForTesting(); - std::unique_ptr<ui::SimpleMenuModel> result; + std::unique_ptr<ui::SimpleMenuModel> menu_model; { ash::ShelfModel* const shelf_model = ash::ShelfModel::Get(); shelf_model->PinAppWithID(app_id); @@ -92,8 +95,9 @@ delegate->GetContextMenu( display::Display::GetDefaultDisplay().id(), base::BindLambdaForTesting( - [&run_loop, &result](std::unique_ptr<ui::SimpleMenuModel> model) { - result = std::move(model); + [&run_loop, + &menu_model](std::unique_ptr<ui::SimpleMenuModel> model) { + menu_model = std::move(model); run_loop.Quit(); })); run_loop.Run(); @@ -101,24 +105,32 @@ // Shortcuts appear last in the context menu. // See /web_app_shortcuts/shortcuts.json for shortcut icon definitions. - int index = result->GetItemCount() - 11; + int index = menu_model->GetItemCount() - 11; // Purpose |any| by default. - CheckShortcut(*result, index++, 0, u"One", SK_ColorGREEN); - CheckSeparator(*result, index++); + CheckShortcut(*menu_model, index++, 0, u"One", SK_ColorGREEN); + CheckSeparator(*menu_model, index++); // Purpose |maskable| takes precedence over |any|. - CheckShortcut(*result, index++, 1, u"Two", SK_ColorBLUE); - CheckSeparator(*result, index++); + CheckShortcut(*menu_model, index++, 1, u"Two", SK_ColorBLUE); + CheckSeparator(*menu_model, index++); // Purpose |any|. - CheckShortcut(*result, index++, 2, u"Three", SK_ColorYELLOW); - CheckSeparator(*result, index++); + CheckShortcut(*menu_model, index++, 2, u"Three", SK_ColorYELLOW); + CheckSeparator(*menu_model, index++); // Purpose |any| and |maskable|. - CheckShortcut(*result, index++, 3, u"Four", SK_ColorCYAN); - CheckSeparator(*result, index++); + CheckShortcut(*menu_model, index++, 3, u"Four", SK_ColorCYAN); + CheckSeparator(*menu_model, index++); // Purpose |maskable|. - CheckShortcut(*result, index++, 4, u"Five", SK_ColorMAGENTA); - CheckSeparator(*result, index++); + CheckShortcut(*menu_model, index++, 4, u"Five", SK_ColorMAGENTA); + CheckSeparator(*menu_model, index++); // No icons. - CheckShortcut(*result, index++, 5, u"Six", absl::nullopt); - EXPECT_EQ(index, result->GetItemCount()); + CheckShortcut(*menu_model, index++, 5, u"Six", absl::nullopt); + EXPECT_EQ(index, menu_model->GetItemCount()); + + const int command_id = ash::LAUNCH_APP_SHORTCUT_FIRST + 3; + ui_test_utils::UrlLoadObserver url_observer( + https_server()->GetURL("/web_app_shortcuts/shortcuts.html#four"), + content::NotificationService::AllSources()); + menu_model->ActivatedAt(menu_model->GetIndexOfCommandId(command_id), + ui::EF_LEFT_MOUSE_BUTTON); + url_observer.Wait(); }
diff --git a/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.cc b/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.cc index 8a0885eb..e76bd9ad 100644 --- a/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.cc +++ b/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.cc
@@ -132,42 +132,11 @@ SystemWebAppManagerBrowserTest::SystemWebAppManagerBrowserTest( bool install_mock) - : SystemWebAppBrowserTestBase(install_mock) { + : TestProfileTypeMixin<SystemWebAppBrowserTestBase>(install_mock) { if (install_mock) { maybe_installation_ = TestSystemWebAppInstallation::SetUpStandaloneSingleWindowApp(); } } -void SystemWebAppManagerBrowserTest::SetUpCommandLine( - base::CommandLine* command_line) { - SystemWebAppBrowserTestBase::SetUpCommandLine(command_line); - if (profile_type() == TestProfileType::kGuest) { - ConfigureCommandLineForGuestMode(command_line); - } else if (profile_type() == TestProfileType::kIncognito) { - command_line->AppendSwitch(::switches::kIncognito); - } -} - -std::string SystemWebAppManagerTestParamsToString( - const ::testing::TestParamInfo<SystemWebAppManagerTestParams>& param_info) { - std::string output; - - switch (std::get<0>(param_info.param)) { - case TestProfileType::kRegular: - break; - case TestProfileType::kIncognito: - output.append("_Incognito"); - break; - case TestProfileType::kGuest: - output.append("_Guest"); - break; - } - // The framework doesn't accept a blank param - if (output.empty()) { - output = "_Default"; - } - return output; -} - } // namespace web_app
diff --git a/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.h b/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.h index 4865def..15db816 100644 --- a/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.h +++ b/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.h
@@ -106,47 +106,13 @@ enum class InstallationType { kManifestInstall, kWebAppInfoInstall }; -using SystemWebAppManagerTestParams = std::tuple<TestProfileType>; - class SystemWebAppManagerBrowserTest - : public SystemWebAppBrowserTestBase, - public ::testing::WithParamInterface<SystemWebAppManagerTestParams> { + : public TestProfileTypeMixin<SystemWebAppBrowserTestBase> { public: explicit SystemWebAppManagerBrowserTest(bool install_mock = true); ~SystemWebAppManagerBrowserTest() override = default; - - TestProfileType profile_type() const { return std::get<0>(GetParam()); } - - // InProcessBrowserTest: - void SetUpCommandLine(base::CommandLine* command_line) override; }; -std::string SystemWebAppManagerTestParamsToString( - const ::testing::TestParamInfo<SystemWebAppManagerTestParams>& param_info); - } // namespace web_app -#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P(SUITE, PARAMS) \ - INSTANTIATE_TEST_SUITE_P(All, SUITE, PARAMS, \ - web_app::SystemWebAppManagerTestParamsToString) - -// Instantiates 3 versions of each test in |SUITE| to ensure coverage of -// Guest and Incognito profiles, as well as regular profiles. This is currently -// only used on ChromeOS. Other platforms will likely need a differently defined -// macro because there is no such thing as Guest mode. -#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_ALL_PROFILE_TYPES_P( \ - SUITE) \ - INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P( \ - SUITE, \ - ::testing::Values(TestProfileType::kRegular, \ - TestProfileType::kIncognito, TestProfileType::kGuest)) - -#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_REGULAR_PROFILE_P(SUITE) \ - INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P( \ - SUITE, ::testing::Values(TestProfileType::kRegular)) - -#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_GUEST_SESSION_P(SUITE) \ - INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P( \ - SUITE, ::testing::Values(TestProfileType::kGuest)) - #endif // CHROME_BROWSER_WEB_APPLICATIONS_SYSTEM_WEB_APPS_TEST_SYSTEM_WEB_APP_BROWSERTEST_BASE_H_
diff --git a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc index e76c8ef0..f85710ea 100644 --- a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc +++ b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc
@@ -238,15 +238,15 @@ // EvalJs because of some quirks surrounding origin trials and content security // policies. class SystemWebAppManagerFileHandlingBrowserTestBase - : public SystemWebAppBrowserTestBase, - public ::testing::WithParamInterface<SystemWebAppManagerTestParams> { + : public TestProfileTypeMixin<SystemWebAppBrowserTestBase> { public: using IncludeLaunchDirectory = TestSystemWebAppInstallation::IncludeLaunchDirectory; explicit SystemWebAppManagerFileHandlingBrowserTestBase( IncludeLaunchDirectory include_launch_directory) - : SystemWebAppBrowserTestBase(/*install_mock=*/false) { + : TestProfileTypeMixin<SystemWebAppBrowserTestBase>( + /*install_mock=*/false) { scoped_feature_blink_api_.InitWithFeatures( {blink::features::kFileHandlingAPI}, {});
diff --git a/chrome/browser/web_applications/test/profile_test_helper.cc b/chrome/browser/web_applications/test/profile_test_helper.cc index ce977a73..2c38f48 100644 --- a/chrome/browser/web_applications/test/profile_test_helper.cc +++ b/chrome/browser/web_applications/test/profile_test_helper.cc
@@ -5,24 +5,39 @@ #include "chrome/browser/web_applications/test/profile_test_helper.h" #include "base/notreached.h" -#include "build/chromeos_buildflags.h" #if BUILDFLAG(IS_CHROMEOS_ASH) +#include "ash/constants/ash_features.h" #include "ash/constants/ash_switches.h" +#include "chrome/common/chrome_features.h" #include "components/account_id/account_id.h" #include "components/user_manager/user_names.h" #endif std::string TestProfileTypeToString( - const ::testing::TestParamInfo<TestProfileType>& info) { - switch (info.param) { + const ::testing::TestParamInfo<TestProfileParam>& info) { + std::string result; + switch (info.param.profile_type) { case TestProfileType::kRegular: - return "Regular"; + result = "Regular"; + break; case TestProfileType::kIncognito: - return "Incognito"; + result = "Incognito"; + break; case TestProfileType::kGuest: - return "Guest"; + result = "Guest"; + break; } + + if (info.param.crosapi_state == web_app::test::CrosapiParam::kEnabled) { +#if BUILDFLAG(IS_CHROMEOS_ASH) + result += "Crosapi"; +#else + NOTREACHED(); +#endif + } + + return result; } void ConfigureCommandLineForGuestMode(base::CommandLine* command_line) { @@ -37,3 +52,20 @@ NOTREACHED(); #endif } + +void InitCrosapiFeaturesForParam( + web_app::test::CrosapiParam crosapi_state, + base::test::ScopedFeatureList* scoped_feature_list) { + if (crosapi_state == web_app::test::CrosapiParam::kEnabled) { +#if BUILDFLAG(IS_CHROMEOS_ASH) + scoped_feature_list->InitWithFeatures( + {chromeos::features::kLacrosSupport, features::kWebAppsCrosapi}, {}); +#else + NOTREACHED(); +#endif + } else { +#if BUILDFLAG(IS_CHROMEOS_ASH) + scoped_feature_list->InitWithFeatures({}, {features::kWebAppsCrosapi}); +#endif + } +}
diff --git a/chrome/browser/web_applications/test/profile_test_helper.h b/chrome/browser/web_applications/test/profile_test_helper.h index 53106e22..eacb37e 100644 --- a/chrome/browser/web_applications/test/profile_test_helper.h +++ b/chrome/browser/web_applications/test/profile_test_helper.h
@@ -8,27 +8,43 @@ #include <string> #include "base/command_line.h" +#include "base/test/scoped_feature_list.h" +#include "build/chromeos_buildflags.h" +#include "chrome/browser/web_applications/test/with_crosapi_param.h" #include "chrome/common/chrome_switches.h" #include "testing/gtest/include/gtest/gtest.h" // Profile type to test. Provided to subclasses of TestProfileTypeMixin via -// GetParam(). +// get_profile(). enum class TestProfileType { kRegular, kIncognito, kGuest, }; +// Profile type to test. Provided to subclasses of TestProfileTypeMixin via +// GetParam(). +struct TestProfileParam { + typedef web_app::test::CrosapiParam CrosapiParam; + + TestProfileType profile_type; + CrosapiParam crosapi_state = CrosapiParam::kDisabled; +}; + // GTest string formatter for TestProfileType. Appends, e.g. "/Guest" to the end // of test names. std::string TestProfileTypeToString( - const ::testing::TestParamInfo<TestProfileType>& param); + const ::testing::TestParamInfo<TestProfileParam>& param); // Adds the necessary flags to |command_line| to start a browser test in guest // mode. Should be invoked in SetUpCommandLine(). Any test can call this: it is // not coupled to TestProfileTypeMixin. Should only be invoked on ChromeOS. void ConfigureCommandLineForGuestMode(base::CommandLine* command_line); +void InitCrosapiFeaturesForParam( + web_app::test::CrosapiParam crosapi_state, + base::test::ScopedFeatureList* scoped_feature_list); + // "Mixin" for configuring a test harness to parameterize on different profile // types. To use it, inherit from // : public TestProfileTypeMixin<BaseBrowserTest> @@ -46,16 +62,90 @@ template <class T> class TestProfileTypeMixin : public T, - public ::testing::WithParamInterface<TestProfileType> { + public ::testing::WithParamInterface<TestProfileParam> { public: + template <class... Args> + explicit TestProfileTypeMixin(Args&&... args) + : T(std::forward<Args>(args)...) { + InitCrosapiFeaturesForParam(GetParam().crosapi_state, + &scoped_feature_list_); + } + void SetUpCommandLine(base::CommandLine* command_line) override { - if (GetParam() == TestProfileType::kGuest) { + if (profile_type() == TestProfileType::kGuest) { ConfigureCommandLineForGuestMode(command_line); - } else if (GetParam() == TestProfileType::kIncognito) { + } else if (profile_type() == TestProfileType::kIncognito) { command_line->AppendSwitch(::switches::kIncognito); } T::SetUpCommandLine(command_line); } + + TestProfileType profile_type() const { return GetParam().profile_type; } + + private: + base::test::ScopedFeatureList scoped_feature_list_; }; +#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P(SUITE, PARAMS) \ + INSTANTIATE_TEST_SUITE_P(All, SUITE, PARAMS, TestProfileTypeToString) + +#if BUILDFLAG(IS_CHROMEOS_ASH) +// Instantiates 6 versions of each test in |SUITE| to ensure coverage of +// Guest and Incognito profiles, as well as regular profiles. This is currently +// only used on ChromeOS. Other platforms will likely need a differently defined +// macro because there is no such thing as Guest mode. +#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_ALL_PROFILE_TYPES_P( \ + SUITE) \ + INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P( \ + SUITE, ::testing::Values( \ + TestProfileParam({TestProfileType::kRegular, \ + web_app::test::CrosapiParam::kDisabled}), \ + TestProfileParam({TestProfileType::kRegular, \ + web_app::test::CrosapiParam::kEnabled}), \ + TestProfileParam({TestProfileType::kIncognito, \ + web_app::test::CrosapiParam::kDisabled}), \ + TestProfileParam({TestProfileType::kIncognito, \ + web_app::test::CrosapiParam::kEnabled}), \ + TestProfileParam({TestProfileType::kGuest, \ + web_app::test::CrosapiParam::kDisabled}), \ + TestProfileParam({TestProfileType::kGuest, \ + web_app::test::CrosapiParam::kEnabled}))) + +#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_REGULAR_PROFILE_P(SUITE) \ + INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P( \ + SUITE, ::testing::Values( \ + TestProfileParam({TestProfileType::kRegular, \ + web_app::test::CrosapiParam::kDisabled}), \ + TestProfileParam({TestProfileType::kRegular, \ + web_app::test::CrosapiParam::kEnabled}))) + +#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_GUEST_SESSION_P(SUITE) \ + INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P( \ + SUITE, ::testing::Values( \ + TestProfileParam({TestProfileType::kGuest, \ + web_app::test::CrosapiParam::kDisabled}), \ + TestProfileParam({TestProfileType::kGuest, \ + web_app::test::CrosapiParam::kEnabled}))) +#else +// Instantiates 3 versions of each test in |SUITE| to ensure coverage of +// Guest and Incognito profiles, as well as regular profiles. This is currently +// only used on ChromeOS. Other platforms will likely need a differently defined +// macro because there is no such thing as Guest mode. +#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_ALL_PROFILE_TYPES_P( \ + SUITE) \ + INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P( \ + SUITE, \ + ::testing::Values(TestProfileParam({TestProfileType::kRegular}), \ + TestProfileParam({TestProfileType::kIncognito}), \ + TestProfileParam({TestProfileType::kGuest}))) + +#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_REGULAR_PROFILE_P(SUITE) \ + INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P( \ + SUITE, ::testing::Values(TestProfileParam({TestProfileType::kRegular}))) + +#define INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_GUEST_SESSION_P(SUITE) \ + INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_P( \ + SUITE, ::testing::Values(TestProfileParam({TestProfileType::kGuest}))) +#endif + #endif // CHROME_BROWSER_WEB_APPLICATIONS_TEST_PROFILE_TEST_HELPER_H_
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index b1fad2a..fa9fb8f 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -101,6 +101,14 @@ const base::Feature kChangePictureVideoMode{"ChangePictureVideoMode", base::FEATURE_ENABLED_BY_DEFAULT}; +#if defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) +// Controls whether Chrome Apps are supported. See https://crbug.com/1221251. +// If the feature is disabled, Chrome Apps continue to work. If enabled, Chrome +// Apps will not launch and will be marked in the UI as deprecated. +const base::Feature kChromeAppsDeprecation{"ChromeAppsDeprecation", + base::FEATURE_DISABLED_BY_DEFAULT}; +#endif // defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) + #if defined(OS_WIN) const base::Feature kChromeCleanupScanCompletedNotification{ "ChromeCleanupScanCompletedNotification",
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index 1ccfc54..b0b0b8c 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -81,6 +81,11 @@ COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kChangePictureVideoMode; +#if defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) +COMPONENT_EXPORT(CHROME_FEATURES) +extern const base::Feature kChromeAppsDeprecation; +#endif + #if defined(OS_WIN) COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kChromeCleanupScanCompletedNotification;
diff --git a/chrome/common/extensions/api/tab_capture.idl b/chrome/common/extensions/api/tab_capture.idl index d0210c06..2b0f422 100644 --- a/chrome/common/extensions/api/tab_capture.idl +++ b/chrome/common/extensions/api/tab_capture.idl
@@ -102,36 +102,6 @@ // |callback| : Callback invoked with CaptureInfo[] for captured tabs. static void getCapturedTabs(GetCapturedTabsCallback callback); - // Creates an off-screen tab and navigates it to the given |startUrl|. - // Then, capture is started and a MediaStream is returned via |callback|. - // - // Off-screen tabs are isolated from the user's normal browser experience. - // They do not show up in the browser window or tab strip, nor are they - // visible to extensions (e.g., via the chrome.tabs.* APIs). - // - // An off-screen tab remains alive until one of three events occurs: 1. All - // MediaStreams providing its captured content are closed; 2. the page - // self-closes (e.g., via window.close()); 3. the extension that called - // captureOffscreenTab() is unloaded. - // - // Sandboxing: The off-screen tab does not have any access whatsoever to the - // local user profile (including cookies, HTTP auth, etc.). Instead, it is - // provided its own sandboxed profile. Also, it cannot access any - // interactive resources such as keyboard/mouse input, media recording - // devices (e.g., web cams), copy/paste to/from the system clipboard, etc. - // - // Note: This is a new API, currently only available in Canary/Dev channel, - // and may change without notice. - // - // |options| : Constraints for the capture and returned MediaStream. - // |callback| : Callback with either the tab capture MediaStream or - // <code>null</code>. <code>null</code> indicates an error has occurred - // and the client may query $(ref:runtime.lastError) to access the error - // details. - static void captureOffscreenTab(DOMString startUrl, - CaptureOptions options, - GetTabMediaCallback callback); - // Creates a stream ID to capture the target tab. // Similar to chrome.tabCapture.capture() method, but returns a media // stream ID, instead of a media stream, to the consumer tab.
diff --git a/chrome/renderer/resources/extensions/tab_capture_custom_bindings.js b/chrome/renderer/resources/extensions/tab_capture_custom_bindings.js index f7c691c6..5c96b77 100644 --- a/chrome/renderer/resources/extensions/tab_capture_custom_bindings.js +++ b/chrome/renderer/resources/extensions/tab_capture_custom_bindings.js
@@ -51,5 +51,4 @@ } apiFunctions.setCustomCallback('capture', proxyToGetUserMedia); - apiFunctions.setCustomCallback('captureOffscreenTab', proxyToGetUserMedia); });
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index bb47bea..b5bf6e8 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -441,6 +441,12 @@ } if (is_chromeos) { + sources += [ + "../browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.cc", + "../browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.h", + "../browser/ui/views/frame/immersive_mode_tester.cc", + "../browser/ui/views/frame/immersive_mode_tester.h", + ] deps += [ "//chromeos/dbus/constants" ] } @@ -1625,6 +1631,8 @@ "../browser/notifications/scheduler/notification_schedule_service_browsertest.cc", "../browser/ntp_tiles/ntp_tiles_browsertest.cc", "../browser/optimization_guide/blink/blink_optimization_guide_browsertest.cc", + "../browser/optimization_guide/browser_test_util.cc", + "../browser/optimization_guide/browser_test_util.h", "../browser/optimization_guide/hints_fetcher_browsertest.cc", "../browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc", "../browser/optimization_guide/page_content_annotations_service_browsertest.cc",
diff --git a/chrome/test/data/extensions/api_test/content_scripts/storage_api_allow_untrusted_access/background.js b/chrome/test/data/extensions/api_test/content_scripts/storage_api_allow_untrusted_access/background.js new file mode 100644 index 0000000..15b7fef --- /dev/null +++ b/chrome/test/data/extensions/api_test/content_scripts/storage_api_allow_untrusted_access/background.js
@@ -0,0 +1,39 @@ +// 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. + +async function testSetAndGetValue(area) { + const expectedEntry = {background: area}; + await new Promise((resolve) => { + chrome.storage[area].set(expectedEntry, resolve); + }); + const actualEntry = await new Promise((resolve) => { + chrome.storage[area].get('background', resolve); + }); + chrome.test.assertEq(expectedEntry, actualEntry); +} + +chrome.test.runTests([ + function checkDefaultAccessLevel() { + // Make sure `setAccessLevel` is only exposed to the `session` storage area. + chrome.test.assertFalse(!!chrome.storage.local.setAccessLevel); + chrome.test.assertFalse(!!chrome.storage.sync.setAccessLevel); + chrome.test.assertFalse(!!chrome.storage.managed.setAccessLevel); + chrome.test.assertTrue(!!chrome.storage.session.setAccessLevel); + chrome.test.succeed(); + }, + async function setValuesInBackgroundPage() { + await testSetAndGetValue('session'); + await testSetAndGetValue('local'); + await testSetAndGetValue('sync'); + chrome.test.succeed(); + }, + function allowUntrustedAccessToSessionStorage() { + // Allow context scripts to access the `session` storage. + chrome.storage.session.setAccessLevel( + {accessLevel: 'TRUSTED_AND_UNTRUSTED_CONTEXTS'}, () => { + chrome.test.assertNoLastError(); + chrome.test.succeed(); + }); + } +]);
diff --git a/chrome/test/data/extensions/api_test/content_scripts/storage_api_allow_untrusted_access/content_script.js b/chrome/test/data/extensions/api_test/content_scripts/storage_api_allow_untrusted_access/content_script.js new file mode 100644 index 0000000..4f41a570 --- /dev/null +++ b/chrome/test/data/extensions/api_test/content_scripts/storage_api_allow_untrusted_access/content_script.js
@@ -0,0 +1,90 @@ +// 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. + +// Since the extension set the access level to TRUSTED_AND_UNTRUSTED_CONTEXTS, +// all storage areas are accessible. +const accessibleStorageAreas = ['sync', 'local', 'session']; + +async function testAccessibleStorageAreas(func, param) { + // Content scripts can access the storage when the storage area has untrusted + // access. + for (const area of accessibleStorageAreas) { + // If the param exists and to avoid mutating it, insert a copy of the param + // to each area params. + let areaParams = param ? [param] : []; + await new Promise((resolve) => { + areaParams.push(() => { + chrome.test.assertNoLastError(); + resolve(); + }) + chrome.storage[area][func](...areaParams); + }) + }; +}; + +async function testGetValueSetByBackgroundPage() { + // Content scripts can access values set by the background page when the + // storage area has untrusted access. Requires that the background page + // previously stored {background: '`area`'} for each respective `area`. + for (const area of accessibleStorageAreas) { + await new Promise((resolve) => { + chrome.storage[area].get('background', (value) => { + chrome.test.assertEq({background: area}, value); + resolve(); + }); + }) + }; +}; + +chrome.test.runTests([ + // This test must run before any other test clears the storage. + async function getValueSetByBackgroundPageFromContentScript() { + // `sync` and `local` storage areas can always access background page + // values. `session` storage area with `TRUSTED_AND_UNTRUSTED_CONTEXTS` + // access level can access background page values. + await testGetValueSetByBackgroundPage(); + chrome.test.succeed(); + }, + + async function setValueFromContentScript() { + await testAccessibleStorageAreas('set', {foo: 'bar'}); + chrome.test.succeed(); + }, + + async function getValueFromContentScript() { + await testAccessibleStorageAreas('get', 'foo'); + chrome.test.succeed(); + }, + + async function getBytesInUseFromContentScript() { + await testAccessibleStorageAreas('getBytesInUse', null) + chrome.test.succeed(); + }, + + async function removeValueFromContentScript() { + await testAccessibleStorageAreas('remove', 'foo'); + chrome.test.succeed(); + }, + + async function clearValuesFromContentScript() { + await testAccessibleStorageAreas('clear') + chrome.test.succeed(); + }, + + function setAccessLevelFromContentScript() { + // `setAccessLevel` is not exposed to `sync` or `local`. + chrome.test.assertFalse(!!chrome.storage.sync.setAccessLevel); + chrome.test.assertFalse(!!chrome.storage.local.setAccessLevel); + // TODO(crbug.com/1227410): `setAccessLevel` is exposed to `session` but + // cannot be accessed from a content script. This will change once we + // expose only `setAccessLevel` in privileged contexts. + chrome.test.assertTrue(!!chrome.storage.session.setAccessLevel); + chrome.storage.session.setAccessLevel( + {accessLevel: 'TRUSTED_CONTEXTS'}, () => { + chrome.test.assertLastError( + 'Context cannot set the storage access level'); + chrome.test.succeed(); + }); + }, +]);
diff --git a/chrome/test/data/extensions/api_test/content_scripts/storage_api_allow_untrusted_access/manifest.json b/chrome/test/data/extensions/api_test/content_scripts/storage_api_allow_untrusted_access/manifest.json new file mode 100644 index 0000000..d57dd7c --- /dev/null +++ b/chrome/test/data/extensions/api_test/content_scripts/storage_api_allow_untrusted_access/manifest.json
@@ -0,0 +1,16 @@ +{ + "name": "content_script_storage_api_allow_untrusted_access", + "version": "1.0", + "manifest_version": 3, + "description": "Tests the Storage API behavior with untrusted access level from a content script (which means the extension allows storage access to the content script).", + "background": { + "service_worker": "background.js" + }, + "permissions": ["storage"], + "content_scripts": [ + { + "matches": ["http://*/extensions/test_file.html"], + "js": ["content_script.js"] + } + ] +}
diff --git a/chrome/test/data/extensions/api_test/content_scripts/storage_api_default_access/background.js b/chrome/test/data/extensions/api_test/content_scripts/storage_api_default_access/background.js new file mode 100644 index 0000000..b8f9d03 --- /dev/null +++ b/chrome/test/data/extensions/api_test/content_scripts/storage_api_default_access/background.js
@@ -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. + +async function testSetAndGetValue(area) { + const expectedEntry = {background: area}; + await new Promise((resolve) => { + chrome.storage[area].set(expectedEntry, resolve); + }); + const actualEntry = await new Promise((resolve) => { + chrome.storage[area].get('background', resolve); + }); + chrome.test.assertEq(expectedEntry, actualEntry); +} + +chrome.test.runTests([ + async function setValuesInBackgroundPage() { + await testSetAndGetValue('session'); + await testSetAndGetValue('local'); + await testSetAndGetValue('sync'); + chrome.test.succeed(); + }, +]);
diff --git a/chrome/test/data/extensions/api_test/content_scripts/storage_api_default_access/content_script.js b/chrome/test/data/extensions/api_test/content_scripts/storage_api_default_access/content_script.js new file mode 100644 index 0000000..cb1116a0 --- /dev/null +++ b/chrome/test/data/extensions/api_test/content_scripts/storage_api_default_access/content_script.js
@@ -0,0 +1,111 @@ +// 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. + +// `session` doesn't have storage access by default. All other storage areas are +// accessible. +const accessibleStorageAreas = ['sync', 'local']; +const invalidAccessMessage = + 'Access to storage is not allowed from this context.'; + +async function testAccessibleStorageAreas(func, param) { + // `sync` and `local` storage areas have untrusted access level by default, + // thus content scripts can access the storage. + for (const area of accessibleStorageAreas) { + // If the param exists and to avoid mutating it, insert a copy of the param + // to each area params. + let areaParams = param ? [param] : []; + await new Promise((resolve) => { + areaParams.push(() => { + chrome.test.assertNoLastError(); + resolve(); + }) + chrome.storage[area][func](...areaParams); + }) + }; +}; + +async function testInaccessibleStorageAreas(func, param) { + // `session` storage area has only trusted access level by default, thus + // content scripts cannot access the storage. + // If the param exists, insert a copy of the param to the area params. + let areaParams = param ? [param] : []; + await new Promise((resolve) => { + areaParams.push(() => { + chrome.test.assertLastError(invalidAccessMessage); + resolve(); + }) + chrome.storage.session[func](...areaParams); + }) +}; + +async function testGetValueSetByBackgroundPage() { + // Content scripts can access values set by the background page when the + // storage area has untrusted access. + for (const area of accessibleStorageAreas) { + await new Promise((resolve) => { + chrome.storage[area].get('background', (value) => { + chrome.test.assertEq({background: area}, value); + resolve(); + }); + }) + }; +}; + +chrome.test.runTests([ + // This test must run before any other test clears the storage. + async function getValueSetByBackgroundPageFromContentScript() { + // `sync` and `local` storage areas can access background page values by + // default. + await testGetValueSetByBackgroundPage(); + // `session` storage area cannot access background page values by + // default. + await testInaccessibleStorageAreas('get', 'background'); + chrome.test.succeed(); + }, + + async function setValueFromContentScript() { + await testAccessibleStorageAreas('set', {foo: 'bar'}); + await testInaccessibleStorageAreas('set', {foo: 'bar'}); + chrome.test.succeed(); + }, + + async function getValueFromContentScript() { + await testAccessibleStorageAreas('get', 'foo'); + await testInaccessibleStorageAreas('get', 'foo'); + chrome.test.succeed(); + }, + + async function getBytesInUseFromContentScript() { + await testAccessibleStorageAreas('getBytesInUse', null); + await testInaccessibleStorageAreas('getBytesInUse', null); + chrome.test.succeed(); + }, + + async function removeValueFromContentScript() { + await testAccessibleStorageAreas('remove', 'foo'); + await testInaccessibleStorageAreas('remove', 'foo'); + chrome.test.succeed(); + }, + + async function clearValuesFromContentScript() { + await testAccessibleStorageAreas('clear'); + await testInaccessibleStorageAreas('clear'); + chrome.test.succeed(); + }, + + function setAccessLevelFromContentScript() { + // `setAccessLevel` is not exposed to `sync` or `local`. + chrome.test.assertFalse(!!chrome.storage.sync.setAccessLevel); + chrome.test.assertFalse(!!chrome.storage.local.setAccessLevel); + // TODO(crbug.com/1227410): `setAccessLevel` is exposed to `session` but + // cannot be accessed from a content script. This will change once we only + // expose `setAccessLevel` in unblessed contexts. + chrome.test.assertTrue(!!chrome.storage.session.setAccessLevel); + chrome.storage.session.setAccessLevel( + {accessLevel: 'TRUSTED_CONTEXTS'}, () => { + chrome.test.assertLastError(invalidAccessMessage); + chrome.test.succeed(); + }); + } +]);
diff --git a/chrome/test/data/extensions/api_test/content_scripts/storage_api_default_access/manifest.json b/chrome/test/data/extensions/api_test/content_scripts/storage_api_default_access/manifest.json new file mode 100644 index 0000000..4b000771 --- /dev/null +++ b/chrome/test/data/extensions/api_test/content_scripts/storage_api_default_access/manifest.json
@@ -0,0 +1,16 @@ +{ + "name": "content_script_storage_api_default_access", + "version": "1.0", + "manifest_version": 3, + "description": "Tests the Storage API behavior with default access level (trusted) from a content script.", + "background": { + "service_worker": "background.js" + }, + "permissions": ["storage"], + "content_scripts": [ + { + "matches": ["http://*/extensions/test_file.html"], + "js": ["content_script.js"] + } + ] +}
diff --git a/chrome/test/data/extensions/api_test/settings/split_incognito/background.js b/chrome/test/data/extensions/api_test/settings/split_incognito/background.js index 85ba2bf..df340c6 100644 --- a/chrome/test/data/extensions/api_test/settings/split_incognito/background.js +++ b/chrome/test/data/extensions/api_test/settings/split_incognito/background.js
@@ -2,6 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Whether we've seen an onChanged event fire since the last modification +// we're listening for. +let seenLatestEvent = false; +// An optional function to invoke when an onChanged event is fired; used +// to resolve a promise that waits for the event. +let onEventSeen; + ['sync', 'local', 'session'].forEach(function(namespace) { chrome.storage[namespace].notifications = {}; chrome.storage.onChanged.addListener(function(changes, event_namespace) { @@ -10,10 +17,28 @@ Object.keys(changes).forEach(function(key) { notifications[key] = changes[key]; }); + seenLatestEvent = true; + if (onEventSeen) + onEventSeen(); } }); }); +function waitForEvent() { + return new Promise((resolve) => { + // If the event was already seen, resolve immediately. + if (seenLatestEvent) { + resolve(); + return; + } + // Otherwise, wait for it to come in and then resolve. + onEventSeen = () => { + onEventSeen = undefined; + resolve(); + }; + }) +} + // The test from C++ runs "actions", where each action is defined here. // This allows the test to be tightly controlled between incognito and // non-incognito modes. @@ -36,9 +61,11 @@ }); }, setFoo: function(callback) { + seenLatestEvent = false; this.set({foo: "bar"}, callback); }, removeFoo: function(callback) { + seenLatestEvent = false; this.remove("foo", callback); }, clear: function(callback) { @@ -52,11 +79,19 @@ this.notifications = {}; callback(); }, - assertAddFooNotification: function(callback) { + assertAddFooNotification: async function(callback) { + // Wait for event to be dispatched before checking it was disptached. + // Workaround while we wait for https://crbug.com/1216449 fix. + await waitForEvent(this); + seenLatestEvent = false; chrome.test.assertEq({ foo: { newValue: 'bar' } }, this.notifications); callback(); }, - assertDeleteFooNotification: function(callback) { + assertDeleteFooNotification: async function(callback) { + // Wait for event to be dispatched before checking it was disptached. + // Workaround while we wait for https://crbug.com/1216449 fix. + await waitForEvent(this); + seenLatestEvent = false; chrome.test.assertEq({ foo: { oldValue: 'bar' } }, this.notifications); callback(); }
diff --git a/chrome/test/data/extensions/api_test/tab_capture/api_tests.js b/chrome/test/data/extensions/api_test/tab_capture/api_tests.js index e0ebd33..c354ab6 100644 --- a/chrome/test/data/extensions/api_test/tab_capture/api_tests.js +++ b/chrome/test/data/extensions/api_test/tab_capture/api_tests.js
@@ -209,38 +209,6 @@ }); }, - function offscreenTabsDoNotShowUpAsCapturedTabs() { - tabCapture.getCapturedTabs(function(tab_list_before) { - tabCapture.captureOffscreenTab( - helloWorldPageUri, - {video: true}, - function(stream) { - chrome.test.assertTrue(!!stream); - tabCapture.getCapturedTabs(function(tab_list_after) { - assertIsSameSetOfTabs(tab_list_before, tab_list_after, 'tabId'); - stream.getVideoTracks()[0].stop(); - succeedOnCaptureStopped(); - }); - }); - }); - }, - - function offscreenTabsDoNotShowUpInTabsQuery() { - chrome.tabs.query({/* all tabs */}, function(tab_list_before) { - tabCapture.captureOffscreenTab( - helloWorldPageUri, - {video: true}, - function(stream) { - chrome.test.assertTrue(!!stream); - chrome.tabs.query({/* all tabs */}, function(tab_list_after) { - assertIsSameSetOfTabs(tab_list_before, tab_list_after, 'id'); - stream.getVideoTracks()[0].stop(); - succeedOnCaptureStopped(); - }); - }); - }); - }, - function getMediaStreamIdWithCallerTab() { chrome.tabs.getCurrent(function(tab) { tabCapture.getMediaStreamId({consumerTabId: tab.id}, function(streamId) {
diff --git a/chrome/test/data/extensions/api_test/tab_capture/max_offscreen_tabs.html b/chrome/test/data/extensions/api_test/tab_capture/max_offscreen_tabs.html deleted file mode 100644 index fe9dcf9c..0000000 --- a/chrome/test/data/extensions/api_test/tab_capture/max_offscreen_tabs.html +++ /dev/null
@@ -1,5 +0,0 @@ -<html> -<body> -</body> -<script src="max_offscreen_tabs.js"></script> -</html>
diff --git a/chrome/test/data/extensions/api_test/tab_capture/max_offscreen_tabs.js b/chrome/test/data/extensions/api_test/tab_capture/max_offscreen_tabs.js deleted file mode 100644 index 9750c2f7..0000000 --- a/chrome/test/data/extensions/api_test/tab_capture/max_offscreen_tabs.js +++ /dev/null
@@ -1,58 +0,0 @@ -// Copyright 2015 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. - -var tabCapture = chrome.tabCapture; - -const helloWorldPageUri = - 'data:text/html;charset=UTF-8,' + - encodeURIComponent( - '<html><body>Hello world!</body></html>' + - '<script>setTimeout(() => { window.close(); }, 3000);</script>'); - -chrome.test.runTests([ - function canOpenUpToThreeOffscreenTabs() { - function stopAllStreams(streams) { - // Off-screen tabs remain alive until either all MediaStreams are closed, - // the page self-closes, or the extension that called captureOffscreenTab - // is unloaded. - for (var i = 0, end = streams.length; i < end; ++i) { - streams[i].getVideoTracks()[0].stop(); - - audio_track = streams[i].getAudioTracks()[0]; - if (audio_track) { - audio_track.stop(); - } - } - } - - function launchTabsUntilLimitReached(streamsSoFar) { - tabCapture.captureOffscreenTab( - helloWorldPageUri, - {video: true}, - function(stream) { - if (streamsSoFar.length == 4) { - // 5th off-screen tab capture should fail. - chrome.test.assertLastError( - 'Extension has already started too many off-screen tabs.'); - chrome.test.assertFalse(!!stream); - stopAllStreams(streamsSoFar); - chrome.test.succeed(); - } else if (stream) { - streamsSoFar.push(stream); - setTimeout( - function() { - launchTabsUntilLimitReached(streamsSoFar); - }, 0); - } else { - console.error("Failed to capture stream, iter #" + - streamsSoFar.length); - stopAllStreams(streamsSoFar); - chrome.test.fail(); - } - }); - } - - launchTabsUntilLimitReached([]); - } -]);
diff --git a/chrome/test/data/extensions/api_test/tab_capture/offscreen_end_to_end.html b/chrome/test/data/extensions/api_test/tab_capture/offscreen_end_to_end.html deleted file mode 100644 index c51ddbf..0000000 --- a/chrome/test/data/extensions/api_test/tab_capture/offscreen_end_to_end.html +++ /dev/null
@@ -1,7 +0,0 @@ -<html> -<body style="background-color: #224; width:100%; height:100%"> -<video id="video" autoplay style="position: absolute; top:0; bottom:0; left:0; right:0; margin:auto; border:none;"></video> -</body> -<script src="offscreen_test_harness.js"></script> -<script src="offscreen_end_to_end.js"></script> -</html>
diff --git a/chrome/test/data/extensions/api_test/tab_capture/offscreen_end_to_end.js b/chrome/test/data/extensions/api_test/tab_capture/offscreen_end_to_end.js deleted file mode 100644 index 4d3f132..0000000 --- a/chrome/test/data/extensions/api_test/tab_capture/offscreen_end_to_end.js +++ /dev/null
@@ -1,70 +0,0 @@ -// Copyright 2015 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. - -// Returs a full HTML test document for the off-screen tab that renders rotating -// color fills of red, then green, then blue. -function makeRotatingColorTestDocument() { - return makeOffscreenTabTestDocument('\ -// The test pattern cycles as a color fill of red, then green, then blue.\n\ -var colors = [redColor, greenColor, blueColor];\n\ -\n\ -function colorRotationLoop() {\n\ - if (!this.iterCount) {\n\ - this.iterCount = 1;\n\ - } else {\n\ - ++this.iterCount;\n\ - }\n\ - if (!this.stepTimeMillis) {\n\ - this.stepTimeMillis = 100;\n\ - }\n\ - var idx = this.iterCount % colors.length;\n\ - if (idx == 0) { // Completed a cycle.\n\ - // Increase the wait time between switching test patterns for\n\ - // overloaded bots that are not capturing all the frames of video.\n\ - this.stepTimeMillis *= 1.25;\n\ - }\n\ - setFillColor(colors[idx]);\n\ - setTimeout(colorRotationLoop, this.stepTimeMillis);\n\ -}\n\ -colorRotationLoop();'); -} - -// Observer side of this end-to-end test. |stream| is monitored for each of the -// three fill colors to be generated by the off-screen tab. Once all three have -// been observed, the test ends successfully. -function waitForExpectedColorsAndEndTest(stream) { - // Elements from this array are removed as each color is observed. When it - // becomes empty, the test succeeds. - var remainingColors = [[255, 0, 0], [0, 255, 0], [0, 0, 255]]; - - // Note: The range of acceptable colors is quite large because there's no way - // to know whether software compositing is being used for screen capture; and, - // if software compositing is being used, there is no color space management - // and color values can be off by a lot. That said, color accuracy is being - // tested by a suite of content_browsertests. - var colorDeviation = 50; - - function onMatchedNextColor(idx) { - chrome.test.assertTrue(idx < remainingColors.length); - remainingColors.splice(idx, 1); - if (remainingColors.length == 0) { - stopAllTracks(stream); - chrome.test.succeed(); - } else { - waitForAnExpectedColor(stream, remainingColors, colorDeviation, - onMatchedNextColor); - } - } - waitForAnExpectedColor(stream, remainingColors, colorDeviation, - onMatchedNextColor); -} - -chrome.test.runTests([ - function offscreenTabTest() { - chrome.tabCapture.captureOffscreenTab( - makeDataUriFromDocument(makeRotatingColorTestDocument()), - getCaptureOptions(), - waitForExpectedColorsAndEndTest); - } -]);
diff --git a/chrome/test/data/extensions/api_test/tab_capture/offscreen_evil_tests.html b/chrome/test/data/extensions/api_test/tab_capture/offscreen_evil_tests.html deleted file mode 100644 index b924b14..0000000 --- a/chrome/test/data/extensions/api_test/tab_capture/offscreen_evil_tests.html +++ /dev/null
@@ -1,7 +0,0 @@ -<html> -<body style="background-color: #224; width:100%; height:100%"> -<video id="video" autoplay style="position: absolute; top:0; bottom:0; left:0; right:0; margin:auto; border:none;"></video> -</body> -<script src="offscreen_test_harness.js"></script> -<script src="offscreen_evil_tests.js"></script> -</html>
diff --git a/chrome/test/data/extensions/api_test/tab_capture/offscreen_evil_tests.js b/chrome/test/data/extensions/api_test/tab_capture/offscreen_evil_tests.js deleted file mode 100644 index 258ba4f..0000000 --- a/chrome/test/data/extensions/api_test/tab_capture/offscreen_evil_tests.js +++ /dev/null
@@ -1,104 +0,0 @@ -// Copyright 2015 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. - -// Waits until content sampled from |stream| indicates a success or fail status -// from an off-screen tab page that renders a green (success) or red (fail) -// color fill. -function waitForGreenOrRedTestResultAndEndTest(stream) { - waitForAnExpectedColor(stream, [[255, 0, 0], [0, 255, 0]], 64, - function (result) { - stopAllTracks(stream); - if (result == 1) { - chrome.test.succeed(); - } else { - // Fail after 3 seconds to allow examining the debug error message. - setTimeout(function () { chrome.test.fail(); }, 3000); - } - } - ); -} - -function waitForTabToCloseAndEndTest(stream) { - let check = () => { - if (!stream.getTracks().find(track => track.readyState != 'ended')) { - chrome.test.succeed(); - } - }; - check(); - stream.getTracks().forEach(track => { - track.onended = check; - }); -} - -chrome.test.runTests([ - function cannotAccessLocalResources() { - chrome.tabCapture.captureOffscreenTab( - makeDataUriFromDocument(makeOffscreenTabTestDocument( - 'function failIfIsLoadable(url, runNextTest) {\n' + - ' var request = new XMLHttpRequest();\n' + - ' request.open("GET", url);\n' + - ' request.addEventListener("load", function () {\n' + - ' setDebugMessage(url);\n' + - ' setFillColor(redColor);\n' + - ' });\n' + - ' request.addEventListener("error", function () {\n' + - ' setTimeout(runNextTest, 0);\n' + - ' });' + - ' request.send();\n' + - '}\n' + - '\n' + - 'failIfIsLoadable("file://something", function () {\n' + - ' failIfIsLoadable("chrome-extension://' + chrome.runtime.id + - '/offscreen_evil_tests.js", function() {\n' + - ' setFillColor(greenColor);\n' + - ' });\n' + - '});')), - getCaptureOptions(), - waitForGreenOrRedTestResultAndEndTest); - }, - - function cannotOpenNewTabsOrDialogs() { - chrome.tabCapture.captureOffscreenTab( - makeDataUriFromDocument(makeOffscreenTabTestDocument( - 'var wnd = window.open("data:text/html;charset=UTF-8,NOT SEEN");\n' + - 'if (wnd) {\n' + - ' setDebugMessage("window.open() succeeded");\n' + - ' setFillColor(redColor);\n' + - '} else {\n' + - ' var result = window.confirm("Can you see me?");\n' + - ' if (result) {\n' + - ' setDebugMessage("positive confirm result");\n' + - ' setFillColor(redColor);\n' + - ' } else {\n' + - ' setFillColor(greenColor);\n' + - ' }\n' + - '}')), - getCaptureOptions(), - waitForGreenOrRedTestResultAndEndTest); - }, - - function cannotNavigateWhenPresenting() { - const captureOptions = getCaptureOptions(); - captureOptions.presentationId = 'presentation_id'; - chrome.tabCapture.captureOffscreenTab( - makeDataUriFromDocument( - '<html><script>' + - 'window.location = "http://example.com/some_url.html";' + - '</script></html>'), - captureOptions, - waitForTabToCloseAndEndTest); - // NOTE: If this test times out, it means that one of the following did not - // happen: - // 1. page loaded - // 2. tab capture began - // 3. page attempted to navigate - // 4. page was closed by offscreen_tab.cc - // 5. MediaStreamTracks were ended - }, - - // NOTE: Before adding any more tests, the maximum off-screen tab limit would - // have to be increased (or a design issue resolved). This is because - // off-screen tabs are not closed the instant the LocalMediaStream is stopped, - // but approximately 1 second later. -]);
diff --git a/chrome/test/data/extensions/api_test/tab_capture/offscreen_test_harness.js b/chrome/test/data/extensions/api_test/tab_capture/offscreen_test_harness.js deleted file mode 100644 index 95af5ee..0000000 --- a/chrome/test/data/extensions/api_test/tab_capture/offscreen_test_harness.js +++ /dev/null
@@ -1,188 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This file contains a test harness for testing the behavior of pages running -// inside off-screen tabs: -// -// 1. It provides a simple way to formulate a data URI containing a full HTML -// document that executes arbitrary script. The arbitrary script running -// in the off-screen tab calls setFillColor() to expose its current state -// by rendering a color fill. In addition, the off-screen tab continuously -// paints changes that force the tab capture implementation to continuously -// capture new video frames. -// -// 2. In the extension's JavaScript context, a waitAnForExpectedColor() -// function is provided to sample the video frames of the captured -// off-screen tab until the center pixel contains one of the colors in a -// set of expected colors. - -// Width/Height of off-screen tab, rendered content, and captured content. -var width = 160; -var height = 120; - -// Capture frame rate. -var frameRate = 8; - -// Return a full HTML document that executes the |script|. The script calls -// setFillColor() to expose changes to its internal state. -function makeOffscreenTabTestDocument(script) { - return '\ -<html><body style="background-color:black; margin:0; padding:0;"></body>\n\ -<script>\n\ -var redColor = [255, 0, 0];\n\ -var greenColor = [0, 255, 0];\n\ -var blueColor = [0, 0, 255];\n\ -\n\ -var fillColor = [0, 0, 0];\n\ -function setFillColor(color) {\n\ - fillColor = color;\n\ -}\n\ -\n\ -var debugMessage = "";\n\ -function setDebugMessage(msg) {\n\ - debugMessage = msg;\n\ -}\n\ -\n\ -function updateTestPattern() {\n\ - if (!this.canvas) {\n\ - this.canvas = document.createElement("canvas");\n\ - this.canvas.width = ' + width + ';\n\ - this.canvas.height = ' + height + ';\n\ - this.canvas.style.position = "absolute";\n\ - this.canvas.style.top = "0px";\n\ - this.canvas.style.left = "0px";\n\ - this.canvas.style.width = "100%";\n\ - this.canvas.style.height = "100%";\n\ - document.body.appendChild(this.canvas);\n\ - }\n\ - var context = this.canvas.getContext("2d");\n\ - // Fill with solid color.\n\ - context.fillStyle = "rgb(" + fillColor + ")";\n\ - context.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\ - // Draw the circle that moves around the page.\n\ - var inverseColor =\n\ - [255 - fillColor[0], 255 - fillColor[1], 255 - fillColor[2]];\n\ - if (debugMessage) {\n\ - context.fillStyle = "rgb(" + inverseColor + ")";\n\ - context.font = "xx-small monospace";\n\ - context.fillText(debugMessage, 0, 0);\n\ - }\n\ - context.fillStyle = "rgba(" + inverseColor + ", 0.5)";\n\ - context.beginPath();\n\ - if (!this.frameNumber) {\n\ - this.frameNumber = 1;\n\ - } else {\n\ - ++this.frameNumber;\n\ - }\n\ - var i = this.frameNumber % 200;\n\ - var t = (this.frameNumber + 3000) * (0.01 + i / 8000.0);\n\ - var x = (Math.sin(t) * 0.45 + 0.5) * this.canvas.width;\n\ - var y = (Math.cos(t * 0.9) * 0.45 + 0.5) * this.canvas.height;\n\ - context.arc(x, y, 16, 0, 2 * Math.PI, false);\n\ - context.closePath();\n\ - context.fill();\n\ -}\n\ -\n\ -function renderTestPatternLoop() {\n\ - updateTestPattern();\n\ - requestAnimationFrame(renderTestPatternLoop);\n\ -}\n\ -renderTestPatternLoop();\n\ -\n' + -script + '\n\ -</script></html>'; -} - -// Return the given |html| document as an encoded data URI. -function makeDataUriFromDocument(html) { - return 'data:text/html;charset=UTF-8,' + encodeURIComponent(html); -} - -// Returns capture options for starting the off-screen tab. -function getCaptureOptions() { - return { - video: true, - audio: false, - videoConstraints: { - mandatory: { - minWidth: width, - minHeight: height, - maxWidth: width, - maxHeight: height, - maxFrameRate: frameRate, - } - } - }; -} - -// Samples the video frames from a capture |stream|, testing the color of the -// center pixel. Once the pixel matches one of the colors in |expectedColors|, -// run |callback| with the index of the matched color. |colorDeviation| is used -// to imprecisely match colors. -function waitForAnExpectedColor( - stream, expectedColors, colorDeviation, callback) { - chrome.test.assertTrue(!!stream); - chrome.test.assertTrue(expectedColors.length > 0); - chrome.test.assertTrue(!!callback); - - var video = document.getElementById('video'); - chrome.test.assertTrue(!!video); - - // If not yet done, plug the LocalMediaStream into the video element. - if (!this.stream || this.stream != stream) { - this.stream = stream; - video.srcObject = stream; - video.play(); - } - - // Create a canvas to sample frames from the video element. - if (!this.canvas) { - this.canvas = document.createElement("canvas"); - this.canvas.width = width; - this.canvas.height = height; - } - - // Only bother examining a video frame if the video timestamp has advanced. - var currentVideoTimestamp = video.currentTime; - if (!this.lastVideoTimestamp || - this.lastVideoTimestamp < currentVideoTimestamp) { - this.lastVideoTimestamp = currentVideoTimestamp; - - // Grab a snapshot of the center pixel of the video. - var ctx = this.canvas.getContext("2d"); - ctx.drawImage(video, 0, 0, width, height); - var imageData = ctx.getImageData(width / 2, height / 2, 1, 1); - var pixel = [imageData.data[0], imageData.data[1], imageData.data[2]]; - - // Does the pixel match one of the expected colors? - for (var i = 0, end = expectedColors.length; i < end; ++i) { - var color = expectedColors[i]; - if (Math.abs(pixel[0] - color[0]) <= colorDeviation && - Math.abs(pixel[1] - color[1]) <= colorDeviation && - Math.abs(pixel[2] - color[2]) <= colorDeviation) { - console.debug("Observed expected color RGB(" + color + - ") in the video as RGB(" + pixel + ")"); - setTimeout(function () { callback(i); }, 0); - return; - } - } - } - - // At this point, an expected color has not been observed. Schedule another - // check after a short delay. - setTimeout( - function () { - waitForAnExpectedColor(stream, expectedColors, colorDeviation, callback); - }, - 1000 / frameRate); -} - -// Stops all the tracks in a MediaStream. -function stopAllTracks(stream) { - var tracks = stream.getTracks(); - for (var i = 0, end = tracks.length; i < end; ++i) { - tracks[i].stop(); - } - chrome.test.assertFalse(stream.active); -}
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/repair_component_chip_test.js b/chrome/test/data/webui/chromeos/shimless_rma/repair_component_chip_test.js index 2d15e7f..67d8bf6 100644 --- a/chrome/test/data/webui/chromeos/shimless_rma/repair_component_chip_test.js +++ b/chrome/test/data/webui/chromeos/shimless_rma/repair_component_chip_test.js
@@ -5,7 +5,7 @@ import {RepairComponentChipElement} from 'chrome://shimless-rma/repair_component_chip.js'; import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; -import {flushTasks} from '../../test_util.m.js'; +import {flushTasks, isVisible} from '../../test_util.m.js'; export function repairComponentChipElementTest() { /** @type {?RepairComponentChipElement} */ @@ -61,17 +61,25 @@ test('ComponentToggleChecked', async () => { await initializeRepairComponentChip('cpu'); + const checkIcon = component.shadowRoot.querySelector('#checkedIcon'); + await clickChip(); assertTrue(component.checked); + assertTrue(isVisible(checkIcon)); await clickChip(); assertFalse(component.checked); + assertFalse(isVisible(checkIcon)); }); test('ComponentNoToggleOnDisabled', async () => { await initializeRepairComponentChip('cpu'); component.disabled = true; await flushTasks(); + + const infoIcon = component.shadowRoot.querySelector('#infoIcon'); + assertTrue(isVisible(infoIcon)); + await clickChip(); assertFalse(component.checked);
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn index c2edad8..e3cec78 100644 --- a/chrome/test/data/webui/settings/BUILD.gn +++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -99,7 +99,6 @@ #":reset_page_test", #":reset_profile_banner_test", #":route_tests", - ":safety_check_chrome_cleaner_test", ":safety_check_page_test", #":search_engines_page_test", @@ -166,6 +165,10 @@ #":zoom_levels_tests", ] + if (is_win) { + deps += [ ":safety_check_chrome_cleaner_test" ] + } + if (!is_chromeos_ash) { deps += [ ":fake_language_settings_private",
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js index 6f996b57..a932f21 100644 --- a/chrome/test/data/webui/settings/cr_settings_browsertest.js +++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -392,6 +392,7 @@ mocha.run(); }); +GEN('#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)'); // eslint-disable-next-line no-var var CrSettingsSafetyCheckChromeCleanerTest = class extends CrSettingsBrowserTest { @@ -410,7 +411,6 @@ } }; -GEN('#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)'); TEST_F('CrSettingsSafetyCheckChromeCleanerTest', 'All', function() { mocha.run(); });
diff --git a/chrome/test/data/webui/settings/reset_page_test.js b/chrome/test/data/webui/settings/reset_page_test.js index a3b25bd..49badf49 100644 --- a/chrome/test/data/webui/settings/reset_page_test.js +++ b/chrome/test/data/webui/settings/reset_page_test.js
@@ -29,7 +29,7 @@ setup(function() { resetPageBrowserProxy = new TestResetBrowserProxy(); - ResetBrowserProxyImpl.instance_ = resetPageBrowserProxy; + ResetBrowserProxyImpl.setInstance(resetPageBrowserProxy); PolymerTest.clearBody(); resetPage = document.createElement('settings-reset-page');
diff --git a/chrome/test/data/webui/settings/reset_profile_banner_test.js b/chrome/test/data/webui/settings/reset_profile_banner_test.js index 779f4b7..e6135ea 100644 --- a/chrome/test/data/webui/settings/reset_profile_banner_test.js +++ b/chrome/test/data/webui/settings/reset_profile_banner_test.js
@@ -14,7 +14,7 @@ setup(function() { browserProxy = new TestResetBrowserProxy(); - ResetBrowserProxyImpl.instance_ = browserProxy; + ResetBrowserProxyImpl.setInstance(browserProxy); PolymerTest.clearBody(); resetBanner = document.createElement('settings-reset-profile-banner'); document.body.appendChild(resetBanner);
diff --git a/chrome/test/data/webui/tab_search/tab_search_app_test.js b/chrome/test/data/webui/tab_search/tab_search_app_test.js index b931ca0..f42a5ce 100644 --- a/chrome/test/data/webui/tab_search/tab_search_app_test.js +++ b/chrome/test/data/webui/tab_search/tab_search_app_test.js
@@ -9,7 +9,7 @@ import {flushTasks, waitAfterNextRender} from '../../test_util.m.js'; import {generateSampleDataFromSiteNames, generateSampleRecentlyClosedTabs, generateSampleTabsFromSiteNames, SAMPLE_RECENTLY_CLOSED_DATA, SAMPLE_WINDOW_DATA, SAMPLE_WINDOW_HEIGHT, sampleData, sampleToken} from './tab_search_test_data.js'; -import {initLoadTimeDataWithDefaults} from './tab_search_test_helper.js'; +import {initLoadTimeDataWithDefaults, initProfileDataWithDefaults} from './tab_search_test_helper.js'; import {TestTabSearchApiProxy} from './test_tab_search_api_proxy.js'; suite('TabSearchAppTest', () => { @@ -38,16 +38,18 @@ } /** - * @param {ProfileData} sampleData + * @param {!Object} sampleData A mock data object containing relevant profile + * data for the test. * @param {Object=} loadTimeOverriddenData */ async function setupTest(sampleData, loadTimeOverriddenData) { - testProxy = new TestTabSearchApiProxy(); - testProxy.setProfileData(sampleData); - TabSearchApiProxyImpl.instance_ = testProxy; - + initProfileDataWithDefaults(/** @type {ProfileData} */ (sampleData)); initLoadTimeDataWithDefaults(loadTimeOverriddenData); + testProxy = new TestTabSearchApiProxy(); + testProxy.setProfileData(/** @type {ProfileData} */ (sampleData)); + TabSearchApiProxyImpl.instance_ = testProxy; + tabSearchApp = /** @type {!TabSearchAppElement} */ (document.createElement('tab-search-app')); @@ -73,7 +75,6 @@ }], recentlyClosedTabs: generateSampleRecentlyClosedTabs( 'Sample Tab', sampleTabCount, sampleToken(0, 1)), - tabGroups: [], recentlyClosedTabGroups: [{ sessionId: sampleSessionId, id: sampleToken(0, 1), @@ -83,8 +84,11 @@ lastActiveTime: {internalValue: BigInt(sampleTabCount + 1)}, lastActiveElapsedText: '' }], + recentlyClosedSectionExpanded: true, }, - {recentlyClosedDefaultItemDisplayCount: 5}); + { + recentlyClosedDefaultItemDisplayCount: 5, + }); tabSearchApp.shadowRoot.querySelector('#tabsList') .ensureAllDomItemsAvailable(); @@ -99,8 +103,7 @@ await setupTest({ windows: SAMPLE_WINDOW_DATA, recentlyClosedTabs: SAMPLE_RECENTLY_CLOSED_DATA, - tabGroups: [], - recentlyClosedTabGroups: [], + recentlyClosedSectionExpanded: true, }); tabSearchApp.shadowRoot.querySelector('#tabsList') .ensureAllDomItemsAvailable(); @@ -118,10 +121,11 @@ }], recentlyClosedTabs: generateSampleTabsFromSiteNames( ['RecentlyClosedTab1', 'RecentlyClosedTab2'], false), - tabGroups: [], - recentlyClosedTabGroups: [], + recentlyClosedSectionExpanded: true }, - {recentlyClosedDefaultItemDisplayCount: 1}); + { + recentlyClosedDefaultItemDisplayCount: 1, + }); assertEquals(2, queryRows().length); }); @@ -136,8 +140,7 @@ await setupTest({ windows: SAMPLE_WINDOW_DATA, recentlyClosedTabs: SAMPLE_RECENTLY_CLOSED_DATA, - tabGroups: [], - recentlyClosedTabGroups: [], + recentlyClosedSectionExpanded: true, }); const searchField = /** @type {!TabSearchSearchField} */ (tabSearchApp.shadowRoot.querySelector('#searchField')); @@ -164,7 +167,6 @@ }], recentlyClosedTabs: generateSampleRecentlyClosedTabs( 'Sample Tab', sampleTabCount, sampleToken(0, 1)), - tabGroups: [], recentlyClosedTabGroups: [({ sessionId: sampleSessionId, id: sampleToken(0, 1), @@ -174,8 +176,11 @@ lastActiveTime: {internalValue: BigInt(sampleTabCount + 1)}, lastActiveElapsedText: '' })], + recentlyClosedSectionExpanded: true, }, - {recentlyClosedDefaultItemDisplayCount: 5}); + { + recentlyClosedDefaultItemDisplayCount: 5, + }); const searchField = /** @type {!TabSearchSearchField} */ (tabSearchApp.shadowRoot.querySelector('#searchField')); @@ -207,9 +212,6 @@ }; await setupTest({ windows: [{active: true, tabs: [tabData]}], - recentlyClosedTabs: [], - tabGroups: [], - recentlyClosedTabGroups: [], }); const tabSearchItem = /** @type {!HTMLElement} */ @@ -250,8 +252,7 @@ }] }], recentlyClosedTabs: [tabData], - tabGroups: [], - recentlyClosedTabGroups: [], + recentlyClosedSectionExpanded: true }); let tabSearchItem = /** @type {!HTMLElement} */ @@ -287,9 +288,8 @@ url: {url: 'https://www.google.com'}, }] }], - recentlyClosedTabs: [], - tabGroups: [], recentlyClosedTabGroups: [tabGroupData], + recentlyClosedSectionExpanded: true }); let tabSearchItem = /** @type {!HTMLElement} */ @@ -306,9 +306,6 @@ test('Keyboard navigation on an empty list', async () => { await setupTest({ windows: [{active: true, tabs: []}], - recentlyClosedTabs: [], - tabGroups: [], - recentlyClosedTabGroups: [], }); const searchField = /** @type {!TabSearchSearchField} */ @@ -395,7 +392,7 @@ windows: [], recentlyClosedTabs: [], tabGroups: [], - recentlyClosedTabGroups: [] + recentlyClosedTabGroups: [], }); await flushTasks(); verifyTabIds(queryRows(), []); @@ -469,9 +466,6 @@ height: SAMPLE_WINDOW_HEIGHT, tabs: generateSampleTabsFromSiteNames(['OpenTab1'], true), }], - recentlyClosedTabs: [], - tabGroups: [], - recentlyClosedTabGroups: [], }); verifyTabIds(queryRows(), [1]); @@ -666,18 +660,12 @@ // Move active tab to the bottom of the list. await setupTest({ windows: [{active: true, height: SAMPLE_WINDOW_HEIGHT, tabs}], - recentlyClosedTabs: [], - tabGroups: [], - recentlyClosedTabGroups: [], }); verifyTabIds(queryRows(), [3, 1, 2]); await setupTest( { windows: [{active: true, height: SAMPLE_WINDOW_HEIGHT, tabs}], - recentlyClosedTabs: [], - tabGroups: [], - recentlyClosedTabGroups: [], }, {'moveActiveTabToBottom': false}); verifyTabIds(queryRows(), [2, 3, 1]); @@ -704,9 +692,7 @@ await setupTest({ windows: [{active: true, height: SAMPLE_WINDOW_HEIGHT, tabs}], - recentlyClosedTabs: [], tabGroups: [tabGroup], - recentlyClosedTabGroups: [], }); let tabSearchItem = /** @type {!HTMLElement} */ ( @@ -715,4 +701,38 @@ assertEquals('Google', tabSearchItem.data.tab.title); assertEquals('Search Engines', tabSearchItem.data.tabGroup.title); }); + + test('Recently closed section collapse and expand', async () => { + await setupTest({ + windows: [{ + active: true, + height: SAMPLE_WINDOW_HEIGHT, + tabs: generateSampleTabsFromSiteNames(['SampleOpenTab'], true), + }], + recentlyClosedTabs: SAMPLE_RECENTLY_CLOSED_DATA, + recentlyClosedSectionExpanded: true, + }); + assertEquals(3, queryRows().length); + + const recentlyClosedTitleItem = /** @type {!HTMLElement} */ + (tabSearchApp.shadowRoot.querySelector('#tabsList') + .querySelectorAll('.list-section-title')[1]); + assertNotEquals(null, recentlyClosedTitleItem); + + const recentlyClosedTitleExpandButton = /** @type {!HTMLElement} */ + (recentlyClosedTitleItem.querySelector('cr-expand-button')); + assertNotEquals(null, recentlyClosedTitleExpandButton); + + // Collapse the `Recently Closed` section and assert item count. + recentlyClosedTitleExpandButton.click(); + const [expanded] = + await testProxy.whenCalled('saveRecentlyClosedExpandedPref'); + assertFalse(expanded); + assertEquals(1, queryRows().length); + + // Expand the `Recently Closed` section and assert item count. + recentlyClosedTitleExpandButton.click(); + assertEquals(2, testProxy.getCallCount('saveRecentlyClosedExpandedPref')); + assertEquals(3, queryRows().length); + }); });
diff --git a/chrome/test/data/webui/tab_search/tab_search_test_helper.js b/chrome/test/data/webui/tab_search/tab_search_test_helper.js index de8f8c8..a112030a 100644 --- a/chrome/test/data/webui/tab_search/tab_search_test_helper.js +++ b/chrome/test/data/webui/tab_search/tab_search_test_helper.js
@@ -59,6 +59,24 @@ } /** + * Initialize a mock ProfileData object with defaults that would be set + * by the Mojo IPC logic. + * @param {!ProfileData} profileData + */ +export function initProfileDataWithDefaults(profileData) { + // Initialize undefined array properties + ['tabGroups', 'recentlyClosedTabs', 'recentlyClosedTabGroups'].forEach( + (arrayProp) => { + if (!profileData.hasOwnProperty(arrayProp)) { + profileData[arrayProp] = []; + } + }); + if (!profileData.hasOwnProperty('recentlyClosedSectionExpanded')) { + profileData.recentlyClosedSectionExpanded = false; + } +} + +/** * Initialize the loadTimeData with the provided data and defaults. * @param {Object=} loadTimeOverriddenData */
diff --git a/chrome/test/data/webui/tab_search/test_tab_search_api_proxy.js b/chrome/test/data/webui/tab_search/test_tab_search_api_proxy.js index e873010..9b188f4 100644 --- a/chrome/test/data/webui/tab_search/test_tab_search_api_proxy.js +++ b/chrome/test/data/webui/tab_search/test_tab_search_api_proxy.js
@@ -14,6 +14,7 @@ 'getProfileData', 'openRecentlyClosedEntry', 'switchToTab', + 'saveRecentlyClosedExpandedPref', 'showUI', ]); @@ -50,6 +51,11 @@ } /** @override */ + saveRecentlyClosedExpandedPref(expanded) { + this.methodCalled('saveRecentlyClosedExpandedPref', [expanded]); + } + + /** @override */ showUI() { this.methodCalled('showUI'); }
diff --git a/chrome/test/media_router/media_router_integration_browsertest.cc b/chrome/test/media_router/media_router_integration_browsertest.cc index 23182b66..be9a3d6 100644 --- a/chrome/test/media_router/media_router_integration_browsertest.cc +++ b/chrome/test/media_router/media_router_integration_browsertest.cc
@@ -105,6 +105,7 @@ void MediaRouterIntegrationBrowserTest::TearDownOnMainThread() { test_ui_->TearDown(); + test_provider_->TearDown(); InProcessBrowserTest::TearDownOnMainThread(); test_navigation_observer_.reset(); }
diff --git a/chrome/test/media_router/media_router_ui_for_test.cc b/chrome/test/media_router/media_router_ui_for_test.cc index d1f483b..e74e578 100644 --- a/chrome/test/media_router/media_router_ui_for_test.cc +++ b/chrome/test/media_router/media_router_ui_for_test.cc
@@ -257,7 +257,6 @@ const std::string& sink_name) const { CastDialogSinkButton* sink_button = GetSinkButton(sink_name); if (!sink_button->sink().route) { - NOTREACHED() << "Route not found for sink " << sink_name; return ""; } return sink_button->sink().route->media_route_id();
diff --git a/chromeos/components/eche_app_ui/eche_notification_click_handler.cc b/chromeos/components/eche_app_ui/eche_notification_click_handler.cc index 3683fbdf..41255a4 100644 --- a/chromeos/components/eche_app_ui/eche_notification_click_handler.cc +++ b/chromeos/components/eche_app_ui/eche_notification_click_handler.cc
@@ -16,28 +16,22 @@ LaunchEcheAppFunction launch_eche_app_function, CloseEcheAppFunction close_eche_app_function) : feature_status_provider_(feature_status_provider), - launch_eche_app_function_(std::move(launch_eche_app_function)), - close_eche_app_function_(std::move(close_eche_app_function)) { + launch_eche_app_function_(launch_eche_app_function), + close_eche_app_function_(close_eche_app_function) { handler_ = phone_hub_manager->GetNotificationInteractionHandler(); - DCHECK_NE(handler_, nullptr); feature_status_provider_->AddObserver(this); - if (handler_ != nullptr) { - if (IsClickable(feature_status_provider_->GetStatus())) { - handler_->AddNotificationClickHandler(this); - is_click_handler_set = true; - } else { - is_click_handler_set = false; - } + if (handler_ && IsClickable(feature_status_provider_->GetStatus())) { + handler_->AddNotificationClickHandler(this); + is_click_handler_set_ = true; } else { PA_LOG(INFO) << "No Phone Hub interaction handler to set Eche click handler"; - is_click_handler_set = false; } } EcheNotificationClickHandler::~EcheNotificationClickHandler() { feature_status_provider_->RemoveObserver(this); - if (is_click_handler_set && handler_ != nullptr) + if (is_click_handler_set_ && handler_) handler_->RemoveNotificationClickHandler(this); } @@ -48,22 +42,23 @@ } void EcheNotificationClickHandler::OnFeatureStatusChanged() { - if (handler_ != nullptr) { - bool clickable = IsClickable(feature_status_provider_->GetStatus()); - if (!is_click_handler_set && clickable) { - handler_->AddNotificationClickHandler(this); - is_click_handler_set = true; - } else if (is_click_handler_set && !clickable) { - handler_->RemoveNotificationClickHandler(this); - is_click_handler_set = false; - if (NeedClose(feature_status_provider_->GetStatus())) { - PA_LOG(INFO) << "Close Eche app window"; - close_eche_app_function_.Run(); - } - } - } else { + if (!handler_) { PA_LOG(INFO) << "No Phone Hub interaction handler to set Eche click handler"; + return; + } + + bool clickable = IsClickable(feature_status_provider_->GetStatus()); + if (!is_click_handler_set_ && clickable) { + handler_->AddNotificationClickHandler(this); + is_click_handler_set_ = true; + } else if (is_click_handler_set_ && !clickable) { + handler_->RemoveNotificationClickHandler(this); + is_click_handler_set_ = false; + if (NeedClose(feature_status_provider_->GetStatus())) { + PA_LOG(INFO) << "Close Eche app window"; + close_eche_app_function_.Run(); + } } }
diff --git a/chromeos/components/eche_app_ui/eche_notification_click_handler.h b/chromeos/components/eche_app_ui/eche_notification_click_handler.h index 7350b565..b8bbd4d7 100644 --- a/chromeos/components/eche_app_ui/eche_notification_click_handler.h +++ b/chromeos/components/eche_app_ui/eche_notification_click_handler.h
@@ -23,31 +23,32 @@ // Handles notification clicks originating from Phone Hub notifications. class EcheNotificationClickHandler : public phonehub::NotificationClickHandler, - FeatureStatusProvider::Observer { + public FeatureStatusProvider::Observer { public: using LaunchEcheAppFunction = - base::RepeatingCallback<void(int64_t, std::string)>; + base::RepeatingCallback<void(int64_t notification_id, + const std::string& package_name)>; using CloseEcheAppFunction = base::RepeatingCallback<void()>; - EcheNotificationClickHandler(phonehub::PhoneHubManager*, - FeatureStatusProvider*, - LaunchEcheAppFunction, - CloseEcheAppFunction); + EcheNotificationClickHandler(phonehub::PhoneHubManager* phone_hub_manager, + FeatureStatusProvider* feature_status_provider, + LaunchEcheAppFunction launch_eche_app_function, + CloseEcheAppFunction close_eche_app_function); ~EcheNotificationClickHandler() override; EcheNotificationClickHandler(const EcheNotificationClickHandler&) = delete; EcheNotificationClickHandler& operator=(const EcheNotificationClickHandler&) = delete; - // phonehub::NotificationClickHandler + // phonehub::NotificationClickHandler: void HandleNotificationClick( int64_t notification_id, const phonehub::Notification::AppMetadata& app_metadata) override; - private: // FeatureStatusProvider::Observer: void OnFeatureStatusChanged() override; + private: bool IsClickable(FeatureStatus status); bool NeedClose(FeatureStatus status); @@ -56,7 +57,7 @@ FeatureStatusProvider* feature_status_provider_; LaunchEcheAppFunction launch_eche_app_function_; CloseEcheAppFunction close_eche_app_function_; - bool is_click_handler_set; + bool is_click_handler_set_ = false; }; } // namespace eche_app
diff --git a/chromeos/components/eche_app_ui/eche_notification_click_handler_unittest.cc b/chromeos/components/eche_app_ui/eche_notification_click_handler_unittest.cc index 9cabf0e..9e9a593 100644 --- a/chromeos/components/eche_app_ui/eche_notification_click_handler_unittest.cc +++ b/chromeos/components/eche_app_ui/eche_notification_click_handler_unittest.cc
@@ -42,7 +42,7 @@ } void FakeLaunchEcheAppFunction(int64_t notification_id, - std::string package_name) { + const std::string& package_name) { // Do nothing. }
diff --git a/chromeos/crosapi/mojom/download_controller.mojom b/chromeos/crosapi/mojom/download_controller.mojom index f3c284e..2b5e5b3 100644 --- a/chromeos/crosapi/mojom/download_controller.mojom +++ b/chromeos/crosapi/mojom/download_controller.mojom
@@ -26,8 +26,8 @@ // // Next MinVersion: 2 // Next ID: 13 -[Stable] -struct DownloadEvent { +[Stable, RenamedFrom="crosapi.mojom.DownloadEvent"] +struct DownloadItem { DownloadState state@0; mojo_base.mojom.FilePath target_file_path@1; bool is_from_incognito_profile@2; @@ -85,11 +85,11 @@ // Called when a download is created. Comes from `content::DownloadManager`, // and will only pass events once that's initialized. - OnDownloadCreated@0(crosapi.mojom.DownloadEvent event); + OnDownloadCreated@0(crosapi.mojom.DownloadItem download); // Called whenever a `download::DownloadItem` is updated. - OnDownloadUpdated@1(crosapi.mojom.DownloadEvent event); + OnDownloadUpdated@1(crosapi.mojom.DownloadItem download); // Called when a `download::DownloadItem` is destroyed. - OnDownloadDestroyed@2(crosapi.mojom.DownloadEvent event); + OnDownloadDestroyed@2(crosapi.mojom.DownloadItem download); };
diff --git a/chromeos/crosapi/mojom/local_printer.mojom b/chromeos/crosapi/mojom/local_printer.mojom index 5db95f5e..8d2c65e 100644 --- a/chromeos/crosapi/mojom/local_printer.mojom +++ b/chromeos/crosapi/mojom/local_printer.mojom
@@ -284,6 +284,8 @@ GetEulaUrl@2(string printer_id) => (url.mojom.Url url); // Gets the current status of a printer. + // Note: this method queries the printer directly instead of via CUPS. + // It may take several seconds for the printer to respond. GetStatus@3(string printer_id) => (PrinterStatus status); // Opens a system print settings window.
diff --git a/components/autofill/content/browser/form_forest.cc b/components/autofill/content/browser/form_forest.cc index 9dfe0f1..d6010e7 100644 --- a/components/autofill/content/browser/form_forest.cc +++ b/components/autofill/content/browser/form_forest.cc
@@ -17,7 +17,7 @@ // AFCHECK(condition[, error_handler]) creates a crash dump and executes // |error_handler| if |condition| is false. -// TODO(crbug/1187842): Replace AFCHECK() with DCHECK(). +// TODO(https://crbug.com/1187842): Replace AFCHECK() with DCHECK(). #if DCHECK_IS_ON() #define AFCHECK(condition, ...) DCHECK(condition) #else @@ -36,27 +36,24 @@ namespace { -// Shall indicate if |rfh| is a fenced frame (crbug/1111084), to be implemented -// if and when fencedframes ship. +// Indicates if |rfh| is a fenced frame (https://crbug.com/1111084). // // We do not want to fill across the boundary of a fenced frame. Hence, a fenced // frame's FrameData must be disconnected (in terms of FormData::child_frames // and FrameData::parent_form) from its parent form. This is already guaranteed // because FormData::child_frames does not contain fenced frames. However, // UpdateTreeOfRendererForm() would still invoke TriggerReparse() to detect the -// parent form. IsFencedFrame() should be implemented to suppress this. +// parent form. HostedByFencedFrame() should be implemented to suppress this. // // We also do not want to fill across iframes with the disallowdocumentaccess -// attribute (crbug/961448). Since disallowdocumentaccess is currently not going -// to ship and supporting it requires significant additional work in -// UpdateTreeOfRendererForm() to remove FormData::child_frame and unset +// attribute (https://crbug.com/961448). Since disallowdocumentaccess is +// currently not going to ship and supporting it requires significant additional +// work in UpdateTreeOfRendererForm() to remove FormData::child_frame and unset // FrameData::parent_form for frames that disallow document access, there is no -// immediate need to support it. -// -// TODO(crbug/1201854): Implement if and when fencedframes ship, and/or extend -// it to disallowdocumentaccess if and when disallowdocumentaccess ships. -constexpr bool IsFencedFrame(content::RenderFrameHost* rfh) { - return false; +// immediate need to support it. See https://crrev.com/c/3055422 for a draft +// implementation. +bool HostedByFencedFrame(content::RenderFrameHost* rfh) { + return rfh->HostedByFencedFrame(); } } // namespace @@ -427,7 +424,7 @@ // UpdateTreeOfRendererForm() will be called for the parent form, whose // FormData::child_frames now include |frame|. content::RenderFrameHost* parent_rfh = rfh->GetParent(); - if (!frame->parent_form && parent_rfh && !IsFencedFrame(rfh)) { + if (!frame->parent_form && parent_rfh && !HostedByFencedFrame(rfh)) { LocalFrameToken parent_frame_token( LocalFrameToken(parent_rfh->GetFrameToken().value())); FrameData* parent_frame = GetFrameData(parent_frame_token);
diff --git a/components/autofill/content/browser/form_forest.h b/components/autofill/content/browser/form_forest.h index f414ab8..0297ef26 100644 --- a/components/autofill/content/browser/form_forest.h +++ b/components/autofill/content/browser/form_forest.h
@@ -220,14 +220,16 @@ // The |field_type_map| should contain the field types of the fields in // |browser_form|. // - // A field is *safe to fill* iff at least one of the following conditions - // holds: + // A field is *safe to fill* iff at least one of the conditions (1), (2), (3) + // and additionally condition (4) hold: // (1) The field's origin is the |triggered_origin|. // (2) The field's origin is the main origin and the field's type in // |field_type_map| is not sensitive (see is_sensitive_field_type()). // (3) The |triggered_origin| is main origin and the field's frame's // permissions policy allows shared-autofill. - // See below for a future additional necessary condition. + // (4) No frame on the shortest path from the field on which Autofill was + // triggered to the field in question, except perhaps the shallowest + // frame, is a fenced frame. // // The *origin of a field* is the origin of the frame that contains the // corresponding form-control element. @@ -237,15 +239,6 @@ // A frame's *permissions policy allows shared-autofill* if that frame is a // main frame or its embedding <iframe> element lists "shared-autofill" in // its "allow" attribute (see https://www.w3.org/TR/permissions-policy-1/). - // - // When fenced frames (crbug/1111084) or disallowdocumentaccess (crbug/961448) - // ships, a necessary requirement for a field to be *safe to fill* will be: - // (4) No frame on the shortest path from the field on from which Autofill was - // triggered to the field in question frame in the frame tree, except - // perhaps the shallowest frame, is a fenced frame or has the has the - // disallowdocumentaccess attribute. - // TODO(crbug/1201854): Implement fenced frames and/or disallowdocumentaccess - // if and when they ship. std::vector<FormData> GetRendererFormsOfBrowserForm( const FormData& browser_form, const url::Origin& triggered_origin,
diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc index 6ec8b0e..fb3151c 100644 --- a/components/autofill/core/browser/autofill_metrics.cc +++ b/components/autofill/core/browser/autofill_metrics.cc
@@ -1960,7 +1960,6 @@ void AutofillMetrics::LogStoredCreditCardMetrics( const std::vector<std::unique_ptr<CreditCard>>& local_cards, const std::vector<std::unique_ptr<CreditCard>>& server_cards, - size_t server_card_count_with_card_art_image, base::TimeDelta disused_data_threshold) { size_t num_local_cards = 0; size_t num_local_cards_with_nickname = 0; @@ -2086,11 +2085,6 @@ base::UmaHistogramCounts1000( "Autofill.StoredCreditCardCount.Server.WithVirtualCardMetadata", virtual_card_enabled_card_count); - - // Log the number of server cards that have valid customized art images. - base::UmaHistogramCounts1000( - "Autofill.StoredCreditCardCount.Server.WithCardArtImage", - server_card_count_with_card_art_image); } // static
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h index c211605..b34e9465 100644 --- a/components/autofill/core/browser/autofill_metrics.h +++ b/components/autofill/core/browser/autofill_metrics.h
@@ -1451,7 +1451,6 @@ static void LogStoredCreditCardMetrics( const std::vector<std::unique_ptr<CreditCard>>& local_cards, const std::vector<std::unique_ptr<CreditCard>>& server_cards, - size_t server_card_count_with_card_art_image, base::TimeDelta disused_data_threshold); // Logs metrics about the offer data associated with a profile. This should be
diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc index a483a7b2..72d3d79c 100644 --- a/components/autofill/core/browser/autofill_metrics_unittest.cc +++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
@@ -4105,10 +4105,10 @@ } } + // Log the stored credit card metrics for the cards configured above. base::HistogramTester histogram_tester; - AutofillMetrics::LogStoredCreditCardMetrics( - local_cards, server_cards, /*server_card_count_with_card_art_image=*/2, - base::TimeDelta::FromDays(180)); + AutofillMetrics::LogStoredCreditCardMetrics(local_cards, server_cards, + base::TimeDelta::FromDays(180)); // Validate the basic count metrics. histogram_tester.ExpectTotalCount("Autofill.StoredCreditCardCount", 1); @@ -4180,8 +4180,6 @@ "Autofill.DaysSinceLastUse.StoredCreditCard.Server.Unmasked", 30, 3); histogram_tester.ExpectBucketCount( "Autofill.DaysSinceLastUse.StoredCreditCard.Server.Unmasked", 200, 3); - histogram_tester.ExpectBucketCount( - "Autofill.StoredCreditCardCount.Server.WithCardArtImage", 2, 1); } TEST_F(AutofillMetricsTest, LogStoredCreditCardWithNicknameMetrics) { @@ -4219,9 +4217,8 @@ // Log the stored credit card metrics for the cards configured above. base::HistogramTester histogram_tester; - AutofillMetrics::LogStoredCreditCardMetrics( - local_cards, server_cards, /*server_card_count_with_card_art_image=*/0, - base::TimeDelta::FromDays(180)); + AutofillMetrics::LogStoredCreditCardMetrics(local_cards, server_cards, + base::TimeDelta::FromDays(180)); // Validate the count metrics. histogram_tester.ExpectTotalCount("Autofill.StoredCreditCardCount", 1);
diff --git a/components/autofill/core/browser/autofill_suggestion_generator.cc b/components/autofill/core/browser/autofill_suggestion_generator.cc index e256070..723b9d21 100644 --- a/components/autofill/core/browser/autofill_suggestion_generator.cc +++ b/components/autofill/core/browser/autofill_suggestion_generator.cc
@@ -176,17 +176,16 @@ suggestion.match = prefix_matched_suggestion ? Suggestion::PREFIX_MATCH : Suggestion::SUBSTRING_MATCH; - GURL card_art_url_for_virtual_card_option; + std::string server_id_for_virtual_card_option; if (virtual_card_option && credit_card.record_type() == CreditCard::MASKED_SERVER_CARD) { - card_art_url_for_virtual_card_option = credit_card.card_art_url(); + server_id_for_virtual_card_option = credit_card.server_id(); } else if (virtual_card_option && credit_card.record_type() == CreditCard::LOCAL_CARD) { const CreditCard* server_duplicate_card = GetServerCardForLocalCard(&credit_card); DCHECK(server_duplicate_card); - card_art_url_for_virtual_card_option = - server_duplicate_card->card_art_url(); + server_id_for_virtual_card_option = server_duplicate_card->server_id(); backend_id = server_duplicate_card->guid(); } suggestion.backend_id = backend_id; @@ -252,12 +251,9 @@ feature_engagement::kIPHKeyboardAccessoryPaymentVirtualCardFeature.name; #endif // OS_ANDROID + // TODO(crbug.com/1196021): Populate custom_icon with card art if available + // (use server_id_for_virtual_card_option). suggestion.frontend_id = POPUP_ITEM_ID_VIRTUAL_CREDIT_CARD_ENTRY; - - gfx::Image* image = personal_data_->GetCreditCardArtImageForUrl( - card_art_url_for_virtual_card_option); - if (image) - suggestion.custom_icon = *image; } return suggestion;
diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc index 7c34877..47e4bff 100644 --- a/components/autofill/core/browser/browser_autofill_manager.cc +++ b/components/autofill/core/browser/browser_autofill_manager.cc
@@ -1484,10 +1484,9 @@ // If synced down card is a virtual card, let the client know so that it can // show the UI to help user to manually fill the form, if needed. if (credit_card->record_type() == CreditCard::VIRTUAL_CARD) { - gfx::Image* card_art_image = personal_data_->GetCreditCardArtImageForUrl( - credit_card->card_art_url()); - client()->OnVirtualCardDataAvailable( - credit_card, cvc, card_art_image ? *card_art_image : gfx::Image()); + // TODO(crbug.com/1196021): Pass in real card image. + client()->OnVirtualCardDataAvailable(credit_card, cvc, + /*card_image=*/gfx::Image()); } FillCreditCardForm(credit_card_query_id_, credit_card_form_,
diff --git a/components/autofill/core/browser/data_model/credit_card_art_image.cc b/components/autofill/core/browser/data_model/credit_card_art_image.cc index 97725d8..e63ac3a8 100644 --- a/components/autofill/core/browser/data_model/credit_card_art_image.cc +++ b/components/autofill/core/browser/data_model/credit_card_art_image.cc
@@ -8,8 +8,13 @@ CreditCardArtImage::CreditCardArtImage() = default; -CreditCardArtImage::CreditCardArtImage(const CreditCardArtImage& other) = - default; +CreditCardArtImage::CreditCardArtImage(const std::string& id, + int64_t instrument_id, + std::vector<uint8_t> card_art_image) { + this->id = id; + this->instrument_id = instrument_id; + this->card_art_image = std::move(card_art_image); +} CreditCardArtImage::~CreditCardArtImage() = default;
diff --git a/components/autofill/core/browser/data_model/credit_card_art_image.h b/components/autofill/core/browser/data_model/credit_card_art_image.h index 7f5fc595..4ae25d2 100644 --- a/components/autofill/core/browser/data_model/credit_card_art_image.h +++ b/components/autofill/core/browser/data_model/credit_card_art_image.h
@@ -5,23 +5,30 @@ #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_CREDIT_CARD_ART_IMAGE_H_ #define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_CREDIT_CARD_ART_IMAGE_H_ -#include "ui/gfx/image/image.h" -#include "url/gurl.h" +#include <string> +#include <vector> namespace autofill { -// Represents an rich card art image for the card art url. +// Represents an rich card art image for the server credit card. struct CreditCardArtImage { public: CreditCardArtImage(); - CreditCardArtImage(const CreditCardArtImage& other); + CreditCardArtImage(const std::string& id, + int64_t instrument_id, + std::vector<uint8_t> card_art_image); ~CreditCardArtImage(); + CreditCardArtImage(const CreditCardArtImage&) = delete; + CreditCardArtImage& operator=(const CreditCardArtImage&) = delete; - // The url to fetch the card art image. - GURL card_art_url; + // The server id for the related credit card. + std::string id; - // The customized card art image. - gfx::Image card_art_image; + // The instrument id for the related credit card. + int64_t instrument_id; + + // The customized card art image. Stored as an raw PNG-encoded data. + std::vector<uint8_t> card_art_image; }; } // namespace autofill
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc index 7fa27cc..8bdb9da 100644 --- a/components/autofill/core/browser/personal_data_manager.cc +++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -34,7 +34,6 @@ #include "components/autofill/core/browser/autofill_metrics.h" #include "components/autofill/core/browser/autofill_profile_save_strike_database.h" #include "components/autofill/core/browser/data_model/autofill_profile_comparator.h" -#include "components/autofill/core/browser/data_model/credit_card_art_image.h" #include "components/autofill/core/browser/data_model/phone_number.h" #include "components/autofill/core/browser/form_structure.h" #include "components/autofill/core/browser/geo/address_i18n.h" @@ -153,9 +152,6 @@ explicit PersonalDatabaseHelper(PersonalDataManager* personal_data_manager) : personal_data_manager_(personal_data_manager) {} - PersonalDatabaseHelper(const PersonalDatabaseHelper&) = delete; - PersonalDatabaseHelper& operator=(const PersonalDatabaseHelper&) = delete; - void Init(scoped_refptr<AutofillWebDataService> profile_database, scoped_refptr<AutofillWebDataService> account_database) { profile_database_ = profile_database; @@ -256,6 +252,8 @@ scoped_refptr<AutofillWebDataService> server_database_; PersonalDataManager* personal_data_manager_; + + DISALLOW_COPY_AND_ASSIGN(PersonalDatabaseHelper); }; PersonalDataManager::PersonalDataManager( @@ -480,7 +478,6 @@ ReceiveLoadedDbValues(h, result.get(), &pending_server_creditcards_query_, &server_credit_cards_); - OnServerCreditCardsRefreshed(); } break; case AUTOFILL_CLOUDTOKEN_RESULT: @@ -964,7 +961,6 @@ payments_customer_data_.reset(); server_credit_card_cloud_token_data_.clear(); autofill_offer_data_.clear(); - credit_card_art_images_.clear(); } void PersonalDataManager::ClearAllLocalData() { @@ -1231,41 +1227,6 @@ return result; } -std::vector<const AutofillOfferData*> -PersonalDataManager::GetAutofillPromoCodeOffers() const { - if (!IsAutofillWalletImportEnabled()) - return {}; - - std::vector<const AutofillOfferData*> result; - result.reserve(autofill_offer_data_.size()); - for (const auto& data : autofill_offer_data_) { - if (data.get()->IsPromoCodeOffer()) - result.push_back(data.get()); - } - return result; -} - -gfx::Image* PersonalDataManager::GetCreditCardArtImageForUrl( - const GURL& card_art_url) const { - if (!IsAutofillWalletImportEnabled()) - return nullptr; - - if (!card_art_url.is_valid()) - return nullptr; - - auto images_iterator = credit_card_art_images_.find(card_art_url); - - // Found an image and return it. - if (images_iterator != credit_card_art_images_.end()) { - gfx::Image* image = images_iterator->second.get(); - if (!image->IsEmpty()) - return image; - } - - FetchImagesForUrls({card_art_url}); - return nullptr; -} - void PersonalDataManager::Refresh() { LoadProfiles(); LoadCreditCards(); @@ -1543,16 +1504,6 @@ return empty_validity_map; } -void PersonalDataManager::FetchImagesForUrls( - const std::vector<GURL>& updated_urls) const { - if (!image_fetcher_) - return; - - image_fetcher_->FetchImagesForUrls( - updated_urls, base::BindOnce(&PersonalDataManager::OnCardArtImagesFetched, - weak_factory_.GetWeakPtr())); -} - const std::string& PersonalDataManager::GetDefaultCountryCodeForNewAddress() const { if (default_country_code_.empty()) @@ -1965,8 +1916,7 @@ void PersonalDataManager::LogStoredCreditCardMetrics() const { if (!has_logged_stored_credit_card_metrics_) { AutofillMetrics::LogStoredCreditCardMetrics( - local_credit_cards_, server_credit_cards_, - GetServerCardWithArtImageCount(), kDisusedDataModelTimeDelta); + local_credit_cards_, server_credit_cards_, kDisusedDataModelTimeDelta); // Only log this info once per chrome user profile load. has_logged_stored_credit_card_metrics_ = true; @@ -2149,16 +2099,6 @@ OnProfileChangeDone(guid); } -void PersonalDataManager::OnCardArtImagesFetched( - std::vector<std::unique_ptr<CreditCardArtImage>> art_images) { - for (auto& art_image : art_images) { - if (!art_image->card_art_image.IsEmpty()) { - credit_card_art_images_[art_image->card_art_url] = - std::make_unique<gfx::Image>(art_image->card_art_image); - } - } -} - void PersonalDataManager::LogServerCardLinkClicked() const { AutofillMetrics::LogServerCardLinkClicked(GetSyncSigninState()); } @@ -2435,34 +2375,4 @@ return database_helper_->GetLocalDatabase(); } -void PersonalDataManager::OnServerCreditCardsRefreshed() { - ProcessVirtualCardMetadataChanges(); -} - -void PersonalDataManager::ProcessVirtualCardMetadataChanges() { - std::vector<GURL> updated_urls; - for (auto& card : server_credit_cards_) { - // If this card is not enrolled for virtual cards or the url is not valid, - // continue. - if (card->virtual_card_enrollment_state() != CreditCard::ENROLLED || - !card->card_art_url().is_valid()) { - continue; - } - - // Otherwise try to find the old entry with the same url. - auto it = credit_card_art_images_.find(card->card_art_url()); - // No existing entry found. - if (it == credit_card_art_images_.end()) - updated_urls.emplace_back(card->card_art_url()); - } - if (!updated_urls.empty()) - FetchImagesForUrls(updated_urls); -} - -size_t PersonalDataManager::GetServerCardWithArtImageCount() const { - return base::ranges::count_if( - server_credit_cards_.begin(), server_credit_cards_.end(), - [](const auto& card) { return card->card_art_url().is_valid(); }); -} - } // namespace autofill
diff --git a/components/autofill/core/browser/personal_data_manager.h b/components/autofill/core/browser/personal_data_manager.h index 178e47d..5c55e2e 100644 --- a/components/autofill/core/browser/personal_data_manager.h +++ b/components/autofill/core/browser/personal_data_manager.h
@@ -15,6 +15,7 @@ #include <vector> #include "base/gtest_prod_util.h" +#include "base/macros.h" #include "base/observer_list.h" #include "base/scoped_observation.h" #include "build/build_config.h" @@ -54,7 +55,6 @@ namespace autofill { class AutofillImageFetcher; class AutofillInteractiveTest; -struct CreditCardArtImage; class PersonalDataManagerObserver; class PersonalDataManagerFactory; class PersonalDatabaseHelper; @@ -85,8 +85,6 @@ explicit PersonalDataManager(const std::string& app_locale); PersonalDataManager(const std::string& app_locale, const std::string& country_code); - PersonalDataManager(const PersonalDataManager&) = delete; - PersonalDataManager& operator=(const PersonalDataManager&) = delete; ~PersonalDataManager() override; // Kicks off asynchronous loading of profiles and credit cards. @@ -288,13 +286,6 @@ // Returns autofill offer data, including card-linked and promo code offers. virtual std::vector<AutofillOfferData*> GetAutofillOffers() const; - // Returns autofill offer data, but only for promo code offers. - std::vector<const AutofillOfferData*> GetAutofillPromoCodeOffers() const; - - // Returns the customized credit card art image for the |card_art_url|. - virtual gfx::Image* GetCreditCardArtImageForUrl( - const GURL& card_art_url) const; - // Updates the validity states of |profiles| according to server validity map. void UpdateProfilesServerValidityMapsIfNeeded( const std::vector<AutofillProfile*>& profiles); @@ -481,8 +472,6 @@ AddCreditCard_CrazyCharacters); FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, AddCreditCard_Invalid); FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, - AddAndGetCreditCardArtImage); - FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, DedupeProfiles_ProfilesToDelete); FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, DedupeProfiles_GuidsMergeMap); @@ -547,7 +536,6 @@ RequestProfileServerValidity); FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, GetProfileSuggestions_Validity); - FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, LogStoredCreditCardMetrics); friend class autofill::AutofillInteractiveTest; friend class autofill::PersonalDataManagerCleaner; @@ -641,9 +629,6 @@ // Get the profiles fields validity map by |guid|. const ProfileValidityMap& GetProfileValidityByGUID(const std::string& guid); - // Asks AutofillImageFetcher to fetch images. - virtual void FetchImagesForUrls(const std::vector<GURL>& updated_urls) const; - // Decides which database type to use for server and local cards. std::unique_ptr<PersonalDatabaseHelper> database_helper_; @@ -671,13 +656,9 @@ std::vector<std::unique_ptr<CreditCardCloudTokenData>> server_credit_card_cloud_token_data_; - // Autofill offer data, including card-linked offers for the user's credit - // cards as well as promo code offers. + // Offer data for user's credit cards. std::vector<std::unique_ptr<AutofillOfferData>> autofill_offer_data_; - // The customized card art images for the URL. - std::map<GURL, std::unique_ptr<gfx::Image>> credit_card_art_images_; - // When the manager makes a request from WebDataServiceBase, the database // is queried on another sequence, we record the query handle until we // get called back. We store handles for both profile and credit card queries @@ -766,11 +747,6 @@ // Triggered when a profile is added/updated/removed on db. void OnAutofillProfileChanged(const AutofillProfileDeepChange& change); - // Triggered when all the card art image fetches have been completed, - // regardless of whether all of them succeeded. - void OnCardArtImagesFetched( - std::vector<std::unique_ptr<CreditCardArtImage>> art_images); - // Look at the next profile change for profile with guid = |guid|, and handle // it. void HandleNextProfileChange(const std::string& guid); @@ -798,17 +774,6 @@ // Returns the database that is used for storing local data. scoped_refptr<AutofillWebDataService> GetLocalDatabase(); - // Invoked when server credit card cache is refreshed. - void OnServerCreditCardsRefreshed(); - - // Checks whether any virtual card metadata for server cards is new and makes - // corresponding changes. - void ProcessVirtualCardMetadataChanges(); - - // Returns the number of server credit cards that have a valid credit card art - // image. - size_t GetServerCardWithArtImageCount() const; - // Stores the |app_locale| supplied on construction. const std::string app_locale_; @@ -895,6 +860,8 @@ history_service_observation_{this}; base::WeakPtrFactory<PersonalDataManager> weak_factory_{this}; + + DISALLOW_COPY_AND_ASSIGN(PersonalDataManager); }; } // namespace autofill
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc index 2452cfe..2ad385ee 100644 --- a/components/autofill/core/browser/personal_data_manager_unittest.cc +++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -39,7 +39,6 @@ #include "components/autofill/core/browser/data_model/autofill_profile.h" #include "components/autofill/core/browser/data_model/autofill_profile_comparator.h" #include "components/autofill/core/browser/data_model/autofill_structured_address_utils.h" -#include "components/autofill/core/browser/data_model/credit_card_art_image.h" #include "components/autofill/core/browser/field_types.h" #include "components/autofill/core/browser/form_structure.h" #include "components/autofill/core/browser/personal_data_manager_observer.h" @@ -71,7 +70,6 @@ #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -#include "ui/gfx/image/image_unittest_util.h" namespace autofill { @@ -115,11 +113,6 @@ void OnValidatedPDM(const AutofillProfile* profile) { PersonalDataManager::OnValidated(profile); } - - MOCK_METHOD(void, - FetchImagesForUrls, - ((const std::vector<GURL>& updated_urls)), - (const override)); }; template <typename T> @@ -569,11 +562,6 @@ WaitForOnPersonalDataChanged(); } - void AddOfferDataForTest(AutofillOfferData offer_data) { - personal_data_->AddOfferDataForTest( - std::make_unique<AutofillOfferData>(offer_data)); - } - std::unique_ptr<PersonalDataManager> personal_data_; }; @@ -723,24 +711,6 @@ prefs::kAutofillLastVersionValidated); } - void AddOfferDataForTest(AutofillOfferData offer_data) { - personal_data_->AddOfferDataForTest( - std::make_unique<AutofillOfferData>(offer_data)); - } - - // Verifies the credit card art image fetching should begin. - void WaitForFetchImagesForUrls(const std::vector<GURL>& updated_urls) { - base::RunLoop run_loop; - EXPECT_CALL(personal_data_observer_, OnPersonalDataFinishedProfileTasks()) - .Times(testing::AnyNumber()); - EXPECT_CALL(personal_data_observer_, OnPersonalDataChanged()) - .Times(testing::AnyNumber()); - EXPECT_CALL(*personal_data_, FetchImagesForUrls(updated_urls)) - .Times(1) - .WillOnce(QuitMessageLoop(&run_loop)); - run_loop.Run(); - } - std::unique_ptr<PersonalDataManagerMock> personal_data_; }; @@ -1305,51 +1275,6 @@ ASSERT_EQ(card, *personal_data_->GetCreditCards()[0]); } -#if !defined(OS_IOS) -TEST_F(PersonalDataManagerTest, AddAndGetCreditCardArtImage) { - gfx::Image expected_image = gfx::test::CreateImage(32, 20); - std::unique_ptr<CreditCardArtImage> credit_card_art_image = - std::make_unique<CreditCardArtImage>(); - credit_card_art_image->card_art_url = GURL("https://www.example.com"); - credit_card_art_image->card_art_image = expected_image; - std::vector<std::unique_ptr<CreditCardArtImage>> images; - images.emplace_back(std::move(credit_card_art_image)); - - personal_data_->OnCardArtImagesFetched(std::move(images)); - - gfx::Image* actual_image = personal_data_->GetCreditCardArtImageForUrl( - GURL("https://www.example.com")); - ASSERT_TRUE(actual_image); - EXPECT_TRUE(gfx::test::AreImagesEqual(expected_image, *actual_image)); -} - -TEST_F(PersonalDataManagerMockTest, ProcessVirtualCardMetadataChanges) { - CreditCard card = test::GetFullServerCard(); - card.set_virtual_card_enrollment_state( - CreditCard::VirtualCardEnrollmentState::UNENROLLED); - card.set_server_id("card_server_id"); - personal_data_->AddFullServerCreditCard(card); - WaitForOnPersonalDataChanged(); - - card.set_virtual_card_enrollment_state( - CreditCard::VirtualCardEnrollmentState::ENROLLED); - card.set_server_id("card_server_id"); - card.set_card_art_url(GURL("https://www.example.com/card1")); - std::vector<GURL> updated_urls; - updated_urls.emplace_back(GURL("https://www.example.com/card1")); - - personal_data_->AddFullServerCreditCard(card); - WaitForFetchImagesForUrls(updated_urls); - - card.set_card_art_url(GURL("https://www.example.com/card2")); - updated_urls.clear(); - updated_urls.emplace_back(GURL("https://www.example.com/card2")); - - personal_data_->AddFullServerCreditCard(card); - WaitForFetchImagesForUrls(updated_urls); -} -#endif - TEST_F(PersonalDataManagerTest, UpdateUnverifiedProfilesAndCreditCards) { // Start with unverified data. AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/"); @@ -2016,61 +1941,6 @@ EXPECT_EQ(1U, personal_data_->GetCreditCards().size()); } -// Tests that GetAutofillOffers returns all available offers. -TEST_F(PersonalDataManagerTest, GetAutofillOffers) { - // Add two card-linked offers and one promo code offer. - AddOfferDataForTest(test::GetCardLinkedOfferData1()); - AddOfferDataForTest(test::GetCardLinkedOfferData2()); - AddOfferDataForTest(test::GetPromoCodeOfferData()); - - // Should return all three. - EXPECT_EQ(3U, personal_data_->GetAutofillOffers().size()); -} - -// Tests that GetAutofillOffers does not return any offers if -// |IsAutofillWalletImportEnabled()| returns |false|. -TEST_F(PersonalDataManagerMockTest, GetAutofillOffers_WalletImportDisabled) { - // Add a card-linked offer and a promo code offer. - AddOfferDataForTest(test::GetCardLinkedOfferData1()); - AddOfferDataForTest(test::GetPromoCodeOfferData()); - - base::RunLoop run_loop; - EXPECT_CALL(personal_data_observer_, OnPersonalDataFinishedProfileTasks()) - .WillOnce(QuitMessageLoop(&run_loop)); - prefs::SetPaymentsIntegrationEnabled(prefs_.get(), false); - - // Should return neither of them as the wallet import pref is disabled. - EXPECT_EQ(0U, personal_data_->GetAutofillOffers().size()); -} - -// Tests that GetAutofillPromoCodeOffers returns available promo code offers -// only. -TEST_F(PersonalDataManagerTest, GetAutofillPromoCodeOffers) { - // Add two card-linked offers and one promo code offer. - AddOfferDataForTest(test::GetCardLinkedOfferData1()); - AddOfferDataForTest(test::GetCardLinkedOfferData2()); - AddOfferDataForTest(test::GetPromoCodeOfferData()); - - // Only the promo code offer should be returned. - EXPECT_EQ(1U, personal_data_->GetAutofillPromoCodeOffers().size()); -} - -// Tests that GetAutofillPromoCodeOffers does not return any promo code offers -// if |IsAutofillWalletImportEnabled()| returns |false|. -TEST_F(PersonalDataManagerMockTest, - GetAutofillPromoCodeOffers_WalletImportDisabled) { - // Add a promo code offer. - AddOfferDataForTest(test::GetPromoCodeOfferData()); - - base::RunLoop run_loop; - EXPECT_CALL(personal_data_observer_, OnPersonalDataFinishedProfileTasks()) - .WillOnce(QuitMessageLoop(&run_loop)); - prefs::SetPaymentsIntegrationEnabled(prefs_.get(), false); - - // Should not return the offer as the wallet import pref is disabled. - EXPECT_EQ(0U, personal_data_->GetAutofillOffers().size()); -} - TEST_F(PersonalDataManagerTest, DefaultCountryCodeIsCached) { // The return value should always be some country code, no matter what. std::string default_country = @@ -6092,16 +5962,9 @@ } } - // Sets the virtual card enrollment state for the first three server cards. + // Sets the virtual card enrollment state for the first card. server_cards[0].set_virtual_card_enrollment_state( CreditCard::VirtualCardEnrollmentState::ENROLLED); - server_cards[0].set_card_art_url(GURL("https://www.example.com/image1")); - server_cards[1].set_virtual_card_enrollment_state( - CreditCard::VirtualCardEnrollmentState::ENROLLED); - server_cards[1].set_card_art_url(GURL("https://www.example.com/image1")); - server_cards[2].set_virtual_card_enrollment_state( - CreditCard::VirtualCardEnrollmentState::ENROLLED); - server_cards[2].set_card_art_url(GURL("https://www.example.com/image2")); SetServerCards(server_cards); @@ -6120,8 +5983,6 @@ base::HistogramTester histogram_tester; ResetPersonalDataManager(USER_MODE_NORMAL); - EXPECT_EQ(personal_data_->GetServerCardWithArtImageCount(), 3U); - ASSERT_EQ(6U, personal_data_->GetCreditCards().size()); // Validate the basic count metrics for both local and server cards. Deep @@ -6145,8 +6006,6 @@ "Autofill.StoredCreditCardCount.Server.Unmasked", 2, 1); histogram_tester.ExpectTotalCount( "Autofill.StoredCreditCardCount.Server.WithVirtualCardMetadata", 1); - histogram_tester.ExpectBucketCount( - "Autofill.StoredCreditCardCount.Server.WithCardArtImage", 3, 1); } TEST_F(PersonalDataManagerTest, CreateDataForTest) {
diff --git a/components/autofill/core/browser/ui/autofill_image_fetcher.cc b/components/autofill/core/browser/ui/autofill_image_fetcher.cc index 3310fa1..e362912 100644 --- a/components/autofill/core/browser/ui/autofill_image_fetcher.cc +++ b/components/autofill/core/browser/ui/autofill_image_fetcher.cc
@@ -5,8 +5,6 @@ #include "components/autofill/core/browser/ui/autofill_image_fetcher.h" #include "components/autofill/core/browser/autofill_metrics.h" -#include "components/autofill/core/browser/data_model/credit_card_art_image.h" -#include "components/autofill/core/common/autofill_payments_features.h" #include "components/image_fetcher/core/image_decoder.h" #include "components/image_fetcher/core/image_fetcher_impl.h" #include "components/image_fetcher/core/request_metadata.h" @@ -54,18 +52,14 @@ : pending_request_count_(image_count), all_fetches_complete_callback_(std::move(callback)) {} -void ImageFetchOperation::ImageFetched(const GURL& card_art_url, +void ImageFetchOperation::ImageFetched(const std::string& card_server_id, const gfx::Image& card_art_image) { AutofillMetrics::LogImageFetchResult(/*succeeded=*/!card_art_image.IsEmpty()); + pending_request_count_--; - if (!card_art_image.IsEmpty()) { - auto credit_card_art_image = std::make_unique<CreditCardArtImage>(); - credit_card_art_image->card_art_url = card_art_url; - credit_card_art_image->card_art_image = card_art_image; - - fetched_card_art_images_.emplace_back(std::move(credit_card_art_image)); - } + if (!card_art_image.IsEmpty()) + fetched_card_art_images_[card_server_id] = card_art_image; if (pending_request_count_ == 0U) { std::move(all_fetches_complete_callback_) @@ -87,7 +81,7 @@ AutofillImageFetcher::~AutofillImageFetcher() = default; void AutofillImageFetcher::FetchImagesForUrls( - const std::vector<GURL>& card_art_urls, + const std::map<std::string, GURL>& card_server_ids_and_art_urls, CardArtImagesFetchedCallback callback) { if (!image_fetcher_) { std::move(callback).Run({}); @@ -95,39 +89,40 @@ } auto image_fetcher_operation = base::MakeRefCounted<ImageFetchOperation>( - card_art_urls.size(), std::move(callback)); + card_server_ids_and_art_urls.size(), std::move(callback)); - for (const auto& card_art_url : card_art_urls) - FetchImageForUrl(image_fetcher_operation, card_art_url); + for (const auto& card_server_id_and_art_url : card_server_ids_and_art_urls) { + FetchImageForUrl(image_fetcher_operation, card_server_id_and_art_url.first, + card_server_id_and_art_url.second); + } } void AutofillImageFetcher::FetchImageForUrl( const scoped_refptr<ImageFetchOperation>& operation, + const std::string& card_server_id, const GURL& card_art_url) { if (!card_art_url.is_valid()) { - OnCardArtImageFetched(operation, card_art_url, gfx::Image(), + OnCardArtImageFetched(operation, card_server_id, gfx::Image(), image_fetcher::RequestMetadata()); return; } image_fetcher::ImageFetcherParams params(kCardArtImageTrafficAnnotation, kUmaClientName); - params.set_hold_for_expiration_interval(base::TimeDelta::FromMinutes( - features::kAutofillImageFetcherDiskCacheExpirationInMinutes.Get())); image_fetcher_->FetchImage( card_art_url, base::BindOnce(&AutofillImageFetcher::OnCardArtImageFetched, operation, - card_art_url), + card_server_id), std::move(params)); } // static void AutofillImageFetcher::OnCardArtImageFetched( const scoped_refptr<ImageFetchOperation>& operation, - const GURL& card_art_url, + const std::string& card_server_id, const gfx::Image& card_art_image, const image_fetcher::RequestMetadata& metadata) { - operation->ImageFetched(card_art_url, card_art_image); + operation->ImageFetched(card_server_id, card_art_image); } } // namespace autofill
diff --git a/components/autofill/core/browser/ui/autofill_image_fetcher.h b/components/autofill/core/browser/ui/autofill_image_fetcher.h index 863c8da..4f269fb 100644 --- a/components/autofill/core/browser/ui/autofill_image_fetcher.h +++ b/components/autofill/core/browser/ui/autofill_image_fetcher.h
@@ -8,7 +8,6 @@ #include <map> #include <memory> #include <string> -#include <vector> #include "base/callback.h" #include "base/memory/scoped_refptr.h" @@ -32,10 +31,8 @@ namespace autofill { -struct CreditCardArtImage; - using CardArtImagesFetchedCallback = base::OnceCallback<void( - std::vector<std::unique_ptr<CreditCardArtImage>> card_art_images)>; + const std::map<std::string, gfx::Image>& card_art_images)>; // The image fetching operation instance. It tracks the state of the paired // request. Will be created when the AutofillImageFetcher receives a request to @@ -48,7 +45,8 @@ ImageFetchOperation& operator=(const ImageFetchOperation&) = delete; // Invoked when an image fetch is complete and data is returned. - void ImageFetched(const GURL& card_art_url, const gfx::Image& card_art_image); + void ImageFetched(const std::string& card_server_id, + const gfx::Image& card_art_image); private: friend class base::RefCounted<ImageFetchOperation>; @@ -58,8 +56,8 @@ // The number of images that should be fetched before completion. size_t pending_request_count_ = 0; - // The vector of the fetched CreditCardArtImages. - std::vector<std::unique_ptr<CreditCardArtImage>> fetched_card_art_images_; + // The mapping of each credit card's server id to its card art image. + std::map<std::string, gfx::Image> fetched_card_art_images_; // Callback function to be invoked when fetching is finished. CardArtImagesFetchedCallback all_fetches_complete_callback_; @@ -76,19 +74,21 @@ AutofillImageFetcher& operator=(const AutofillImageFetcher&) = delete; // Once invoked, the |image_fetcher_| will start fetching images based on the - // urls. |card_art_urls| is a vector with credit cards' card art image url. - // |callback| will be invoked when all the requests have been completed. The - // callback will receive a vector of CreditCardArtImage, for (only) those - // cards for which the AutofillImageFetcher could successfully fetch the - // image. - void FetchImagesForUrls(const std::vector<GURL>& card_art_urls, - CardArtImagesFetchedCallback callback); + // urls. |card_server_ids_and_art_urls| is a map with credit cards' server id + // as the key and its card art image url as the value. |callback| will be + // invoked when all the requests have been completed. The callback will + // receive a map of card server IDs to images, for (only) those cards for + // which the AutofillImageFetcher could successfully fetch the image. + void FetchImagesForUrls( + const std::map<std::string, GURL>& card_server_ids_and_art_urls, + CardArtImagesFetchedCallback callback); protected: - // Helper function to fetch art image for card given the |card_art_url|, for - // the specific |operation| instance. + // Helper function to fetch art image for card with |card_server_id| given the + // |card_art_url|, for the specific |operation| instance. virtual void FetchImageForUrl( const scoped_refptr<ImageFetchOperation>& operation, + const std::string& card_server_id, const GURL& card_art_url); // The image fetcher implementation. @@ -100,7 +100,7 @@ // Called when an image is fetched for the |operation| instance. static void OnCardArtImageFetched( const scoped_refptr<ImageFetchOperation>& operation, - const GURL& card_art_url, + const std::string& card_server_id, const gfx::Image& card_art_image, const image_fetcher::RequestMetadata& metadata); };
diff --git a/components/autofill/core/browser/ui/autofill_image_fetcher_unittest.cc b/components/autofill/core/browser/ui/autofill_image_fetcher_unittest.cc index ba338e9..40d7b314 100644 --- a/components/autofill/core/browser/ui/autofill_image_fetcher_unittest.cc +++ b/components/autofill/core/browser/ui/autofill_image_fetcher_unittest.cc
@@ -8,7 +8,6 @@ #include "base/test/bind.h" #include "base/test/metrics/histogram_tester.h" #include "components/autofill/core/browser/data_model/credit_card.h" -#include "components/autofill/core/browser/data_model/credit_card_art_image.h" #include "components/image_fetcher/core/image_decoder.h" #include "components/image_fetcher/core/mock_image_fetcher.h" #include "components/image_fetcher/core/request_metadata.h" @@ -35,8 +34,10 @@ ~TestAutofillImageFetcher() override = default; void FetchImageForUrl(const scoped_refptr<ImageFetchOperation>& operation, + const std::string& card_server_id, const GURL& card_art_url) override { - AutofillImageFetcher::FetchImageForUrl(operation, card_art_url); + AutofillImageFetcher::FetchImageForUrl(operation, card_server_id, + card_art_url); current_operation_ = operation; } @@ -57,14 +58,15 @@ std::make_unique<TestAutofillImageFetcher>(std::move(image_fetcher)); } - void SimulateOnImageFetched(const GURL& url, const gfx::Image& image) { + void SimulateOnImageFetched(const std::string& server_id, + const gfx::Image& image) { TestAutofillImageFetcher::OnCardArtImageFetched( - autofill_image_fetcher()->current_operation(), url, image, + autofill_image_fetcher()->current_operation(), server_id, image, image_fetcher::RequestMetadata()); } - void ValidateResult(std::map<GURL, gfx::Image> received_images, - std::map<GURL, gfx::Image> expected_images) { + void ValidateResult(std::map<std::string, gfx::Image> received_images, + std::map<std::string, gfx::Image> expected_images) { ASSERT_EQ(expected_images.size(), received_images.size()); for (const auto& expected_pair : expected_images) { const gfx::Image& expected_image = expected_pair.second; @@ -95,32 +97,30 @@ gfx::Image fake_image2 = ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed( IDR_DEFAULT_FAVICON_DARK); - GURL fake_url1 = GURL("http://www.example.com/fake_image1"); - GURL fake_url2 = GURL("http://www.example.com/fake_image2"); - - std::map<GURL, gfx::Image> expected_images = {{fake_url1, fake_image1}, - {fake_url2, fake_image2}}; + std::map<std::string, gfx::Image> expected_images = { + {"server_id1", fake_image1}, {"server_id2", fake_image2}}; // Expect callback to be called with some received images. - std::map<GURL, gfx::Image> received_images; + std::map<std::string, gfx::Image> received_images; auto callback = base::BindLambdaForTesting( - [&](std::vector<std::unique_ptr<CreditCardArtImage>> card_art_images) { - for (auto& entry : card_art_images) - received_images[entry->card_art_url] = entry->card_art_image; + [&](const std::map<std::string, gfx::Image>& card_art_image_map) { + received_images = card_art_image_map; }); base::HistogramTester histogram_tester; // Expect to be called twice. EXPECT_CALL(*mock_image_fetcher(), FetchImageAndData_(_, _, _, _)).Times(2); - std::vector<GURL> urls = {fake_url1, fake_url2}; - autofill_image_fetcher()->FetchImagesForUrls(urls, callback); + std::map<std::string, GURL> url_map = { + {"server_id1", GURL("http://www.example.com/fake_image1")}, + {"server_id2", GURL("http://www.example.com/fake_image2")}}; + autofill_image_fetcher()->FetchImagesForUrls(url_map, callback); // Simulate successful image fetching (for image with URL) -> expect the // callback to be called. - SimulateOnImageFetched(fake_url1, fake_image1); - SimulateOnImageFetched(fake_url2, fake_image2); + SimulateOnImageFetched("server_id1", fake_image1); + SimulateOnImageFetched("server_id2", fake_image2); - ValidateResult(std::move(received_images), expected_images); + ValidateResult(received_images, expected_images); histogram_tester.ExpectBucketCount("Autofill.ImageFetcher.Result", true, 2); } @@ -128,54 +128,55 @@ gfx::Image fake_image1 = ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed( IDR_DEFAULT_FAVICON); - GURL fake_url1 = GURL("http://www.example.com/fake_image1"); - std::map<GURL, gfx::Image> expected_images = {{fake_url1, fake_image1}}; + std::map<std::string, gfx::Image> expected_images = { + {"server_id1", fake_image1}}; - std::map<GURL, gfx::Image> received_images; + // Expect callback to be called with expected images. + std::map<std::string, gfx::Image> received_images; auto callback = base::BindLambdaForTesting( - [&](std::vector<std::unique_ptr<CreditCardArtImage>> card_art_images) { - for (auto& entry : card_art_images) - received_images[entry->card_art_url] = entry->card_art_image; + [&](const std::map<std::string, gfx::Image>& card_art_image_map) { + received_images = card_art_image_map; }); base::HistogramTester histogram_tester; // Expect to be called once with one invalid url. EXPECT_CALL(*mock_image_fetcher(), FetchImageAndData_(_, _, _, _)).Times(1); - std::vector<GURL> urls = {fake_url1, GURL("")}; - autofill_image_fetcher()->FetchImagesForUrls(urls, callback); + std::map<std::string, GURL> url_map = { + {"server_id1", GURL("http://www.example.com/fake_image1")}, + {"server_id2", GURL("")}}; + autofill_image_fetcher()->FetchImagesForUrls(url_map, callback); // Simulate successful image fetching (for image with URL) -> expect the // callback to be called. - SimulateOnImageFetched(fake_url1, fake_image1); + SimulateOnImageFetched("server_id1", fake_image1); - ValidateResult(std::move(received_images), expected_images); + ValidateResult(received_images, expected_images); histogram_tester.ExpectBucketCount("Autofill.ImageFetcher.Result", true, 1); histogram_tester.ExpectBucketCount("Autofill.ImageFetcher.Result", false, 1); } TEST_F(AutofillImageFetcherTest, FetchImage_ServerFailure) { - GURL fake_url1 = GURL("http://www.example.com/fake_image1"); - std::map<GURL, gfx::Image> expected_images; + std::map<std::string, gfx::Image> expected_images = {}; // Expect callback to be called with some received images. - std::map<GURL, gfx::Image> received_images; + std::map<std::string, gfx::Image> received_images; auto callback = base::BindLambdaForTesting( - [&](std::vector<std::unique_ptr<CreditCardArtImage>> card_art_images) { - for (auto& entry : card_art_images) - received_images[entry->card_art_url] = entry->card_art_image; + [&](const std::map<std::string, gfx::Image>& card_art_image_map) { + received_images = card_art_image_map; }); base::HistogramTester histogram_tester; // Expect to be called once. EXPECT_CALL(*mock_image_fetcher(), FetchImageAndData_(_, _, _, _)).Times(1); - std::vector<GURL> urls = {fake_url1}; - autofill_image_fetcher()->FetchImagesForUrls(urls, callback); + std::map<std::string, GURL> url_map = { + {"server_id1", GURL("http://www.example.com/fake_image1")}}; + autofill_image_fetcher()->FetchImagesForUrls(url_map, callback); // Simulate failed image fetching (for image with URL) -> expect the // callback to be called. - SimulateOnImageFetched(fake_url1, gfx::Image()); + SimulateOnImageFetched("server_id1", gfx::Image()); - ValidateResult(std::move(received_images), expected_images); + ValidateResult(received_images, expected_images); histogram_tester.ExpectBucketCount("Autofill.ImageFetcher.Result", false, 1); }
diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc index b93f0bc..26042dd 100644 --- a/components/autofill/core/browser/webdata/autofill_table.cc +++ b/components/autofill/core/browser/webdata/autofill_table.cc
@@ -29,6 +29,7 @@ #include "components/autofill/core/browser/data_model/autofill_offer_data.h" #include "components/autofill/core/browser/data_model/autofill_profile.h" #include "components/autofill/core/browser/data_model/credit_card.h" +#include "components/autofill/core/browser/data_model/credit_card_art_image.h" #include "components/autofill/core/browser/data_model/credit_card_cloud_token_data.h" #include "components/autofill/core/browser/geo/autofill_country.h" #include "components/autofill/core/browser/payments/payments_customer_data.h" @@ -2023,6 +2024,60 @@ return s.Succeeded(); } +bool AutofillTable::AddCreditCardArtImage( + const CreditCardArtImage& credit_card_art_image) { + sql::Transaction transaction(db_); + if (!transaction.Begin()) + return false; + + sql::Statement s(db_->GetUniqueStatement( + "INSERT INTO credit_card_art_images(id, instrument_id, card_art_image)" + "VALUES (?,?,?)")); + s.BindString(0, credit_card_art_image.id); + s.BindInt64(1, credit_card_art_image.instrument_id); + s.BindBlob(2, credit_card_art_image.card_art_image); + s.Run(); + + return transaction.Commit(); +} + +bool AutofillTable::GetCreditCardArtImages( + std::vector<std::unique_ptr<CreditCardArtImage>>* credit_card_art_images) { + credit_card_art_images->clear(); + + sql::Statement s( + db_->GetUniqueStatement("SELECT " + "id, " // 0 + "instrument_id, " // 1 + "card_art_image " // 2 + "FROM credit_card_art_images")); + + while (s.Step()) { + std::vector<uint8_t> card_art_image; + if (s.ColumnBlobAsVector(2, &card_art_image)) { + std::unique_ptr<CreditCardArtImage> data = + std::make_unique<CreditCardArtImage>( + s.ColumnString(0), s.ColumnInt64(1), std::move(card_art_image)); + credit_card_art_images->push_back(std::move(data)); + } + } + + return s.Succeeded(); +} + +bool AutofillTable::ClearCreditCardArtImage(const std::string& id) { + sql::Transaction transaction(db_); + if (!transaction.Begin()) + return false; + + sql::Statement s(db_->GetUniqueStatement( + "DELETE FROM credit_card_art_images WHERE id = ?")); + s.BindString(0, id); + s.Run(); + + return transaction.Commit(); +} + void AutofillTable::SetPaymentsCustomerData( const PaymentsCustomerData* customer_data) { sql::Transaction transaction(db_);
diff --git a/components/autofill/core/browser/webdata/autofill_table.h b/components/autofill/core/browser/webdata/autofill_table.h index 79c7e877..223991c 100644 --- a/components/autofill/core/browser/webdata/autofill_table.h +++ b/components/autofill/core/browser/webdata/autofill_table.h
@@ -35,6 +35,7 @@ class AutofillTableEncryptor; class AutofillTableTest; class CreditCard; +struct CreditCardArtImage; struct CreditCardCloudTokenData; struct FormFieldData; struct PaymentsCustomerData; @@ -428,7 +429,6 @@ // offer_id in the offer_data table. // merchant_domain List of full origins for merchant websites on which // this offer would apply. -// TODO(crbug.com/1196021): Remove unused table. // credit_card_art_images // Contains the card art image for the server credit card. // @@ -596,6 +596,12 @@ std::vector<std::unique_ptr<CreditCardCloudTokenData>>* credit_card_cloud_token_data); + // Setters and getters related to the credit card art images. + bool AddCreditCardArtImage(const CreditCardArtImage& credit_card_art_image); + bool GetCreditCardArtImages( + std::vector<std::unique_ptr<CreditCardArtImage>>* credit_card_art_images); + bool ClearCreditCardArtImage(const std::string& id); + // Setters and getters related to the Google Payments customer data. // Passing null to the setter will clear the data. void SetPaymentsCustomerData(const PaymentsCustomerData* customer_data);
diff --git a/components/autofill/core/browser/webdata/autofill_table_unittest.cc b/components/autofill/core/browser/webdata/autofill_table_unittest.cc index 97cb1c6..c077283 100644 --- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
@@ -27,6 +27,7 @@ #include "components/autofill/core/browser/data_model/autofill_offer_data.h" #include "components/autofill/core/browser/data_model/autofill_profile.h" #include "components/autofill/core/browser/data_model/credit_card.h" +#include "components/autofill/core/browser/data_model/credit_card_art_image.h" #include "components/autofill/core/browser/data_model/credit_card_cloud_token_data.h" #include "components/autofill/core/browser/payments/payments_customer_data.h" #include "components/autofill/core/browser/webdata/autofill_change.h" @@ -3767,4 +3768,34 @@ } } +TEST_F(AutofillTableTest, SetAndGetAndClearCreditCardArtImage) { + CreditCardArtImage image1("image1", 1, {UINT8_MAX}); + table_->AddCreditCardArtImage(image1); + CreditCardArtImage image2("image2", 2, {UINT8_MAX}); + table_->AddCreditCardArtImage(image2); + + std::vector<std::unique_ptr<CreditCardArtImage>> output; + EXPECT_TRUE(table_->GetCreditCardArtImages(&output)); + EXPECT_EQ(2U, output.size()); + EXPECT_EQ("image1", output[0]->id); + EXPECT_EQ(1, output[0]->instrument_id); + EXPECT_EQ(UINT8_MAX, output[0]->card_art_image[0]); + EXPECT_EQ("image2", output[1]->id); + EXPECT_EQ(2, output[1]->instrument_id); + EXPECT_EQ(UINT8_MAX, output[1]->card_art_image[0]); + + EXPECT_TRUE(table_->ClearCreditCardArtImage("image1")); + output.clear(); + EXPECT_TRUE(table_->GetCreditCardArtImages(&output)); + EXPECT_EQ(1U, output.size()); + EXPECT_EQ("image2", output[0]->id); + EXPECT_EQ(2, output[0]->instrument_id); + EXPECT_EQ(UINT8_MAX, output[0]->card_art_image[0]); + + EXPECT_TRUE(table_->ClearAllServerData()); + output.clear(); + EXPECT_TRUE(table_->GetCreditCardArtImages(&output)); + EXPECT_EQ(0U, output.size()); +} + } // namespace autofill
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc index f55343b..e8598a8 100644 --- a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc +++ b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc
@@ -547,9 +547,11 @@ const std::vector<CreditCard>& new_data) { std::vector<std::string> updated_server_ids; for (const CreditCard& new_card : new_data) { - // If this new card is not enrolled for virtual cards, continue. + // If this new card is not enrolled for virtual cards, clear the table entry + // for it if any and continue. if (new_card.virtual_card_enrollment_state() != CreditCard::VirtualCardEnrollmentState::ENROLLED) { + GetAutofillTable()->ClearCreditCardArtImage(new_card.server_id()); continue; } @@ -565,15 +567,20 @@ updated_server_ids.push_back(new_card.server_id()); // log the newly-synced card. AutofillMetrics::LogVirtualCardMetadataSynced(/*existing_card=*/false); + // The actual card image will be added later once it has actually been + // fetched. continue; } // If the virtual card metadata has changed from the old card to the new - // cards, log the updated sync. + // cards, change the table data and log the updated sync. if ((*old_data_iterator)->virtual_card_enrollment_state() != new_card.virtual_card_enrollment_state() || (*old_data_iterator)->card_art_url() != new_card.card_art_url()) { updated_server_ids.push_back(new_card.server_id()); + // Any existing card art image is not valid anymore. A new image will be + // added later. + GetAutofillTable()->ClearCreditCardArtImage(new_card.server_id()); AutofillMetrics::LogVirtualCardMetadataSynced(/*existing_card=*/true); } }
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.h b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.h index 80d7c9c..b6329ec 100644 --- a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.h +++ b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.h
@@ -134,8 +134,6 @@ // processor so that it can start tracking changes. void LoadMetadata(); - // TODO(crbug/com/1196021): Clean up duplicate functions and use it for - // logging only. // Checks whether any virtual card metadata for new_data is new and make // corresponding changes. void ProcessVirtualCardMetadataChanges(
diff --git a/components/autofill/core/common/autofill_payments_features.cc b/components/autofill/core/common/autofill_payments_features.cc index c4ade7d6..c2ffc3f 100644 --- a/components/autofill/core/common/autofill_payments_features.cc +++ b/components/autofill/core/common/autofill_payments_features.cc
@@ -108,17 +108,15 @@ const base::Feature kAutofillEnableVirtualCard{ "AutofillEnableVirtualCard", base::FEATURE_DISABLED_BY_DEFAULT}; +// When enabled, Autofill will attempt to fill merchant promo/coupon/gift code +// fields when data is available. +const base::Feature kAutofillFillMerchantPromoCodeFields{ + "AutofillFillMerchantPromoCodeFields", base::FEATURE_DISABLED_BY_DEFAULT}; + // Controls whether to enable the fix for the offer feature in Incognito mode. const base::Feature kAutofillFixOfferInIncognito{ "AutofillFixOfferInIncognito", base::FEATURE_DISABLED_BY_DEFAULT}; -// The merchant bound virtual card feature introduces new customized card art -// images. This parameter defines the expiration of the fetched image in the -// disk cache of the image fetcher. -const base::FeatureParam<int> kAutofillImageFetcherDiskCacheExpirationInMinutes{ - &kAutofillEnableMerchantBoundVirtualCards, - "autofill_image_fetcher_disk_cache_expiration_in_minutes", 10}; - // When enabled, Autofill will attempt to find merchant promo/coupon/gift code // fields when parsing forms. const base::Feature kAutofillParseMerchantPromoCodeFields{
diff --git a/components/autofill/core/common/autofill_payments_features.h b/components/autofill/core/common/autofill_payments_features.h index 4d3ace8..2781a64 100644 --- a/components/autofill/core/common/autofill_payments_features.h +++ b/components/autofill/core/common/autofill_payments_features.h
@@ -31,9 +31,8 @@ extern const base::Feature kAutofillEnableStickyManualFallbackForCards; extern const base::Feature kAutofillEnableToolbarStatusChip; extern const base::Feature kAutofillEnableVirtualCard; +extern const base::Feature kAutofillFillMerchantPromoCodeFields; extern const base::Feature kAutofillFixOfferInIncognito; -extern const base::FeatureParam<int> - kAutofillImageFetcherDiskCacheExpirationInMinutes; extern const base::Feature kAutofillParseMerchantPromoCodeFields; extern const base::Feature kAutofillSaveCardDismissOnNavigation; extern const base::Feature kAutofillSaveCardInfobarEditSupport;
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn index 9f82e97..2377dca5 100644 --- a/components/cronet/android/BUILD.gn +++ b/components/cronet/android/BUILD.gn
@@ -1243,6 +1243,8 @@ "//testing/gtest", ] + allow_cleartext_traffic = true + sources = [ "../run_all_unittests.cc" ] defines = [ "CRONET_TESTS_IMPLEMENTATION" ]
diff --git a/components/exo/client_controlled_shell_surface_unittest.cc b/components/exo/client_controlled_shell_surface_unittest.cc index 2b5e096..f4e801b 100644 --- a/components/exo/client_controlled_shell_surface_unittest.cc +++ b/components/exo/client_controlled_shell_surface_unittest.cc
@@ -50,6 +50,7 @@ #include "components/exo/test/exo_test_base.h" #include "components/exo/test/exo_test_helper.h" #include "components/exo/wm_helper.h" +#include "components/full_restore/features.h" #include "components/full_restore/full_restore_utils.h" #include "third_party/skia/include/utils/SkNoDrawCanvas.h" #include "ui/aura/client/aura_constants.h" @@ -1786,53 +1787,6 @@ } // Tests that a WideFrameView is created for an unparented ARC task and that the -// WideFrameView follows its respective surface when it is eventually parented. -// See crbug.com/1223135. -TEST_F(ClientControlledShellSurfaceTest, WideframeForUnparentedTasks) { - std::unique_ptr<Surface> surface(new Surface); - auto shell_surface = - exo_test_helper()->CreateClientControlledShellSurface(surface.get()); - - // Create a non-wide frame shell surface. - std::unique_ptr<Buffer> desktop_buffer( - new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(gfx::Size(64, 64)))); - surface->Attach(desktop_buffer.get()); - surface->SetInputRegion(gfx::Rect(0, 0, 64, 64)); - shell_surface->SetGeometry(gfx::Rect(100, 0, 64, 64)); - surface->SetFrame(SurfaceFrameType::NORMAL); - surface->Commit(); - auto* wide_frame = shell_surface->wide_frame_for_test(); - ASSERT_FALSE(wide_frame); - - // Set the |full_restore::kParentToHiddenContainerKey| for the surface and - // reparent it, simulating the Full Restore process for an unparented ARC - // task. - aura::Window* window = shell_surface->GetWidget()->GetNativeWindow(); - window->SetProperty(full_restore::kParentToHiddenContainerKey, true); - aura::client::ParentWindowWithContext(window, - /*context=*/window->GetRootWindow(), - window->GetBoundsInScreen()); - - // Maximize the surface. The WideFrameView should be created and a crash - // should not occur. - shell_surface->SetMaximized(); - surface->Commit(); - const auto* hidden_container_parent = window->parent(); - wide_frame = shell_surface->wide_frame_for_test(); - EXPECT_TRUE(wide_frame); - EXPECT_EQ(hidden_container_parent, - wide_frame->GetWidget()->GetNativeWindow()->parent()); - - // Call the FullRestoreController, simulating the ARC task becoming ready. The - // surface should be reparented and the WideFrameView should follow it. - ash::FullRestoreController::Get()->OnARCTaskReadyForUnparentedWindow(window); - EXPECT_NE(hidden_container_parent, window->parent()); - wide_frame = shell_surface->wide_frame_for_test(); - EXPECT_TRUE(wide_frame); - EXPECT_EQ(window->parent(), - wide_frame->GetWidget()->GetNativeWindow()->parent()); -} - TEST_F(ClientControlledShellSurfaceTest, NoFrameOnModalContainer) { std::unique_ptr<Surface> surface(new Surface); auto shell_surface = @@ -2854,4 +2808,73 @@ } } +class ClientControlledShellSurfaceFullRestoreTest + : public ClientControlledShellSurfaceTest { + public: + ClientControlledShellSurfaceFullRestoreTest() = default; + ClientControlledShellSurfaceFullRestoreTest( + const ClientControlledShellSurfaceFullRestoreTest&) = delete; + ClientControlledShellSurfaceFullRestoreTest& operator=( + const ClientControlledShellSurfaceFullRestoreTest&) = delete; + ~ClientControlledShellSurfaceFullRestoreTest() override = default; + + // ClientControlledShellSurfaceTest: + void SetUp() override { + scoped_feature_list_.InitAndEnableFeature( + ::full_restore::features::kFullRestore); + ClientControlledShellSurfaceTest::SetUp(); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +// WideFrameView follows its respective surface when it is eventually parented. +// See crbug.com/1223135. +TEST_F(ClientControlledShellSurfaceFullRestoreTest, + WideframeForUnparentedTasks) { + auto surface = std::make_unique<Surface>(); + auto shell_surface = + exo_test_helper()->CreateClientControlledShellSurface(surface.get()); + + // Create a non-wide frame shell surface. + auto desktop_buffer = std::make_unique<Buffer>( + exo_test_helper()->CreateGpuMemoryBuffer(gfx::Size(64, 64))); + surface->Attach(desktop_buffer.get()); + surface->SetInputRegion(gfx::Rect(0, 0, 64, 64)); + shell_surface->SetGeometry(gfx::Rect(100, 0, 64, 64)); + surface->SetFrame(SurfaceFrameType::NORMAL); + surface->Commit(); + auto* wide_frame = shell_surface->wide_frame_for_test(); + ASSERT_FALSE(wide_frame); + + // Set the |full_restore::kParentToHiddenContainerKey| for the surface and + // reparent it, simulating the Full Restore process for an unparented ARC + // task. + aura::Window* window = shell_surface->GetWidget()->GetNativeWindow(); + window->SetProperty(full_restore::kParentToHiddenContainerKey, true); + aura::client::ParentWindowWithContext(window, + /*context=*/window->GetRootWindow(), + window->GetBoundsInScreen()); + + // Maximize the surface. The WideFrameView should be created and a crash + // should not occur. + shell_surface->SetMaximized(); + surface->Commit(); + const auto* hidden_container_parent = window->parent(); + wide_frame = shell_surface->wide_frame_for_test(); + EXPECT_TRUE(wide_frame); + EXPECT_EQ(hidden_container_parent, + wide_frame->GetWidget()->GetNativeWindow()->parent()); + + // Call the FullRestoreController, simulating the ARC task becoming ready. The + // surface should be reparented and the WideFrameView should follow it. + ash::FullRestoreController::Get()->OnARCTaskReadyForUnparentedWindow(window); + EXPECT_NE(hidden_container_parent, window->parent()); + wide_frame = shell_surface->wide_frame_for_test(); + EXPECT_TRUE(wide_frame); + EXPECT_EQ(window->parent(), + wide_frame->GetWidget()->GetNativeWindow()->parent()); +} + } // namespace exo
diff --git a/components/heap_profiling/OWNERS b/components/heap_profiling/OWNERS index 9cc3a5e..14e4c82 100644 --- a/components/heap_profiling/OWNERS +++ b/components/heap_profiling/OWNERS
@@ -1,2 +1,4 @@ -alph@chromium.org erikchen@chromium.org +etienneb@chromium.org +joenotcharles@google.com +ssid@chromium.org \ No newline at end of file
diff --git a/components/messages/android/BUILD.gn b/components/messages/android/BUILD.gn index e5e1056..4d65ffb 100644 --- a/components/messages/android/BUILD.gn +++ b/components/messages/android/BUILD.gn
@@ -60,6 +60,7 @@ ":jni_headers", "//base", "//content/public/browser", + "//ui/android:android", ] }
diff --git a/components/messages/android/internal/BUILD.gn b/components/messages/android/internal/BUILD.gn index 818f79b..45b5cda 100644 --- a/components/messages/android/internal/BUILD.gn +++ b/components/messages/android/internal/BUILD.gn
@@ -46,6 +46,7 @@ sources = [ "java/src/org/chromium/components/messages/MessageAutoDismissTimerTest.java", "java/src/org/chromium/components/messages/MessageBannerMediatorUnitTest.java", + "java/src/org/chromium/components/messages/MessageDispatcherUnitTest.java", "java/src/org/chromium/components/messages/MessageQueueManagerTest.java", "java/src/org/chromium/components/messages/ScopeChangeControllerTest.java", ]
diff --git a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageDispatcherImpl.java b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageDispatcherImpl.java index 3173de4..0e8818db 100644 --- a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageDispatcherImpl.java +++ b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageDispatcherImpl.java
@@ -6,9 +6,12 @@ import android.animation.Animator; +import androidx.annotation.VisibleForTesting; + import org.chromium.base.Callback; import org.chromium.base.supplier.Supplier; import org.chromium.content_public.browser.WebContents; +import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modelutil.PropertyModel; /** @@ -16,11 +19,12 @@ * MessageQueueManager. */ public class MessageDispatcherImpl implements ManagedMessageDispatcher { - private final MessageQueueManager mMessageQueueManager = new MessageQueueManager(); + private final MessageQueueManager mMessageQueueManager; private final MessageContainer mMessageContainer; private final Supplier<Integer> mMessageMaxTranslationSupplier; private final MessageAutodismissDurationProvider mAutodismissDurationProvider; private final Callback<Animator> mAnimatorStartCallback; + private final WindowAndroid mWindowAndroid; /** * Build a new message dispatcher @@ -31,24 +35,58 @@ * autodismiss duration for message banner. * @param animatorStartCallback The {@link Callback} that will be used by the message to * delegate starting the animations to the {@link WindowAndroid}. + * @param windowAndroid The current window Android. */ public MessageDispatcherImpl(MessageContainer messageContainer, Supplier<Integer> messageMaxTranslation, MessageAutodismissDurationProvider autodismissDurationProvider, - Callback<Animator> animatorStartCallback) { + Callback<Animator> animatorStartCallback, WindowAndroid windowAndroid) { + this(messageContainer, messageMaxTranslation, autodismissDurationProvider, + animatorStartCallback, windowAndroid, new MessageQueueManager()); + } + + @VisibleForTesting + MessageDispatcherImpl(MessageContainer messageContainer, + Supplier<Integer> messageMaxTranslation, + MessageAutodismissDurationProvider autodismissDurationProvider, + Callback<Animator> animatorStartCallback, WindowAndroid windowAndroid, + MessageQueueManager messageQueueManager) { mMessageContainer = messageContainer; mMessageMaxTranslationSupplier = messageMaxTranslation; mAnimatorStartCallback = animatorStartCallback; mAutodismissDurationProvider = autodismissDurationProvider; + mWindowAndroid = windowAndroid; + mMessageQueueManager = messageQueueManager; } + /** + * Enqueue navigation or webContents scoped message. + * @param messageProperties The PropertyModel with message's visual properties. + * @param webContents The webContents the message is associated with. + * @param scopeType The {@link MessageScopeType} of the message. + * @param highPriority True if the message should be displayed ASAP. + */ @Override public void enqueueMessage(PropertyModel messageProperties, WebContents webContents, @MessageScopeType int scopeType, boolean highPriority) { MessageStateHandler messageStateHandler = new SingleActionMessage(mMessageContainer, messageProperties, this::dismissMessage, mMessageMaxTranslationSupplier, mAutodismissDurationProvider, mAnimatorStartCallback); - ScopeKey scopeKey = new ScopeKey(scopeType, webContents); + ScopeKey scopeKey; + assert scopeType + != MessageScopeType.WINDOW + : "Use #enqueueWindowScopedMessage to enqueue a window-scoped message."; + scopeKey = new ScopeKey(scopeType, webContents); + mMessageQueueManager.enqueueMessage( + messageStateHandler, messageProperties, scopeKey, highPriority); + } + + @Override + public void enqueueWindowScopedMessage(PropertyModel messageProperties, boolean highPriority) { + MessageStateHandler messageStateHandler = new SingleActionMessage(mMessageContainer, + messageProperties, this::dismissMessage, mMessageMaxTranslationSupplier, + mAutodismissDurationProvider, mAnimatorStartCallback); + ScopeKey scopeKey = new ScopeKey(mWindowAndroid); mMessageQueueManager.enqueueMessage( messageStateHandler, messageProperties, scopeKey, highPriority); }
diff --git a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageDispatcherUnitTest.java b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageDispatcherUnitTest.java new file mode 100644 index 0000000..f3f827f --- /dev/null +++ b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageDispatcherUnitTest.java
@@ -0,0 +1,60 @@ +// 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. + +package org.chromium.components.messages; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.Mockito.verify; +import static org.robolectric.annotation.LooperMode.Mode.PAUSED; + +import androidx.test.filters.SmallTest; + +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.robolectric.annotation.LooperMode; + +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.ui.modelutil.PropertyModel; + +/** Unit tests for {@link MessageDispatcherImpl}. */ +@SmallTest +@RunWith(BaseRobolectricTestRunner.class) +@LooperMode(PAUSED) +public class MessageDispatcherUnitTest { + @Rule + public MockitoRule mMockitoRule = MockitoJUnit.rule(); + + @Mock + private MessageQueueManager mQueueManager; + + @Test + public void testEnqueueWindowScopedMessage() { + MessageDispatcherImpl dispatcher = + new MessageDispatcherImpl(null, () -> 1, (v) -> 1L, (v) -> {}, null, mQueueManager); + dispatcher.enqueueWindowScopedMessage(getModel(), false); + ArgumentCaptor<ScopeKey> captor = ArgumentCaptor.forClass(ScopeKey.class); + verify(mQueueManager).enqueueMessage(any(), any(), captor.capture(), anyBoolean()); + Assert.assertEquals( + "The message should be of window scope if it is enqueued by #enqueueWindowScopedMessage.", + MessageScopeType.WINDOW, captor.getValue().scopeType); + } + + private PropertyModel getModel() { + return new PropertyModel.Builder(MessageBannerProperties.ALL_KEYS) + .with(MessageBannerProperties.MESSAGE_IDENTIFIER, MessageIdentifier.TEST_MESSAGE) + .with(MessageBannerProperties.TITLE, "test") + .with(MessageBannerProperties.DESCRIPTION, "Description") + .with(MessageBannerProperties.ICON, null) + .with(MessageBannerProperties.ON_PRIMARY_ACTION, () -> {}) + .with(MessageBannerProperties.ON_DISMISSED, (dismissReason) -> {}) + .build(); + } +}
diff --git a/components/messages/android/internal/java/src/org/chromium/components/messages/MessagesFactory.java b/components/messages/android/internal/java/src/org/chromium/components/messages/MessagesFactory.java index c864138..b74e1cc 100644 --- a/components/messages/android/internal/java/src/org/chromium/components/messages/MessagesFactory.java +++ b/components/messages/android/internal/java/src/org/chromium/components/messages/MessagesFactory.java
@@ -24,14 +24,15 @@ * autodismiss duration for message banner. * @param animatorStartCallback The {@link Callback} that will be used by the message to * delegate starting the animations to the {@link WindowAndroid}. + * @param windowAndroid The current window Android. * @return The constructed ManagedMessageDispatcher. */ public static ManagedMessageDispatcher createMessageDispatcher(MessageContainer container, Supplier<Integer> messageMaxTranslation, MessageAutodismissDurationProvider autodismissDurationMs, - Callback<Animator> animatorStartCallback) { - return new MessageDispatcherImpl( - container, messageMaxTranslation, autodismissDurationMs, animatorStartCallback); + Callback<Animator> animatorStartCallback, WindowAndroid windowAndroid) { + return new MessageDispatcherImpl(container, messageMaxTranslation, autodismissDurationMs, + animatorStartCallback, windowAndroid); } /**
diff --git a/components/messages/android/internal/java/src/org/chromium/components/messages/ScopeChangeController.java b/components/messages/android/internal/java/src/org/chromium/components/messages/ScopeChangeController.java index b64a45d..ce24451 100644 --- a/components/messages/android/internal/java/src/org/chromium/components/messages/ScopeChangeController.java +++ b/components/messages/android/internal/java/src/org/chromium/components/messages/ScopeChangeController.java
@@ -145,7 +145,10 @@ public WindowScopeObserver(Delegate delegate, ScopeKey scopeKey) { mDelegate = delegate; mScopeKey = scopeKey; - WindowAndroid windowAndroid = scopeKey.webContents.getTopLevelNativeWindow(); + assert scopeKey.scopeType + == MessageScopeType.WINDOW + : "WindowScopeObserver should only monitor window scope events."; + WindowAndroid windowAndroid = scopeKey.windowAndroid; windowAndroid.addActivityStateObserver(this); mDelegate.onScopeChange(new MessageScopeChange(scopeKey.scopeType, scopeKey, windowAndroid.getActivityState() == ActivityState.RESUMED @@ -173,7 +176,7 @@ @Override public void destroy() { - mScopeKey.webContents.getTopLevelNativeWindow().removeActivityStateObserver(this); + mScopeKey.windowAndroid.removeActivityStateObserver(this); } } }
diff --git a/components/messages/android/internal/java/src/org/chromium/components/messages/ScopeKey.java b/components/messages/android/internal/java/src/org/chromium/components/messages/ScopeKey.java index d0012ea..34913fb 100644 --- a/components/messages/android/internal/java/src/org/chromium/components/messages/ScopeKey.java +++ b/components/messages/android/internal/java/src/org/chromium/components/messages/ScopeKey.java
@@ -4,34 +4,46 @@ package org.chromium.components.messages; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.chromium.content_public.browser.WebContents; +import org.chromium.ui.base.WindowAndroid; /** * A key stands for a scope instance of a certain scope type. */ class ScopeKey { public final @MessageScopeType int scopeType; - public final WebContents webContents; + public final @Nullable WebContents webContents; + public final @Nullable WindowAndroid windowAndroid; - public ScopeKey(@MessageScopeType int scopeType, WebContents webContents) { + public ScopeKey(@MessageScopeType int scopeType, @NonNull WebContents webContents) { this.scopeType = scopeType; this.webContents = webContents; + windowAndroid = null; + } + + public ScopeKey(@NonNull WindowAndroid windowAndroid) { + scopeType = MessageScopeType.WINDOW; + this.windowAndroid = windowAndroid; + webContents = null; } @Override public boolean equals(@Nullable Object other) { if (!(other instanceof ScopeKey)) return false; ScopeKey otherScopeKey = (ScopeKey) other; - return scopeType == otherScopeKey.scopeType && otherScopeKey.webContents == webContents; + return scopeType == otherScopeKey.scopeType && windowAndroid == otherScopeKey.windowAndroid + && webContents == otherScopeKey.webContents; } @Override public int hashCode() { int result = 17; result = result * 31 + scopeType; - result = result * 31 + webContents.hashCode(); + result = result * 31 + (webContents == null ? 0 : webContents.hashCode()); + result = result * 31 + (windowAndroid == null ? 0 : windowAndroid.hashCode()); return result; } }
diff --git a/components/messages/android/java/src/org/chromium/components/messages/MessageDispatcher.java b/components/messages/android/java/src/org/chromium/components/messages/MessageDispatcher.java index f05f5323..e271207 100644 --- a/components/messages/android/java/src/org/chromium/components/messages/MessageDispatcher.java +++ b/components/messages/android/java/src/org/chromium/components/messages/MessageDispatcher.java
@@ -23,6 +23,19 @@ @MessageScopeType int scopeType, boolean highPriority); /** + * Enqueues a message defined by its properties. This message will be of a + * {@link MessageScopeType#WINDOW} scope. And it will be be associated with WindowAndroid for + * which this message dispatcher was created. Use {@link + * MessageDispatcher#enqueueMessage(PropertyModel, WebContents, int, boolean)} to ensure the + * message is attached to given webContents or the windowAndroid associated with the given + * webContents. + * + * @param messageProperties The PropertyModel with message's visual properties. + * @param highPriority True if the message should be displayed ASAP. + */ + void enqueueWindowScopedMessage(PropertyModel messageProperties, boolean highPriority); + + /** * Dismisses a message referenced by its PropertyModel. Hides the message if it is currently * displayed. Displays the next message in the queue if available. * @param messageProperties The PropertyModel of the message to be dismissed.
diff --git a/components/messages/android/java/src/org/chromium/components/messages/MessageDispatcherBridge.java b/components/messages/android/java/src/org/chromium/components/messages/MessageDispatcherBridge.java index 4e63450..7be028d7 100644 --- a/components/messages/android/java/src/org/chromium/components/messages/MessageDispatcherBridge.java +++ b/components/messages/android/java/src/org/chromium/components/messages/MessageDispatcherBridge.java
@@ -7,6 +7,7 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.content_public.browser.WebContents; +import org.chromium.ui.base.WindowAndroid; /** * Java counterpart to MessageDispatcherBridge. Enables C++ feature code to enqueue/dismiss messages @@ -30,6 +31,15 @@ } @CalledByNative + private static boolean enqueueWindowScopedMessage( + MessageWrapper message, WindowAndroid windowAndroid, boolean highPriority) { + MessageDispatcher messageDispatcher = MessageDispatcherProvider.from(windowAndroid); + if (messageDispatcher == null) return false; + messageDispatcher.enqueueWindowScopedMessage(message.getMessageProperties(), highPriority); + return true; + } + + @CalledByNative private static void dismissMessage( MessageWrapper message, WebContents webContents, @DismissReason int dismissReason) { MessageDispatcher messageDispatcher =
diff --git a/components/messages/android/message_dispatcher_bridge.cc b/components/messages/android/message_dispatcher_bridge.cc index fdeda10..c0d8a4e7 100644 --- a/components/messages/android/message_dispatcher_bridge.cc +++ b/components/messages/android/message_dispatcher_bridge.cc
@@ -49,6 +49,21 @@ return false; } +bool MessageDispatcherBridge::EnqueueWindowScopedMessage( + MessageWrapper* message, + ui::WindowAndroid* window_android, + MessagePriority priority) { + JNIEnv* env = base::android::AttachCurrentThread(); + if (Java_MessageDispatcherBridge_enqueueWindowScopedMessage( + env, message->GetJavaMessageWrapper(), + window_android->GetJavaObject(), + priority == MessagePriority::kUrgent) == JNI_TRUE) { + message->SetMessageEnqueued(); + return true; + } + return false; +} + void MessageDispatcherBridge::DismissMessage(MessageWrapper* message, content::WebContents* web_contents, DismissReason dismiss_reason) {
diff --git a/components/messages/android/message_dispatcher_bridge.h b/components/messages/android/message_dispatcher_bridge.h index 43c75a3..f6a23df 100644 --- a/components/messages/android/message_dispatcher_bridge.h +++ b/components/messages/android/message_dispatcher_bridge.h
@@ -7,6 +7,7 @@ #include "components/messages/android/message_enums.h" #include "components/messages/android/message_wrapper.h" +#include "ui/android/window_android.h" namespace content { class WebContents; @@ -26,6 +27,9 @@ content::WebContents* web_contents, MessageScopeType scope_type, MessagePriority priority); + virtual bool EnqueueWindowScopedMessage(MessageWrapper* message, + ui::WindowAndroid* window_android, + MessagePriority priority); virtual void DismissMessage(MessageWrapper* message, content::WebContents* web_contents, DismissReason dismiss_reason);
diff --git a/components/omnibox/browser/autocomplete_input.cc b/components/omnibox/browser/autocomplete_input.cc index d16ba4a5..90cd6534 100644 --- a/components/omnibox/browser/autocomplete_input.cc +++ b/components/omnibox/browser/autocomplete_input.cc
@@ -569,7 +569,7 @@ !base::StartsWith(text, base::ASCIIToUTF16(url.scheme()), base::CompareCase::INSENSITIVE_ASCII) && !url::HostIsIPAddress(url.host()) && - !net::IsHostnameNonUnique(base::UTF16ToUTF8(text)) && + !net::IsHostnameNonUnique(url.host()) && (url.port().empty() || https_port_for_testing)) { // Use HTTPS as the default scheme for URLs that are typed without a scheme. // Inputs of type UNKNOWN can still be valid URLs, but these will be mainly
diff --git a/components/omnibox/browser/autocomplete_input_unittest.cc b/components/omnibox/browser/autocomplete_input_unittest.cc index 19bf354..4a906b0 100644 --- a/components/omnibox/browser/autocomplete_input_unittest.cc +++ b/components/omnibox/browser/autocomplete_input_unittest.cc
@@ -384,6 +384,14 @@ {u"127.0.0.1:8080", GURL("http://127.0.0.1:8080"), false}, // Non-unique hostnames shouldn't be upgraded. {u"site.test", GURL("http://site.test"), false}, + // This non-unique hostname is a regression test for + // https://crbug.com/1224724. The slash is provided at the end of the + // input query since otherwise the input gets classified as a non-URL and + // the autocomplete code doesn't progress to the HTTPS upgrading logic + // where the bug was. + {u"dotlesshostname/", GURL("http://dotlesshostname/"), false}, + {u"http://dotlesshostname/", GURL("http://dotlesshostname/"), false}, + {u"https://dotlesshostname/", GURL("https://dotlesshostname/"), false}, // Fully typed URLs shouldn't be upgraded. {u"http://example.com", GURL("http://example.com"), false}, {u"HTTP://EXAMPLE.COM", GURL("http://example.com"), false},
diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothChooserDialog.java b/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothChooserDialog.java index 6cc0296..484f0aae 100644 --- a/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothChooserDialog.java +++ b/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothChooserDialog.java
@@ -14,6 +14,7 @@ import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.location.LocationManager; +import android.os.Build; import android.text.SpannableString; import android.text.TextUtils; import android.view.View; @@ -24,7 +25,6 @@ import androidx.core.graphics.drawable.DrawableCompat; import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; -import org.chromium.base.BuildInfo; import org.chromium.base.Log; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; @@ -277,9 +277,7 @@ // Nearby Devices permission and has set the neverForLocation flag on the BLUETOOTH_SCAN // permission in its manifest. boolean needsLocationServices = false; - // TODO(b/183501112): Remove the targetsAtLeastS() check once Chrome starts compiling - // against the S SDK. - if (!BuildInfo.targetsAtLeastS() || !BuildInfo.isAtLeastS()) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { needsLocationServices = !LocationUtils.getInstance().isSystemLocationSettingEnabled(); } @@ -312,9 +310,7 @@ R.string.bluetooth_need_location_permission_and_services_on), permissionSpan, servicesSpan); } else { - // TODO(b/183501112): Remove the targetsAtLeastS() check once Chrome starts - // compiling against the S SDK. - if (BuildInfo.targetsAtLeastS() && BuildInfo.isAtLeastS()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { needPermissionMessage = SpanApplier.applySpans( mContext.getString(R.string.bluetooth_need_nearby_devices_permission), permissionSpan); @@ -365,14 +361,10 @@ break; case LinkType.REQUEST_PERMISSIONS: mItemChooserDialog.setIgnorePendingWindowFocusChangeForClose(true); - // TODO(b/183501112): Remove the targetsAtLeastS() check once Chrome starts - // compiling against the S SDK. - if (BuildInfo.targetsAtLeastS() && BuildInfo.isAtLeastS()) { - // TODO(b/183501112): Replace these permission strings with the actual Manifest - // constants once Chrome starts compiling against the S SDK. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { mWindowAndroid.requestPermissions( - new String[] {"android.permission.BLUETOOTH_SCAN", - "android.permission.BLUETOOTH_CONNECT"}, + new String[] {Manifest.permission.BLUETOOTH_SCAN, + Manifest.permission.BLUETOOTH_CONNECT}, BluetoothChooserDialog.this); } else { mWindowAndroid.requestPermissions( @@ -401,26 +393,18 @@ } private static boolean hasSystemPermissions(WindowAndroid windowAndroid) { - // TODO(b/183501112): Remove the targetsAtLeastS() check once Chrome starts compiling - // against the S SDK. - if (BuildInfo.targetsAtLeastS() && BuildInfo.isAtLeastS()) { - // TODO(b/183501112): Replace these permission strings with the actual Manifest - // constants once Chrome starts compiling against the S SDK. - return windowAndroid.hasPermission("android.permission.BLUETOOTH_SCAN") - && windowAndroid.hasPermission("android.permission.BLUETOOTH_CONNECT"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + return windowAndroid.hasPermission(Manifest.permission.BLUETOOTH_SCAN) + && windowAndroid.hasPermission(Manifest.permission.BLUETOOTH_CONNECT); } return windowAndroid.hasPermission(Manifest.permission.ACCESS_FINE_LOCATION); } private static boolean canRequestSystemPermissions(WindowAndroid windowAndroid) { - // TODO(b/183501112): Remove the targetsAtLeastS() check once Chrome starts compiling - // against the S SDK. - if (BuildInfo.targetsAtLeastS() && BuildInfo.isAtLeastS()) { - // TODO(b/183501112): Replace these permission strings with the actual Manifest - // constants once Chrome starts compiling against the S SDK. - return windowAndroid.canRequestPermission("android.permission.BLUETOOTH_SCAN") - && windowAndroid.canRequestPermission("android.permission.BLUETOOTH_CONNECT"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + return windowAndroid.canRequestPermission(Manifest.permission.BLUETOOTH_SCAN) + && windowAndroid.canRequestPermission(Manifest.permission.BLUETOOTH_CONNECT); } return windowAndroid.canRequestPermission(Manifest.permission.ACCESS_FINE_LOCATION);
diff --git a/components/safe_browsing/core/common/visual_utils.cc b/components/safe_browsing/core/common/visual_utils.cc index cf63abe0..53f1a8b 100644 --- a/components/safe_browsing/core/common/visual_utils.cc +++ b/components/safe_browsing/core/common/visual_utils.cc
@@ -279,9 +279,9 @@ const int data_size = blurred->width() * blurred->height(); blurred_image->mutable_data()->reserve(data_size); - for (int x = 0; x < blurred->width(); ++x) { - for (int y = 0; y < blurred->height(); ++y) { - SkColor color = blurred->getColor(y, x); + for (int y = 0; y < blurred->height(); ++y) { + for (int x = 0; x < blurred->width(); ++x) { + SkColor color = blurred->getColor(x, y); *blurred_image->mutable_data() += static_cast<char>(SkColorGetR(color)); *blurred_image->mutable_data() += static_cast<char>(SkColorGetG(color)); *blurred_image->mutable_data() += static_cast<char>(SkColorGetB(color));
diff --git a/components/safe_browsing/core/common/visual_utils_unittest.cc b/components/safe_browsing/core/common/visual_utils_unittest.cc index 7d56fca..0024d46 100644 --- a/components/safe_browsing/core/common/visual_utils_unittest.cc +++ b/components/safe_browsing/core/common/visual_utils_unittest.cc
@@ -4,7 +4,9 @@ #include "components/safe_browsing/core/common/visual_utils.h" +#include "base/test/scoped_feature_list.h" #include "base/test/test_discardable_memory_allocator.h" +#include "components/safe_browsing/core/common/features.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkColorPriv.h" @@ -657,5 +659,26 @@ .has_value()); } +TEST_F(VisualUtilsTest, NonSquareBlurredImage) { + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeatureWithParameters( + kVisualFeaturesSizes, {{"phash_width", "108"}, {"phash_height", "192"}}); + + VisualFeatures::BlurredImage blurred; + + // Draw white over the image + bitmap_.erase(SK_ColorWHITE, SkIRect::MakeXYWH(0, 0, 1000, 1000)); + + ASSERT_TRUE(GetBlurredImage(bitmap_, &blurred)); + ASSERT_EQ(18, blurred.width()); + ASSERT_EQ(32, blurred.height()); + ASSERT_EQ(3u * 18u * 32u, blurred.data().size()); + for (size_t i = 0; i < 18u * 32u; i++) { + EXPECT_EQ('\xff', blurred.data()[3 * i]); + EXPECT_EQ('\xff', blurred.data()[3 * i + 1]); + EXPECT_EQ('\xff', blurred.data()[3 * i + 2]); + } +} + } // namespace visual_utils } // namespace safe_browsing
diff --git a/components/segmentation_platform/internal/segmentation_platform_service_impl.cc b/components/segmentation_platform/internal/segmentation_platform_service_impl.cc index 0ac09e4..bdbd026 100644 --- a/components/segmentation_platform/internal/segmentation_platform_service_impl.cc +++ b/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
@@ -207,6 +207,7 @@ signal_storage_config_->OnSignalCollectionStarted( segment_info.model_metadata()); + signal_filter_processor_->OnSignalListUpdated(); model_execution_scheduler_->OnNewModelInfoReady(segment_info); }
diff --git a/components/segmentation_platform/internal/segmentation_platform_service_impl_unittest.cc b/components/segmentation_platform/internal/segmentation_platform_service_impl_unittest.cc index f2dff64..6e0e57f 100644 --- a/components/segmentation_platform/internal/segmentation_platform_service_impl_unittest.cc +++ b/components/segmentation_platform/internal/segmentation_platform_service_impl_unittest.cc
@@ -10,6 +10,7 @@ #include "base/files/file_path.h" #include "base/metrics/user_metrics.h" #include "base/run_loop.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/simple_test_clock.h" #include "base/test/task_environment.h" #include "base/test/test_simple_task_runner.h" @@ -28,6 +29,7 @@ #include "components/segmentation_platform/internal/execution/feature_aggregator_impl.h" #include "components/segmentation_platform/internal/execution/model_execution_manager.h" #include "components/segmentation_platform/internal/execution/model_execution_manager_factory.h" +#include "components/segmentation_platform/internal/proto/model_metadata.pb.h" #include "components/segmentation_platform/internal/proto/model_prediction.pb.h" #include "components/segmentation_platform/internal/proto/signal.pb.h" #include "components/segmentation_platform/internal/proto/signal_storage_config.pb.h" @@ -154,15 +156,12 @@ // ModelExecutionManagerImpl is publishing the correct data and whether that // leads to the SegmentationPlatformServiceImpl doing the right thing. #if BUILDFLAG(BUILD_WITH_TFLITE_LIB) - proto::SegmentInfo segment_info; - segment_info.set_segment_id( - OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_SHARE); - auto* metadata = segment_info.mutable_model_metadata(); - metadata->set_time_unit(proto::TimeUnit::DAY); - metadata->set_bucket_duration(42u); + proto::SegmentationModelMetadata metadata; + metadata.set_time_unit(proto::TimeUnit::DAY); + metadata.set_bucket_duration(42u); // Add a test feature, which will later cause the signal storage DB to be // updated. - auto* feature = metadata->add_features(); + auto* feature = metadata.add_features(); feature->set_type(proto::SignalType::HISTOGRAM_VALUE); feature->set_name("other"); feature->set_name_hash(123); @@ -172,11 +171,28 @@ ModelExecutionManagerImpl* mem_impl = static_cast<ModelExecutionManagerImpl*>( segmentation_platform_service_impl_->model_execution_manager_.get()); - mem_impl->model_updated_callback_.Run(segment_info); + + // This method is invoked from SegmentationModelHandler whenever a model has + // been updated and every time at startup. This will first read the old info + // from the database, and then write the merged result of the old and new to + // the database. + base::HistogramTester histogram_tester; + mem_impl->OnSegmentationModelUpdated( + OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_SHARE, metadata); + segment_db_->GetCallback(true); + segment_db_->UpdateCallback(true); // Since the updated config had a new feature, the SignalStorageConfigs DB // should have been updated. segment_storage_config_db_->UpdateCallback(true); + + // The SignalFilterProcessor needs to read the segment information from the + // database before starting to listen to the updated signals. + segment_db_->LoadCallback(true); + // We should have started recording 1 value histogram, once. + EXPECT_EQ( + 1, histogram_tester.GetBucketCount( + "SegmentationPlatform.Signals.ListeningCount.HistogramValue", 1)); #endif // BUILDFLAG(BUILD_WITH_TFLITE_LIB) // Database maintenance tasks should try to cleanup the signals after a short
diff --git a/components/segmentation_platform/internal/signals/signal_filter_processor.cc b/components/segmentation_platform/internal/signals/signal_filter_processor.cc index 1322d68..591f866 100644 --- a/components/segmentation_platform/internal/signals/signal_filter_processor.cc +++ b/components/segmentation_platform/internal/signals/signal_filter_processor.cc
@@ -11,6 +11,7 @@ #include "components/segmentation_platform/internal/proto/types.pb.h" #include "components/segmentation_platform/internal/signals/histogram_signal_handler.h" #include "components/segmentation_platform/internal/signals/user_action_signal_handler.h" +#include "components/segmentation_platform/internal/stats.h" namespace segmentation_platform { @@ -57,6 +58,8 @@ } } + stats::RecordSignalsListeningCount(user_actions, histograms); + user_action_signal_handler_->SetRelevantUserActions(std::move(user_actions)); histogram_signal_handler_->SetRelevantHistograms(histograms); }
diff --git a/components/segmentation_platform/internal/stats.cc b/components/segmentation_platform/internal/stats.cc index 0fe9ab1..005e2a97 100644 --- a/components/segmentation_platform/internal/stats.cc +++ b/components/segmentation_platform/internal/stats.cc
@@ -7,6 +7,7 @@ #include "base/metrics/histogram_functions.h" #include "base/notreached.h" #include "components/optimization_guide/proto/models.pb.h" +#include "components/segmentation_platform/internal/proto/types.pb.h" namespace segmentation_platform { namespace stats { @@ -115,6 +116,22 @@ } } +// Should map to SignalType variant string in +// //tools/metrics/histograms/metadata/segmentation_platform/histograms.xml. +std::string SignalTypeToHistogramVariant(proto::SignalType signal_type) { + switch (signal_type) { + case proto::SignalType::USER_ACTION: + return "UserAction"; + case proto::SignalType::HISTOGRAM_ENUM: + return "HistogramEnum"; + case proto::SignalType::HISTOGRAM_VALUE: + return "HistogramValue"; + default: + NOTREACHED(); + return "Unknown"; + } +} + } // namespace void RecordModelScore(OptimizationTarget segment_id, float score) { @@ -144,5 +161,32 @@ GetSegmentSwitch(new_selection, prev_segment)); } +void RecordSignalsListeningCount( + const std::set<uint64_t>& user_actions, + const std::set<std::pair<std::string, proto::SignalType>>& histograms) { + uint64_t user_action_count = user_actions.size(); + uint64_t histogram_enum_count = 0; + uint64_t histogram_value_count = 0; + for (auto& s : histograms) { + if (s.second == proto::SignalType::HISTOGRAM_ENUM) + ++histogram_enum_count; + if (s.second == proto::SignalType::HISTOGRAM_VALUE) + ++histogram_value_count; + } + + base::UmaHistogramCounts1000( + "SegmentationPlatform.Signals.ListeningCount." + + SignalTypeToHistogramVariant(proto::SignalType::USER_ACTION), + user_action_count); + base::UmaHistogramCounts1000( + "SegmentationPlatform.Signals.ListeningCount." + + SignalTypeToHistogramVariant(proto::SignalType::HISTOGRAM_ENUM), + histogram_enum_count); + base::UmaHistogramCounts1000( + "SegmentationPlatform.Signals.ListeningCount." + + SignalTypeToHistogramVariant(proto::SignalType::HISTOGRAM_VALUE), + histogram_value_count); +} + } // namespace stats } // namespace segmentation_platform
diff --git a/components/segmentation_platform/internal/stats.h b/components/segmentation_platform/internal/stats.h index 15d4fe22..5781913c 100644 --- a/components/segmentation_platform/internal/stats.h +++ b/components/segmentation_platform/internal/stats.h
@@ -6,6 +6,7 @@ #define COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_STATS_H_ #include "components/optimization_guide/proto/models.pb.h" +#include "components/segmentation_platform/internal/proto/types.pb.h" #include "third_party/abseil-cpp/absl/types/optional.h" using optimization_guide::proto::OptimizationTarget; @@ -40,6 +41,12 @@ OptimizationTarget new_selection, absl::optional<OptimizationTarget> previous_selection); +// Records the number of unique user action and histogram signals that we are +// currently tracking. +void RecordSignalsListeningCount( + const std::set<uint64_t>& user_actions, + const std::set<std::pair<std::string, proto::SignalType>>& histograms); + } // namespace stats } // namespace segmentation_platform
diff --git a/components/segmentation_platform/internal/stats_unittest.cc b/components/segmentation_platform/internal/stats_unittest.cc index 3880d4e2..5d75b040 100644 --- a/components/segmentation_platform/internal/stats_unittest.cc +++ b/components/segmentation_platform/internal/stats_unittest.cc
@@ -6,10 +6,12 @@ #include "base/test/metrics/histogram_tester.h" #include "components/optimization_guide/proto/models.pb.h" +#include "components/segmentation_platform/internal/proto/types.pb.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace segmentation_platform { +using proto::SignalType; namespace stats { class StatsTest : public testing::Test { @@ -49,5 +51,28 @@ "SegmentationPlatform.AdaptiveToolbar.SegmentSelection.Computed", 3); } +TEST_F(StatsTest, SignalsListeningCount) { + base::HistogramTester tester; + std::set<uint64_t> user_actions{1, 2, 3, 4}; + std::set<std::pair<std::string, proto::SignalType>> histograms; + histograms.insert(std::make_pair("hist1", SignalType::HISTOGRAM_ENUM)); + histograms.insert(std::make_pair("hist2", SignalType::HISTOGRAM_ENUM)); + histograms.insert(std::make_pair("hist3", SignalType::HISTOGRAM_ENUM)); + histograms.insert(std::make_pair("hist4", SignalType::HISTOGRAM_VALUE)); + histograms.insert(std::make_pair("hist5", SignalType::HISTOGRAM_VALUE)); + + RecordSignalsListeningCount(user_actions, histograms); + + EXPECT_EQ(1, + tester.GetBucketCount( + "SegmentationPlatform.Signals.ListeningCount.UserAction", 4)); + EXPECT_EQ( + 1, tester.GetBucketCount( + "SegmentationPlatform.Signals.ListeningCount.HistogramEnum", 3)); + EXPECT_EQ( + 1, tester.GetBucketCount( + "SegmentationPlatform.Signals.ListeningCount.HistogramValue", 2)); +} + } // namespace stats } // namespace segmentation_platform
diff --git a/components/variations/service/generate_ui_string_overrider.py b/components/variations/service/generate_ui_string_overrider.py index bcf33dc..c42fdd3 100755 --- a/components/variations/service/generate_ui_string_overrider.py +++ b/components/variations/service/generate_ui_string_overrider.py
@@ -15,10 +15,10 @@ # Regular expression for parsing the #define macro format. Matches both the -# version of the macro with whitelist support and the one without. For example, -# Without generate whitelist flag: +# version of the macro with allowlist support and the one without. For example, +# Without generate allowlist flag: # #define IDS_FOO_MESSAGE 1234 -# With generate whitelist flag: +# With generate allowlist flag: # #define IDS_FOO_MESSAGE (::ui::AllowlistedResource<1234>(), 1234) RESOURCE_EXTRACT_REGEX = re.compile('^#define (\S*).* (\d+)\)?$', re.MULTILINE)
diff --git a/components/variations/study_filtering.cc b/components/variations/study_filtering.cc index 7bde879a..2905053b 100644 --- a/components/variations/study_filtering.cc +++ b/components/variations/study_filtering.cc
@@ -51,43 +51,41 @@ bool CheckStudyFormFactor(const Study::Filter& filter, Study::FormFactor form_factor) { - // Empty whitelist and blacklist signifies matching any form factor. + // If both filters are empty, match all values. if (filter.form_factor_size() == 0 && filter.exclude_form_factor_size() == 0) return true; - // Allow the form_factor if it matches the whitelist. - // Note if both a whitelist and blacklist are specified, the blacklist is - // ignored. We do not expect both to be present for Chrome due to server-side - // checks. + // Allow the |form_factor| if it's in the allowlist. + // Note if both are specified, the excludelist is ignored. We do not expect + // both to be present for Chrome due to server-side checks. if (filter.form_factor_size() > 0) return base::Contains(filter.form_factor(), form_factor); - // Omit if we match the blacklist. + // Omit if there is a matching excludelist entry. return !base::Contains(filter.exclude_form_factor(), form_factor); } bool CheckStudyCpuArchitecture(const Study::Filter& filter, Study::CpuArchitecture cpu_architecture) { - // Empty allowlist and denylist signifies matching any CPU architecture. + // If both filters are empty, match all values. if (filter.cpu_architecture_size() == 0 && filter.exclude_cpu_architecture_size() == 0) { return true; } - // Allow the cpu_architecture if it matches the allowlist. - // Note if both a allowlist and denylist are specified, the denylist is - // ignored. We do not expect both to be present for Chrome due to server-side - // checks. + // Allow the |cpu_architecture| if it's in the allowlist. + // Note if both are specified, the excludelist is ignored. We do not expect + // both to be present for Chrome due to server-side checks. if (filter.cpu_architecture_size() > 0) return base::Contains(filter.cpu_architecture(), cpu_architecture); - // Omit if we match the denylist. + // Omit if there is a matching excludelist entry. return !base::Contains(filter.exclude_cpu_architecture(), cpu_architecture); } bool CheckStudyHardwareClass(const Study::Filter& filter, const std::string& hardware_class) { - // Empty hardware_class and exclude_hardware_class matches all. + // If both filters are empty, match all values. if (filter.hardware_class_size() == 0 && filter.exclude_hardware_class_size() == 0) { return true; @@ -97,34 +95,50 @@ // comparison logic to match hardware classes. In M66, it was made consistent // with other filters. - // Checks if we are supposed to filter for a specified set of - // hardware_classes. Note that this means this overrides the - // exclude_hardware_class in case that ever occurs (which it shouldn't). + // Allow the |hardware_class| if it's in the allowlist. + // Note if both are specified, the excludelist is ignored. We do not expect + // both to be present for Chrome due to server-side checks. if (filter.hardware_class_size() > 0) { return ContainsStringIgnoreCaseASCII(filter.hardware_class(), hardware_class); } - // Omit if we match the blacklist. + // Omit if there is a matching excludelist entry. return !ContainsStringIgnoreCaseASCII(filter.exclude_hardware_class(), hardware_class); } bool CheckStudyLocale(const Study::Filter& filter, const std::string& locale) { - // Empty locale and exclude_locale lists matches all locales. + // If both filters are empty, match all values. if (filter.locale_size() == 0 && filter.exclude_locale_size() == 0) return true; - // Check if we are supposed to filter for a specified set of countries. Note - // that this means this overrides the exclude_locale in case that ever occurs - // (which it shouldn't). + // Allow the |locale| if it's in the allowlist. + // Note if both are specified, the excludelist is ignored. We do not expect + // both to be present for Chrome due to server-side checks. if (filter.locale_size() > 0) return base::Contains(filter.locale(), locale); - // Omit if matches any of the exclude entries. + // Omit if there is a matching excludelist entry. return !base::Contains(filter.exclude_locale(), locale); } +bool CheckStudyCountry(const Study::Filter& filter, + const std::string& country) { + // If both filters are empty, match all values. + if (filter.country_size() == 0 && filter.exclude_country_size() == 0) + return true; + + // Allow the |country| if it's in the allowlist. + // Note if both are specified, the excludelist is ignored. We do not expect + // both to be present for Chrome due to server-side checks. + if (filter.country_size() > 0) + return base::Contains(filter.country(), country); + + // Omit if there is a matching excludelist entry. + return !base::Contains(filter.exclude_country(), country); +} + bool CheckStudyPlatform(const Study::Filter& filter, Study::Platform platform) { for (int i = 0; i < filter.platform_size(); ++i) { if (filter.platform(i) == platform) @@ -212,22 +226,6 @@ return true; } -bool CheckStudyCountry(const Study::Filter& filter, - const std::string& country) { - // Empty country and exclude_country matches all. - if (filter.country_size() == 0 && filter.exclude_country_size() == 0) - return true; - - // Checks if we are supposed to filter for a specified set of countries. Note - // that this means this overrides the exclude_country in case that ever occurs - // (which it shouldn't). - if (filter.country_size() > 0) - return base::Contains(filter.country(), country); - - // Omit if matches any of the exclude entries. - return !base::Contains(filter.exclude_country(), country); -} - bool CheckStudyEnterprise(const Study::Filter& filter, const ClientFilterableState& client_state) { return !filter.has_is_enterprise() ||
diff --git a/components/variations/study_filtering.h b/components/variations/study_filtering.h index e4ec9de..382ad37c4 100644 --- a/components/variations/study_filtering.h +++ b/components/variations/study_filtering.h
@@ -45,6 +45,10 @@ COMPONENT_EXPORT(VARIATIONS) bool CheckStudyLocale(const Study::Filter& filter, const std::string& locale); +// Checks whether a study is applicable for the given |country| per |filter|. +COMPONENT_EXPORT(VARIATIONS) +bool CheckStudyCountry(const Study::Filter& filter, const std::string& country); + // Checks whether a study is applicable for the given |platform| per |filter|. COMPONENT_EXPORT(VARIATIONS) bool CheckStudyPlatform(const Study::Filter& filter, Study::Platform platform); @@ -79,10 +83,6 @@ bool CheckStudyOSVersion(const Study::Filter& filter, const base::Version& os_version); -// Checks whether a study is applicable for the given |country| per |filter|. -COMPONENT_EXPORT(VARIATIONS) -bool CheckStudyCountry(const Study::Filter& filter, const std::string& country); - // Checks whether a study is applicable given |is_enterprise| per |filter|. COMPONENT_EXPORT(VARIATIONS) bool CheckStudyEnterprise(const Study::Filter& filter,
diff --git a/content/browser/file_system/file_system_manager_impl.cc b/content/browser/file_system/file_system_manager_impl.cc index 461fd7a..c2082e5 100644 --- a/content/browser/file_system/file_system_manager_impl.cc +++ b/content/browser/file_system/file_system_manager_impl.cc
@@ -97,7 +97,6 @@ case storage::FileSystemType::kFileSystemTypeLocalForPlatformApp: case storage::FileSystemType::kFileSystemTypeForTransientFile: case storage::FileSystemType::kFileSystemTypePluginPrivate: - case storage::FileSystemType::kFileSystemTypeCloudDevice: case storage::FileSystemType::kFileSystemTypeProvided: case storage::FileSystemType::kFileSystemTypeDeviceMediaAsFileStorage: case storage::FileSystemType::kFileSystemTypeArcContent:
diff --git a/content/browser/metrics/histogram_synchronizer.cc b/content/browser/metrics/histogram_synchronizer.cc index 6fbedf2d..6210df1 100644 --- a/content/browser/metrics/histogram_synchronizer.cc +++ b/content/browser/metrics/histogram_synchronizer.cc
@@ -117,18 +117,10 @@ RequestContext* request = it->second; DCHECK_EQ(sequence_number, request->sequence_number_); - bool received_process_group_count = request->received_process_group_count_; - int unresponsive_processes = request->processes_pending_; - std::move(request->callback_).Run(); delete request; outstanding_requests_.Get().erase(it); - - UMA_HISTOGRAM_BOOLEAN("Histogram.ReceivedProcessGroupCount", - received_process_group_count); - UMA_HISTOGRAM_COUNTS_1M("Histogram.PendingProcessNotResponding", - unresponsive_processes); } // Delete all the entries in |outstanding_requests_| map.
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index b1a5e338..ac731d0 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -1939,6 +1939,10 @@ return false; } +bool RenderFrameHostImpl::HostedByFencedFrame() { + return frame_tree_node_->IsFencedFrame(); +} + void RenderFrameHostImpl::ForEachRenderFrameHost( FrameIterationCallback on_frame) { ForEachRenderFrameHost(FrameIterationWrapper(on_frame));
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h index ad16066..17e85f5 100644 --- a/content/browser/renderer_host/render_frame_host_impl.h +++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -318,6 +318,7 @@ PageImpl& GetPage() override; std::vector<RenderFrameHost*> GetFramesInSubtree() override; bool IsDescendantOf(RenderFrameHost*) override; + bool HostedByFencedFrame() override; void ForEachRenderFrameHost(FrameIterationCallback on_frame) override; void ForEachRenderFrameHost( FrameIterationAlwaysContinueCallback on_frame) override;
diff --git a/content/browser/service_worker/service_worker_internals_ui.cc b/content/browser/service_worker/service_worker_internals_ui.cc index 8ea6cc2..a1b86a7 100644 --- a/content/browser/service_worker/service_worker_internals_ui.cc +++ b/content/browser/service_worker/service_worker_internals_ui.cc
@@ -238,14 +238,6 @@ } } -// These values are persisted to logs. Entries should not be renumbered and -// numeric values should never be reused. -enum class ServiceWorkerInternalsLinkQuery { - kDevTools = 0, - kOther = 1, - kMaxValue = kOther, -}; - } // namespace class ServiceWorkerInternalsHandler::PartitionObserver @@ -356,14 +348,6 @@ ServiceWorkerInternalsUI::ServiceWorkerInternalsUI(WebUI* web_ui) : WebUIController(web_ui) { - std::string query = web_ui->GetWebContents()->GetURL().query(); - ServiceWorkerInternalsLinkQuery query_type = - ServiceWorkerInternalsLinkQuery::kOther; - if (query == "devtools") { - query_type = ServiceWorkerInternalsLinkQuery::kDevTools; - } - base::UmaHistogramEnumeration("ServiceWorker.InternalsPageAccessed", - query_type); WebUIDataSource* source = WebUIDataSource::Create(kChromeUIServiceWorkerInternalsHost); source->OverrideContentSecurityPolicy(
diff --git a/content/common/font_list_mac.mm b/content/common/font_list_mac.mm index 1171fe6f..9dea6d21 100644 --- a/content/common/font_list_mac.mm +++ b/content/common/font_list_mac.mm
@@ -58,8 +58,6 @@ base::ScopedCFTypeRef<CFArrayRef> normalized_descriptors( CTFontDescriptorCreateMatchingFontDescriptors( raw_descriptor, mandatory_attributes_.get())); - DCHECK(normalized_descriptors != nullptr) - << "CTFontDescriptorCreateMatchingFontDescriptors returned null"; return CopyLocalizedFamilyNameFrom(family_name, normalized_descriptors.get()); } @@ -82,18 +80,21 @@ private: // Returns the first font descriptor matching the given family name. // - // |descriptors| must be an array of CTFontDescriptors whose font family name + // `descriptors` must be an array of CTFontDescriptors whose font family name // attribute is populated. // + // `descriptors` may be null, representing an empty array. This case is + // handled because CTFontDescriptorCreateMatchingFontDescriptors() may + // return null, even on macOS 11. Discovery documented in crbug.com/1235042. + // // Returns null if none of the descriptors match. static base::ScopedCFTypeRef<CTFontDescriptorRef> FindFirstWithFamilyName( CFStringRef family_name, CFArrayRef descriptors) { DCHECK(family_name != nullptr); - DCHECK(descriptors != nullptr); - CFIndex normalized_descriptor_count = CFArrayGetCount(descriptors); - for (CFIndex i = 0; i < normalized_descriptor_count; ++i) { + CFIndex descriptor_count = descriptors ? CFArrayGetCount(descriptors) : 0; + for (CFIndex i = 0; i < descriptor_count; ++i) { CTFontDescriptorRef descriptor = base::mac::CFCastStrict<CTFontDescriptorRef>( CFArrayGetValueAtIndex(descriptors, i)); @@ -114,8 +115,12 @@ // Returns a localized font family name for the given family name. // - // |descriptors| must be an array of CTFontDescriptors representing all - // descriptors on the system matching the given family name. + // `descriptors` must be an array of normalized CTFontDescriptors representing + // all the font descriptors on the system matching the given family name. + // + // `descriptors` may be null, representing an empty array. This case is + // handled because CTFontDescriptorCreateMatchingFontDescriptors() may + // return null, even on macOS 11. Discovery documented in crbug.com/1235042. // // The given family name is returned as a fallback, if none of the descriptors // match the desired font family name. @@ -123,7 +128,6 @@ CFStringRef family_name, CFArrayRef descriptors) { DCHECK(family_name != nullptr); - DCHECK(descriptors != nullptr); base::ScopedCFTypeRef<CTFontDescriptorRef> descriptor = FindFirstWithFamilyName(family_name, descriptors); @@ -139,8 +143,20 @@ CTFontDescriptorCopyLocalizedAttribute(descriptor, kCTFontFamilyNameAttribute, /*language=*/nullptr))); - DCHECK(localized_family_name != nullptr) - << "CTFontDescriptorCopyLocalizedAttribute returned null"; + // CTFontDescriptorCopyLocalizedAttribute() is only supposed to return null + // if the desired attribute (family name) is not present. + // + // We found that the function may return null, even when given a normalized + // font descriptor whose attribute (family name) exists -- + // FindFirstWithFamilyName() only returns descriptors whose non-localized + // family name attribute is equal to a given string. Discovery documented in + // crbug.com/1235090. + if (localized_family_name == nullptr) { + DLOG(WARNING) << "Will use non-localized family name for font family: " + << family_name; + return base::ScopedCFTypeRef<CFStringRef>(family_name, + base::scoped_policy::RETAIN); + } return localized_family_name; } @@ -202,7 +218,7 @@ continue; base::ScopedCFTypeRef<CFStringRef> cf_normalized_family_name = - resolver.CopyLocalizedFamilyName(base::mac::NSToCFCast(family_name)); + resolver.CopyLocalizedFamilyName(family_name_cf); DCHECK(cf_normalized_family_name != nullptr) << "FontFamilyResolver::CopyLocalizedFamilyName returned null"; family_name_map[base::mac::CFToNSCast(cf_normalized_family_name)] =
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h index 986fb50d..ab17451 100644 --- a/content/public/browser/render_frame_host.h +++ b/content/public/browser/render_frame_host.h
@@ -266,6 +266,14 @@ // This does not consider inner frame trees. virtual bool IsDescendantOf(RenderFrameHost* ancestor) = 0; + // Fenced frames (meta-bug https://crbug.com/1111084): + // Returns if this document is directly hosted by a fenced frame. + // + // In particular, this always returns false for document loaded inside an + // <iframe>, even if the <iframe> is part of a document loaded inside a fenced + // iframe. + virtual bool HostedByFencedFrame() = 0; + // |ForEachRenderFrameHost| traverses this RenderFrameHost and all of its // descendants, including frames in any inner frame trees, in breadth-first // order. Examples of features that have inner frame trees are portals or
diff --git a/content/public/browser/web_contents_receiver_set.h b/content/public/browser/web_contents_receiver_set.h index 85c8875c..268b6e5 100644 --- a/content/public/browser/web_contents_receiver_set.h +++ b/content/public/browser/web_contents_receiver_set.h
@@ -23,9 +23,6 @@ namespace chrome_browser_net { class NetErrorTabHelper; } -namespace extensions { -class ExtensionFrameHost; -} // namespace extensions namespace printing { class PrintManager; } @@ -100,7 +97,6 @@ friend class ::EmbeddedSearchClientFactoryImpl; friend class ::chrome_browser_net::NetErrorTabHelper; - friend class ::extensions::ExtensionFrameHost; friend class ::printing::PrintManager; friend class ::subresource_redirect::SubresourceRedirectObserver; friend class ScreenOrientationProvider;
diff --git a/device/base/features.cc b/device/base/features.cc index cd871b3..59506ef 100644 --- a/device/base/features.cc +++ b/device/base/features.cc
@@ -14,11 +14,6 @@ #endif // defined(OS_MAC) #if defined(OS_WIN) -const base::Feature kNewUsbBackend{"NewUsbBackend", - base::FEATURE_ENABLED_BY_DEFAULT}; -#endif // defined(OS_WIN) - -#if defined(OS_WIN) const base::Feature kNewBLEWinImplementation{"NewBLEWinImplementation", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/device/base/features.h b/device/base/features.h index 80bf44d..4105f3c 100644 --- a/device/base/features.h +++ b/device/base/features.h
@@ -12,9 +12,9 @@ namespace device { -#if defined(OS_WIN) || defined(OS_MAC) +#if defined(OS_MAC) DEVICE_BASE_EXPORT extern const base::Feature kNewUsbBackend; -#endif // defined(OS_WIN) || defined(OS_MAC) +#endif // defined(OS_MAC) #if defined(OS_WIN) DEVICE_BASE_EXPORT extern const base::Feature kNewBLEWinImplementation;
diff --git a/device/bluetooth/android/java/src/org/chromium/device/bluetooth/ChromeBluetoothAdapter.java b/device/bluetooth/android/java/src/org/chromium/device/bluetooth/ChromeBluetoothAdapter.java index 924d22d7..7701ec4 100644 --- a/device/bluetooth/android/java/src/org/chromium/device/bluetooth/ChromeBluetoothAdapter.java +++ b/device/bluetooth/android/java/src/org/chromium/device/bluetooth/ChromeBluetoothAdapter.java
@@ -18,7 +18,6 @@ import android.os.ParcelUuid; import android.util.SparseArray; -import org.chromium.base.BuildInfo; import org.chromium.base.Log; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNIAdditionalImport; @@ -219,14 +218,11 @@ return false; } - // TODO(b/183501112): Remove the targetsAtLeastS() check and replace these permission - // strings with the actual Manifest constants once Chrome starts compiling against the S - // SDK. - if (BuildInfo.targetsAtLeastS() && BuildInfo.isAtLeastS()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { Context context = mAdapter.getContext(); - return context.checkCallingOrSelfPermission("android.permission.BLUETOOTH_SCAN") + return context.checkCallingOrSelfPermission(Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED - && context.checkCallingOrSelfPermission("android.permission.BLUETOOTH_CONNECT") + && context.checkCallingOrSelfPermission(Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED; }
diff --git a/device/bluetooth/android/java/src/org/chromium/device/bluetooth/Wrappers.java b/device/bluetooth/android/java/src/org/chromium/device/bluetooth/Wrappers.java index 65df0ff..b261a30 100644 --- a/device/bluetooth/android/java/src/org/chromium/device/bluetooth/Wrappers.java +++ b/device/bluetooth/android/java/src/org/chromium/device/bluetooth/Wrappers.java
@@ -25,7 +25,6 @@ import android.os.ParcelUuid; import android.util.SparseArray; -import org.chromium.base.BuildInfo; import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.ThreadUtils; @@ -126,16 +125,13 @@ // granted in the manifest. In Android S and later the BLUETOOTH_SCAN and // BLUETOOTH_CONNECT permissions can be requested at runtime after fetching the default // adapter. - // - // TODO(b/183501112): Remove the targetsAtLeastS() check once Chrome starts compiling - // against the S SDK. - if (!BuildInfo.targetsAtLeastS() || !BuildInfo.isAtLeastS()) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { final boolean hasPermission = ContextUtils.getApplicationContext().checkCallingOrSelfPermission( - "android.permission.BLUETOOTH") + Manifest.permission.BLUETOOTH) == PackageManager.PERMISSION_GRANTED && ContextUtils.getApplicationContext().checkCallingOrSelfPermission( - "android.permission.BLUETOOTH_ADMIN") + Manifest.permission.BLUETOOTH_ADMIN) == PackageManager.PERMISSION_GRANTED; if (!hasPermission) {
diff --git a/docs/security/security-labels.md b/docs/security/security-labels.md index bfd6838c..7dca7f6b 100644 --- a/docs/security/security-labels.md +++ b/docs/security/security-labels.md
@@ -33,10 +33,10 @@ * **FoundIn-#**: Designates which milestones of Chrome are impacted by the bug. Multiple labels may be set, but the most important one is the earliest affected milestone. -* **Security_Impact-**{**Head**, **Beta**, **Stable**, **None**}: Derived -from **FoundIn**, this label specifies the earliest affected release channel. -Should not normally be set by humans, except in the case of **None** which -means that the bug is in a disabled feature, or otherwise doesn't impact +* **Security_Impact-**{**Head**, **Beta**, **Stable**, **Extended**, **None**}: +Derived from **FoundIn**, this label specifies the earliest affected release +channel. Should not normally be set by humans, except in the case of **None** +which means that the bug is in a disabled feature, or otherwise doesn't impact Chrome: see the section below for more details. * Note that **Security_Severity** should still be set on **Security_Impact-None** issues, as if the feature were enabled or the @@ -215,8 +215,8 @@ ### Remove Invalid **Security_Impact-X** Labels There should be exactly one **Security_Impact-X** label and it should be one of -the 4 valid impact labels (None, Stable, Beta, Head). This rule removes any -invalid and excess impact labels. +the 5 valid impact labels (None, Extended, Stable, Beta, Head). This rule +removes any invalid and excess impact labels. ### Adjust **Security_Impact-X** To Match FoundIn Labels @@ -228,7 +228,7 @@ Bugs that are labelled with milestones earlier than the current milestone will be relabeled to set the label for the current milestone and -**Security_Impact-Stable**. +**Security_Impact-Extended**. Bugs that carry a **Security_Impact-X** label but are missing a milestone label will be assigned the **M-#** label corresponding to the respective milestone. @@ -300,8 +300,8 @@ that the bug is in the component **Blink>DOM**, and such bugs should be labeled as applying to all OSs except iOS (where Blink is not used): **OS-**{**Linux**, **Windows**, **Android**, **Chrome**, **Fuchsia**}. Sheriffbot will check -whether 27 is the current stable, beta or head milestone; let's assume -**Security_Impact-Stable** is applied by Sheriffbot this time. +whether 27 is the current extended stable, stable, beta or head milestone; let's +assume **Security_Impact-Stable** is applied by Sheriffbot this time. 1. Within a day or two, the sheriff was able to get the bug assigned and — oh joy! — fixed very quickly. When the bug's status changes to **Fixed**, Sheriffbot will add the **Merge-Requested** label, and will change
diff --git a/extensions/browser/api/storage/storage_api.cc b/extensions/browser/api/storage/storage_api.cc index 5f4737d..740db2c 100644 --- a/extensions/browser/api/storage/storage_api.cc +++ b/extensions/browser/api/storage/storage_api.cc
@@ -19,9 +19,11 @@ #include "content/public/browser/browser_thread.h" #include "extensions/browser/api/storage/session_storage_manager.h" #include "extensions/browser/api/storage/storage_frontend.h" +#include "extensions/browser/extension_prefs.h" #include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/quota_service.h" #include "extensions/common/api/storage.h" +#include "extensions/common/features/feature.h" #include "extensions/common/features/feature_channel.h" namespace extensions { @@ -32,6 +34,9 @@ constexpr char kSessionStorageManagerKeyName[] = "StorageAPI SessionStorageManager"; +constexpr PrefMap kPrefSessionStorageAccessLevel = { + "storage_session_access_level", PrefType::kInteger, + PrefScope::kExtensionSpecific}; // Returns a vector of any strings within the given list. std::vector<std::string> GetKeysFromList(const base::Value& list) { @@ -152,6 +157,12 @@ // Session is the only storage area that does not use ValueStore, and will // return synchronously. if (storage_area_ == StorageAreaNamespace::kSession) { + // Currently only `session` can restrict the storage access. This call will + // be moved after the other storage areas allow it. + if (!IsAccessToStorageAllowed()) { + return RespondNow( + Error("Access to storage is not allowed from this context.")); + } return RespondNow(RunInSession()); } @@ -230,6 +241,23 @@ } } +bool SettingsFunction::IsAccessToStorageAllowed() { + ExtensionPrefs* prefs = ExtensionPrefs::Get(browser_context()); + // Default access level is only secure contexts. + int access_level = api::storage::ACCESS_LEVEL_TRUSTED_CONTEXTS; + prefs->ReadPrefAsInteger(extension()->id(), kPrefSessionStorageAccessLevel, + &access_level); + + // Only a blessed extension context is considered trusted. + if (access_level == api::storage::ACCESS_LEVEL_TRUSTED_CONTEXTS) + return source_context_type() == Feature::BLESSED_EXTENSION_CONTEXT; + + // All contexts are allowed. + DCHECK_EQ(api::storage::ACCESS_LEVEL_TRUSTED_AND_UNTRUSTED_CONTEXTS, + access_level); + return true; +} + ExtensionFunction::ResponseValue StorageStorageAreaGetFunction::RunWithStorage( ValueStore* storage) { TRACE_EVENT1("browser", "StorageStorageAreaGetFunction::RunWithStorage", @@ -491,4 +519,34 @@ GetModificationQuotaLimitHeuristics(heuristics); } +ExtensionFunction::ResponseValue +StorageStorageAreaSetAccessLevelFunction::RunWithStorage(ValueStore* storage) { + // Not supported. Should return error. + return Error("This StorageArea is not available for setting access level"); +} + +ExtensionFunction::ResponseValue +StorageStorageAreaSetAccessLevelFunction::RunInSession() { + if (source_context_type() != Feature::BLESSED_EXTENSION_CONTEXT) + return Error("Context cannot set the storage access level"); + + std::unique_ptr<api::storage::StorageArea::SetAccessLevel::Params> params( + api::storage::StorageArea::SetAccessLevel::Params::Create(*args_)); + + if (!params) + return BadMessage(); + + // The parsing code ensures `access_level` is sane. + DCHECK(params->access_options.access_level == + api::storage::ACCESS_LEVEL_TRUSTED_CONTEXTS || + params->access_options.access_level == + api::storage::ACCESS_LEVEL_TRUSTED_AND_UNTRUSTED_CONTEXTS); + + ExtensionPrefs* prefs = ExtensionPrefs::Get(browser_context()); + prefs->SetIntegerPref(extension_id(), kPrefSessionStorageAccessLevel, + params->access_options.access_level); + + return NoArguments(); +} + } // namespace extensions
diff --git a/extensions/browser/api/storage/storage_api.h b/extensions/browser/api/storage/storage_api.h index fea87729..cd1888b 100644 --- a/extensions/browser/api/storage/storage_api.h +++ b/extensions/browser/api/storage/storage_api.h
@@ -49,6 +49,9 @@ void OnSessionSettingsChanged( std::vector<SessionStorageManager::ValueChange> changes); + // Returns whether the caller's context has access to the storage or not. + bool IsAccessToStorageAllowed(); + private: // Called via PostTask from Run. Calls RunWithStorage and then // SendResponse with its success value. @@ -136,6 +139,23 @@ ResponseValue RunInSession() override; }; +class StorageStorageAreaSetAccessLevelFunction : public SettingsFunction { + public: + DECLARE_EXTENSION_FUNCTION("storage.setAccessLevel", STORAGE_SETACCESSLEVEL) + StorageStorageAreaSetAccessLevelFunction() = default; + StorageStorageAreaSetAccessLevelFunction( + const StorageStorageAreaSetAccessLevelFunction&) = delete; + StorageStorageAreaSetAccessLevelFunction& operator=( + const StorageStorageAreaSetAccessLevelFunction&) = delete; + + protected: + ~StorageStorageAreaSetAccessLevelFunction() override = default; + + // SettingsFunction: + ResponseValue RunWithStorage(ValueStore* storage) override; + ResponseValue RunInSession() override; +}; + } // namespace extensions #endif // EXTENSIONS_BROWSER_API_STORAGE_STORAGE_API_H_
diff --git a/extensions/browser/extension_frame_host.cc b/extensions/browser/extension_frame_host.cc index 25222de..0845696 100644 --- a/extensions/browser/extension_frame_host.cc +++ b/extensions/browser/extension_frame_host.cc
@@ -13,13 +13,16 @@ namespace extensions { ExtensionFrameHost::ExtensionFrameHost(content::WebContents* web_contents) - : web_contents_(web_contents), - receivers_(web_contents, - this, - content::WebContentsFrameReceiverSetPassKey()) {} + : web_contents_(web_contents), receivers_(web_contents, this) {} ExtensionFrameHost::~ExtensionFrameHost() = default; +void ExtensionFrameHost::BindLocalFrameHost( + mojo::PendingAssociatedReceiver<mojom::LocalFrameHost> receiver, + content::RenderFrameHost* rfh) { + receivers_.Bind(rfh, std::move(receiver)); +} + void ExtensionFrameHost::RequestScriptInjectionPermission( const std::string& extension_id, mojom::InjectionType script_type,
diff --git a/extensions/browser/extension_frame_host.h b/extensions/browser/extension_frame_host.h index d8a6c72..cf1c869 100644 --- a/extensions/browser/extension_frame_host.h +++ b/extensions/browser/extension_frame_host.h
@@ -5,7 +5,7 @@ #ifndef EXTENSIONS_BROWSER_EXTENSION_FRAME_HOST_H_ #define EXTENSIONS_BROWSER_EXTENSION_FRAME_HOST_H_ -#include "content/public/browser/web_contents_receiver_set.h" +#include "content/public/browser/render_frame_host_receiver_set.h" #include "extensions/common/mojom/frame.mojom.h" #include "extensions/common/mojom/injection_type.mojom-shared.h" #include "extensions/common/mojom/run_location.mojom-shared.h" @@ -26,6 +26,10 @@ ExtensionFrameHost& operator=(const ExtensionFrameHost&) = delete; ~ExtensionFrameHost() override; + void BindLocalFrameHost( + mojo::PendingAssociatedReceiver<mojom::LocalFrameHost> receiver, + content::RenderFrameHost* rfh); + // mojom::LocalFrameHost: void RequestScriptInjectionPermission( const std::string& extension_id, @@ -46,7 +50,7 @@ // This raw pointer is safe to use because ExtensionWebContentsObserver whose // lifetime is tied to the WebContents owns this instance. content::WebContents* web_contents_; - content::WebContentsFrameReceiverSet<mojom::LocalFrameHost> receivers_; + content::RenderFrameHostReceiverSet<mojom::LocalFrameHost> receivers_; }; } // namespace extensions
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index dd8d27fb..84727b6 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1149,7 +1149,7 @@ DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONSEND = 1088, DELETED_DATAREDUCTIONPROXY_GETDATAUSAGE = 1089, DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONGETDEVICEADDRESS = 1090, - TABCAPTURE_CAPTUREOFFSCREENTAB = 1091, + DELETED_TABCAPTURE_CAPTUREOFFSCREENTAB = 1091, LANGUAGESETTINGSPRIVATE_ADDSPELLCHECKWORD = 1092, LANGUAGESETTINGSPRIVATE_REMOVESPELLCHECKWORD = 1093, SETTINGSPRIVATE_GETDEFAULTZOOMFUNCTION = 1094, @@ -1627,6 +1627,7 @@ SCRIPTING_GETREGISTEREDCONTENTSCRIPTS = 1564, OS_TELEMETRY_GETVPDINFO = 1565, ACCESSIBILITY_PRIVATE_MAGNIFIERCENTERONPOINT = 1566, + STORAGE_SETACCESSLEVEL = 1567, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/extensions/browser/extension_web_contents_observer.cc b/extensions/browser/extension_web_contents_observer.cc index a0846eb..56061826 100644 --- a/extensions/browser/extension_web_contents_observer.cc +++ b/extensions/browser/extension_web_contents_observer.cc
@@ -39,6 +39,22 @@ web_contents); } +// static +void ExtensionWebContentsObserver::BindLocalFrameHost( + mojo::PendingAssociatedReceiver<mojom::LocalFrameHost> receiver, + content::RenderFrameHost* rfh) { + auto* web_contents = content::WebContents::FromRenderFrameHost(rfh); + if (!web_contents) + return; + auto* observer = GetForWebContents(web_contents); + if (!observer) + return; + auto* efh = observer->extension_frame_host_.get(); + if (!efh) + return; + efh->BindLocalFrameHost(std::move(receiver), rfh); +} + std::unique_ptr<ExtensionFrameHost> ExtensionWebContentsObserver::CreateExtensionFrameHost( content::WebContents* web_contents) {
diff --git a/extensions/browser/extension_web_contents_observer.h b/extensions/browser/extension_web_contents_observer.h index 8e36f04..7e29d02 100644 --- a/extensions/browser/extension_web_contents_observer.h +++ b/extensions/browser/extension_web_contents_observer.h
@@ -59,6 +59,12 @@ static ExtensionWebContentsObserver* GetForWebContents( content::WebContents* web_contents); + // Binds the LocalFrameHost interface to the ExtensionFrameHost associated + // with the RenderFrameHost. + static void BindLocalFrameHost( + mojo::PendingAssociatedReceiver<mojom::LocalFrameHost> receiver, + content::RenderFrameHost* rfh); + // This must be called by clients directly after the EWCO has been created. void Initialize();
diff --git a/extensions/common/api/storage.json b/extensions/common/api/storage.json index 6721d18..b235a59 100644 --- a/extensions/common/api/storage.json +++ b/extensions/common/api/storage.json
@@ -9,6 +9,13 @@ "unprivileged": true, "types": [ { + "id": "AccessLevel", + "nodoc": true, + "type": "string", + "enum": ["TRUSTED_CONTEXTS", "TRUSTED_AND_UNTRUSTED_CONTEXTS"], + "description": "The storage area's access level." + }, + { "id": "StorageChange", "type": "object", "properties": { @@ -145,6 +152,29 @@ "parameters": [], "optional": true } + }, { + "name": "setAccessLevel", + "nodoc": true, + "type": "function", + "description": "Sets the desired access level for the storage area. The default will be only trusted contexts.", + "parameters": [ + { + "type": "object", + "name": "accessOptions", + "properties": { + "accessLevel": { + "$ref": "AccessLevel", + "description": "The access level of the storage area." + } + } + } + ], + "returns_async": { + "name": "callback", + "description": "Callback on success, or on failure (in which case $(ref:runtime.lastError) will be set).", + "parameters": [], + "optional": true + } } ], "events": [
diff --git a/extensions/renderer/storage_area.cc b/extensions/renderer/storage_area.cc index ccaffa4..d1e57cef 100644 --- a/extensions/renderer/storage_area.cc +++ b/extensions/renderer/storage_area.cc
@@ -192,6 +192,9 @@ .SetMethod("remove", &SessionStorageArea::Remove) .SetMethod("clear", &SessionStorageArea::Clear) .SetMethod("getBytesInUse", &SessionStorageArea::GetBytesInUse) + // TODO(crbug.com/1227410): Only expose `setAccessLevel` in privileged + // contexts. + .SetMethod("setAccessLevel", &SessionStorageArea::SetAccessLevel) .SetProperty("onChanged", &SessionStorageArea::GetOnChangedEvent) .SetValue("QUOTA_BYTES", api::storage::session::QUOTA_BYTES); } @@ -199,6 +202,10 @@ private: DEFINE_STORAGE_AREA_HANDLERS() + void SetAccessLevel(gin::Arguments* arguments) { + storage_area_.HandleFunctionCall("setAccessLevel", arguments); + } + StorageArea storage_area_; DISALLOW_COPY_AND_ASSIGN(SessionStorageArea);
diff --git a/extensions/shell/browser/shell_content_browser_client.cc b/extensions/shell/browser/shell_content_browser_client.cc index 6750e7c..dfece5f 100644 --- a/extensions/shell/browser/shell_content_browser_client.cc +++ b/extensions/shell/browser/shell_content_browser_client.cc
@@ -33,6 +33,7 @@ #include "extensions/browser/extension_navigation_ui_data.h" #include "extensions/browser/extension_protocols.h" #include "extensions/browser/extension_registry.h" +#include "extensions/browser/extension_web_contents_observer.h" #include "extensions/browser/guest_view/extensions_guest_view_message_filter.h" #include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "extensions/browser/process_map.h" @@ -234,6 +235,21 @@ &EventRouter::BindForRenderer, render_process_host->GetID())); } +bool ShellContentBrowserClient::BindAssociatedReceiverFromFrame( + content::RenderFrameHost* render_frame_host, + const std::string& interface_name, + mojo::ScopedInterfaceEndpointHandle* handle) { + if (interface_name == extensions::mojom::LocalFrameHost::Name_) { + ExtensionWebContentsObserver::BindLocalFrameHost( + mojo::PendingAssociatedReceiver<extensions::mojom::LocalFrameHost>( + std::move(*handle)), + render_frame_host); + return true; + } + + return false; +} + std::vector<std::unique_ptr<content::NavigationThrottle>> ShellContentBrowserClient::CreateThrottlesForNavigation( content::NavigationHandle* navigation_handle) {
diff --git a/extensions/shell/browser/shell_content_browser_client.h b/extensions/shell/browser/shell_content_browser_client.h index fc358473..02cb3ae 100644 --- a/extensions/shell/browser/shell_content_browser_client.h +++ b/extensions/shell/browser/shell_content_browser_client.h
@@ -76,6 +76,10 @@ service_manager::BinderRegistry* registry, blink::AssociatedInterfaceRegistry* associated_registry, content::RenderProcessHost* render_process_host) override; + bool BindAssociatedReceiverFromFrame( + content::RenderFrameHost* render_frame_host, + const std::string& interface_name, + mojo::ScopedInterfaceEndpointHandle* handle) override; std::vector<std::unique_ptr<content::NavigationThrottle>> CreateThrottlesForNavigation( content::NavigationHandle* navigation_handle) override;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 0dd92a8..0f272f3 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -4597,9 +4597,6 @@ if (!workarounds().dont_initialize_uninitialized_locals) driver_bug_workarounds |= SH_INITIALIZE_UNINITIALIZED_LOCALS; - resources.WEBGL_debug_shader_precision = - group_->gpu_preferences().emulate_shader_precision; - ShShaderOutput shader_output_language = ShaderTranslator::GetShaderOutputLanguageForContext(gl_version_info());
diff --git a/gpu/command_buffer/service/gpu_switches.cc b/gpu/command_buffer/service/gpu_switches.cc index a12e953..4ae6ba6 100644 --- a/gpu/command_buffer/service/gpu_switches.cc +++ b/gpu/command_buffer/service/gpu_switches.cc
@@ -65,10 +65,6 @@ // compilation info logs. const char kGLShaderIntermOutput[] = "gl-shader-interm-output"; -// Emulate ESSL lowp and mediump float precisions by mutating the shaders to -// round intermediate values in ANGLE. -const char kEmulateShaderPrecision[] = "emulate-shader-precision"; - // Enable Vulkan support and select Vulkan implementation, must also have // ENABLE_VULKAN defined. This only initializes Vulkan, the flag // --enable-features=Vulkan must also be used to select Vulkan for compositing
diff --git a/gpu/command_buffer/service/gpu_switches.h b/gpu/command_buffer/service/gpu_switches.h index b3b7d99..e87ef80 100644 --- a/gpu/command_buffer/service/gpu_switches.h +++ b/gpu/command_buffer/service/gpu_switches.h
@@ -29,7 +29,6 @@ GPU_EXPORT extern const char kDisableGpuShaderDiskCache[]; GPU_EXPORT extern const char kEnableThreadedTextureMailboxes[]; GPU_EXPORT extern const char kGLShaderIntermOutput[]; -GPU_EXPORT extern const char kEmulateShaderPrecision[]; GPU_EXPORT extern const char kUseVulkan[]; GPU_EXPORT extern const char kVulkanImplementationNameNative[]; GPU_EXPORT extern const char kVulkanImplementationNameSwiftshader[];
diff --git a/gpu/command_buffer/service/service_utils.cc b/gpu/command_buffer/service/service_utils.cc index c5fea15..9bd4406 100644 --- a/gpu/command_buffer/service/service_utils.cc +++ b/gpu/command_buffer/service/service_utils.cc
@@ -147,8 +147,6 @@ command_line->HasSwitch(switches::kEnableThreadedTextureMailboxes); gpu_preferences.gl_shader_interm_output = command_line->HasSwitch(switches::kGLShaderIntermOutput); - gpu_preferences.emulate_shader_precision = - command_line->HasSwitch(switches::kEmulateShaderPrecision); gpu_preferences.enable_gpu_service_logging = command_line->HasSwitch(switches::kEnableGPUServiceLogging); gpu_preferences.enable_gpu_service_tracing =
diff --git a/gpu/config/gpu_preferences.h b/gpu/config/gpu_preferences.h index 7e46e68..8131a0d 100644 --- a/gpu/config/gpu_preferences.h +++ b/gpu/config/gpu_preferences.h
@@ -165,10 +165,6 @@ // compilation info logs. bool gl_shader_interm_output = false; - // Emulate ESSL lowp and mediump float precisions by mutating the shaders to - // round intermediate values in ANGLE. - bool emulate_shader_precision = false; - // =================================== // Settings from //gpu/config/gpu_switches.h
diff --git a/gpu/config/gpu_preferences_unittest.cc b/gpu/config/gpu_preferences_unittest.cc index 07c0ae6..f2db765 100644 --- a/gpu/config/gpu_preferences_unittest.cc +++ b/gpu/config/gpu_preferences_unittest.cc
@@ -59,7 +59,6 @@ EXPECT_EQ(left.enable_threaded_texture_mailboxes, right.enable_threaded_texture_mailboxes); EXPECT_EQ(left.gl_shader_interm_output, right.gl_shader_interm_output); - EXPECT_EQ(left.emulate_shader_precision, right.emulate_shader_precision); EXPECT_EQ(left.enable_gpu_service_logging, right.enable_gpu_service_logging); EXPECT_EQ(left.enable_gpu_service_tracing, right.enable_gpu_service_tracing); EXPECT_EQ(left.use_passthrough_cmd_decoder, @@ -163,7 +162,6 @@ GPU_PREFERENCES_FIELD(disable_gpu_shader_disk_cache, true) GPU_PREFERENCES_FIELD(enable_threaded_texture_mailboxes, true) GPU_PREFERENCES_FIELD(gl_shader_interm_output, true) - GPU_PREFERENCES_FIELD(emulate_shader_precision, true) GPU_PREFERENCES_FIELD(enable_gpu_service_logging, true) GPU_PREFERENCES_FIELD(enable_gpu_service_tracing, true) GPU_PREFERENCES_FIELD(use_passthrough_cmd_decoder, true) @@ -259,7 +257,6 @@ PRINT_BOOL(disable_gpu_shader_disk_cache); PRINT_BOOL(enable_threaded_texture_mailboxes); PRINT_BOOL(gl_shader_interm_output); - PRINT_BOOL(emulate_shader_precision); PRINT_BOOL(enable_gpu_service_logging); PRINT_BOOL(enable_gpu_service_tracing); PRINT_BOOL(use_passthrough_cmd_decoder);
diff --git a/gpu/ipc/common/gpu_preferences.mojom b/gpu/ipc/common/gpu_preferences.mojom index a4a92e0..f95dcac 100644 --- a/gpu/ipc/common/gpu_preferences.mojom +++ b/gpu/ipc/common/gpu_preferences.mojom
@@ -69,7 +69,6 @@ bool disable_gpu_shader_disk_cache; bool enable_threaded_texture_mailboxes; bool gl_shader_interm_output; - bool emulate_shader_precision; bool enable_android_surface_control; bool enable_gpu_service_logging; bool enable_gpu_service_tracing;
diff --git a/gpu/ipc/common/gpu_preferences_mojom_traits.h b/gpu/ipc/common/gpu_preferences_mojom_traits.h index bf109319..e3e7cde 100644 --- a/gpu/ipc/common/gpu_preferences_mojom_traits.h +++ b/gpu/ipc/common/gpu_preferences_mojom_traits.h
@@ -170,7 +170,6 @@ out->enable_threaded_texture_mailboxes = prefs.enable_threaded_texture_mailboxes(); out->gl_shader_interm_output = prefs.gl_shader_interm_output(); - out->emulate_shader_precision = prefs.emulate_shader_precision(); out->enable_android_surface_control = prefs.enable_android_surface_control(); out->enable_gpu_service_logging = prefs.enable_gpu_service_logging(); @@ -330,9 +329,6 @@ static bool gl_shader_interm_output(const gpu::GpuPreferences& prefs) { return prefs.gl_shader_interm_output; } - static bool emulate_shader_precision(const gpu::GpuPreferences& prefs) { - return prefs.emulate_shader_precision; - } static bool enable_android_surface_control(const gpu::GpuPreferences& prefs) { return prefs.enable_android_surface_control; }
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index eacdbe9..d74a4f01 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -100,16 +100,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -202,16 +192,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -304,16 +284,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -406,16 +376,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -508,16 +468,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -610,16 +560,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -712,16 +652,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -814,16 +744,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -916,16 +836,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -1019,16 +929,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -1127,16 +1027,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -1230,16 +1120,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -1333,16 +1213,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -1436,16 +1306,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -1539,16 +1399,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -1642,16 +1492,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -1745,16 +1585,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -1848,16 +1678,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -1951,16 +1771,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -2054,16 +1864,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -2157,16 +1957,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -2259,16 +2049,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -2362,16 +2142,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -2465,16 +2235,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -2568,16 +2328,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -2671,16 +2421,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -2774,16 +2514,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -2876,16 +2606,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -2979,16 +2699,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -3086,16 +2796,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -3194,16 +2894,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -3297,16 +2987,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -3400,16 +3080,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -3503,16 +3173,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -3600,16 +3260,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -3703,16 +3353,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -3806,16 +3446,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -3909,16 +3539,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -4012,16 +3632,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -4115,16 +3725,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -4218,16 +3818,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -4320,16 +3910,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -4432,16 +4012,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -4529,16 +4099,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -4626,16 +4186,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -4728,16 +4278,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -4830,16 +4370,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -4926,16 +4456,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5022,16 +4542,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5118,16 +4628,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5214,16 +4714,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5313,16 +4803,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5412,16 +4892,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5508,16 +4978,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5604,16 +5064,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5700,16 +5150,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5796,16 +5236,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5892,16 +5322,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -5994,16 +5414,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -6096,16 +5506,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -6198,16 +5598,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -6294,16 +5684,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -6390,16 +5770,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -6486,16 +5856,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -6582,16 +5942,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -6684,16 +6034,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -6786,16 +6126,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -6882,16 +6212,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -6978,16 +6298,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -7074,16 +6384,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -7170,16 +6470,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -7273,16 +6563,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -7376,16 +6656,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -7478,16 +6748,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -7581,16 +6841,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -7684,16 +6934,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -7787,16 +7027,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -7890,16 +7120,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -7993,16 +7213,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -8096,16 +7306,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -8199,16 +7399,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -8302,16 +7492,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -8402,16 +7582,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -8502,16 +7672,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -8605,16 +7765,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -8708,16 +7858,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -8811,16 +7951,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -8914,16 +8044,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -9017,16 +8137,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -9120,16 +8230,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -9222,16 +8322,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -9324,16 +8414,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -9423,16 +8503,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -9522,16 +8592,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -9624,16 +8684,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -9726,16 +8776,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -9823,16 +8863,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -9920,16 +8950,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -10023,16 +9043,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -10125,16 +9135,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -10227,16 +9227,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -10329,16 +9319,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -10431,16 +9411,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -10532,16 +9502,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -10634,16 +9594,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -10736,16 +9686,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -10838,16 +9778,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -10940,16 +9870,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -11042,16 +9962,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -11144,16 +10054,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -11244,16 +10144,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -11345,16 +10235,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -11448,16 +10328,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -11551,16 +10421,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -11654,16 +10514,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -11761,16 +10611,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -11864,16 +10704,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -11966,16 +10796,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -12068,16 +10888,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -12171,16 +10981,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -12274,16 +11074,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -12376,16 +11166,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -12478,16 +11258,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -12583,16 +11353,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -12688,16 +11448,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -12791,16 +11541,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -12894,16 +11634,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -12997,16 +11727,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -13099,16 +11819,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -13202,16 +11912,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -13305,16 +12005,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -13401,16 +12091,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -13498,16 +12178,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -13595,16 +12265,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -13692,16 +12352,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -13795,16 +12445,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -13892,16 +12532,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -13989,16 +12619,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -14086,16 +12706,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -14183,16 +12793,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -14286,16 +12886,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -14383,16 +12973,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -14480,16 +13060,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -14577,16 +13147,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -14674,16 +13234,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -14777,16 +13327,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -14880,16 +13420,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -14983,16 +13513,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -15086,16 +13606,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -15189,16 +13699,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -15285,16 +13785,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -15388,16 +13878,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -15490,16 +13970,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -15594,16 +14064,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -15697,16 +14157,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -15800,16 +14250,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -15903,16 +14343,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -16006,16 +14436,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -16102,16 +14522,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -16205,16 +14615,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -16307,16 +14707,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -16410,16 +14800,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -16513,16 +14893,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -16615,16 +14985,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -16717,16 +15077,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -16817,16 +15167,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -16917,16 +15257,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17017,16 +15347,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17118,16 +15438,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17217,16 +15527,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17316,16 +15616,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17414,16 +15704,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17510,16 +15790,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17607,16 +15877,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17704,16 +15964,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17801,16 +16051,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17898,16 +16138,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -17998,16 +16228,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -18095,16 +16315,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -18192,16 +16402,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -18289,16 +16489,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -18386,16 +16576,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -18483,16 +16663,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -18580,16 +16750,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -18680,16 +16840,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -18777,16 +16927,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -18873,16 +17013,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -18969,16 +17099,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -19065,16 +17185,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -19164,16 +17274,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -19263,16 +17363,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -19359,16 +17449,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -19455,16 +17535,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -19551,16 +17621,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -19647,16 +17707,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -19743,16 +17793,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -19839,16 +17879,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -19935,16 +17965,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -20038,16 +18058,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -20141,16 +18151,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -20243,16 +18243,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -20345,16 +18335,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -20447,16 +18427,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -20548,16 +18518,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -20651,16 +18611,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -20754,16 +18704,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -20857,16 +18797,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -20959,16 +18889,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -21061,16 +18981,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -21166,16 +19076,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -21268,16 +19168,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -21372,16 +19262,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -21477,16 +19357,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -21581,16 +19451,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -21685,16 +19545,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -21790,16 +19640,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -21894,16 +19734,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -21995,16 +19825,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -22092,16 +19912,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -22189,16 +19999,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -22286,16 +20086,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -22383,16 +20173,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -22480,16 +20260,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -22577,16 +20347,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -22674,16 +20434,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -22771,16 +20521,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -22868,16 +20608,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -22965,16 +20695,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -23062,16 +20782,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -23159,16 +20869,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -23256,16 +20956,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -23352,16 +21042,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -23449,16 +21129,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -23546,16 +21216,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -23643,16 +21303,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -23740,16 +21390,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -23837,16 +21477,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -23935,16 +21565,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -24033,16 +21653,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -24131,16 +21741,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -24229,16 +21829,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -24326,16 +21916,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -24422,16 +22002,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -24519,16 +22089,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -24616,16 +22176,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -24713,16 +22263,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -24810,16 +22350,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -24907,16 +22437,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -25003,16 +22523,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -25100,16 +22610,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -25197,16 +22697,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -25294,16 +22784,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -25395,16 +22875,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -25496,16 +22966,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -25598,16 +23058,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -25700,16 +23150,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -25802,16 +23242,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -25904,16 +23334,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -26006,16 +23426,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -26109,16 +23519,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -26212,16 +23612,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -26315,16 +23705,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -26416,16 +23796,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -26517,16 +23887,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -26619,16 +23979,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -26720,16 +24070,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -26821,16 +24161,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -26922,16 +24252,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -27023,16 +24343,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -27124,16 +24434,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -27226,16 +24526,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -27327,16 +24617,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -27430,16 +24710,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -27527,16 +24797,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -27624,16 +24884,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -27721,16 +24971,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -27818,16 +25058,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -27915,16 +25145,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28012,16 +25232,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28109,16 +25319,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28206,16 +25406,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28303,16 +25493,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28400,16 +25580,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28503,16 +25673,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28600,16 +25760,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28701,16 +25851,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28802,16 +25942,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28897,16 +26027,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -28993,16 +26113,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -29089,16 +26199,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -29191,16 +26291,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -29288,16 +26378,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -29385,16 +26465,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -29482,16 +26552,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -29584,16 +26644,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -29686,16 +26736,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -29788,16 +26828,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -29891,16 +26921,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -29993,16 +27013,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -30095,16 +27105,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -30191,16 +27191,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -30294,16 +27284,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -30391,16 +27371,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -30494,16 +27464,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -30591,16 +27551,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -30693,16 +27643,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -30795,16 +27735,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -30898,16 +27828,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -31001,16 +27921,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -31109,16 +28019,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -31211,16 +28111,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -31313,16 +28203,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -31416,16 +28296,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -31519,16 +28389,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -31628,16 +28488,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -31737,16 +28587,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -31840,16 +28680,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -31943,16 +28773,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -32046,16 +28866,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -32149,16 +28959,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -32252,16 +29052,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -32355,16 +29145,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -32458,16 +29238,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -32561,16 +29331,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -32660,16 +29420,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -32763,16 +29513,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -32865,16 +29605,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -32968,16 +29698,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -33071,16 +29791,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -33174,16 +29884,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -33277,16 +29977,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -33380,16 +30070,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -33483,16 +30163,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -33586,16 +30256,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -33687,16 +30347,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -33790,16 +30440,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -33893,16 +30533,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -33996,16 +30626,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -34098,16 +30718,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -34201,16 +30811,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -34304,16 +30904,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -34498,16 +31088,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -34600,16 +31180,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -34702,16 +31272,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -34805,16 +31365,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -34908,16 +31458,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -35011,16 +31551,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -35113,16 +31643,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -35215,16 +31735,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -35317,16 +31827,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -35420,16 +31920,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -35523,16 +32013,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -35625,16 +32105,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -35727,16 +32197,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -35829,16 +32289,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -35931,16 +32381,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -36033,16 +32473,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -36135,16 +32565,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -36237,16 +32657,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -36341,16 +32751,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -36446,16 +32846,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -36548,16 +32938,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -36650,16 +33030,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -36752,16 +33122,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -36854,16 +33214,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -36957,16 +33307,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -37060,16 +33400,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -37165,16 +33495,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -37267,16 +33587,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -37369,16 +33679,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -37471,16 +33771,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -37573,16 +33863,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -37675,16 +33955,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -37776,16 +34046,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -37879,16 +34139,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -37982,16 +34232,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -38087,16 +34327,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -38184,16 +34414,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -38288,16 +34508,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -38392,16 +34602,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -38496,16 +34696,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -38609,16 +34799,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -38713,16 +34893,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -38817,16 +34987,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -38921,16 +35081,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -39025,16 +35175,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -39129,16 +35269,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -39233,16 +35363,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -39337,16 +35457,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -39441,16 +35551,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -39545,16 +35645,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -39649,16 +35739,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -39776,16 +35856,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -39878,16 +35948,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -39980,16 +36040,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -40084,16 +36134,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -40186,16 +36226,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -40288,16 +36318,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -40391,16 +36411,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -40494,16 +36504,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -40591,16 +36591,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -40688,16 +36678,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -40785,16 +36765,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -40882,16 +36852,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -40984,16 +36944,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -41086,16 +37036,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -41188,16 +37128,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -41321,16 +37251,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -41439,16 +37359,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -41541,16 +37451,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -41644,16 +37544,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -41747,16 +37637,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -41849,16 +37729,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -41951,16 +37821,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -42053,16 +37913,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -42155,16 +38005,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -42253,16 +38093,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -42351,16 +38181,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -42453,16 +38273,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -42562,16 +38372,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -42664,16 +38464,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -42769,16 +38559,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -42871,16 +38651,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -42973,16 +38743,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -43075,16 +38835,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -43184,16 +38934,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -43285,16 +39025,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -43386,16 +39116,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -43488,16 +39208,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -43597,16 +39307,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -43700,16 +39400,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -43802,16 +39492,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -43898,16 +39578,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -44000,16 +39670,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -44102,16 +39762,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -44204,16 +39854,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -44308,16 +39948,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -44417,16 +40047,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -44519,16 +40139,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -44621,16 +40231,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -44723,16 +40323,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -44825,16 +40415,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -44927,16 +40507,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -45029,16 +40599,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -45130,16 +40690,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -45231,16 +40781,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -45332,16 +40872,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -45435,16 +40965,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -45536,16 +41056,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -45638,16 +41148,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -45740,16 +41240,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -45842,16 +41332,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -45944,16 +41424,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -46046,16 +41516,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -46149,16 +41609,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -46252,16 +41702,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -46354,16 +41794,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -46451,16 +41881,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -46554,16 +41974,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -46657,16 +42067,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -46760,16 +42160,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -46863,16 +42253,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -46960,16 +42340,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -47057,16 +42427,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -47157,16 +42517,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -47254,16 +42604,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -47354,16 +42694,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -47451,16 +42781,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -47548,16 +42868,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -47645,16 +42955,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -47745,16 +43045,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -47845,16 +43135,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -47945,16 +43225,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -48045,16 +43315,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -48144,16 +43404,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -48243,16 +43493,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -48339,16 +43579,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -48441,16 +43671,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -48543,16 +43763,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -48651,16 +43861,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -48751,16 +43951,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -48851,16 +44041,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -48950,16 +44130,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -49052,16 +44222,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -49152,16 +44312,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -49252,16 +44402,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -49351,16 +44491,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -49450,16 +44580,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -49549,16 +44669,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -49649,16 +44759,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -49751,16 +44851,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -49853,16 +44943,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -49955,16 +45035,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -50057,16 +45127,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -50159,16 +45219,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -50261,16 +45311,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -50363,16 +45403,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -50465,16 +45495,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -50567,16 +45587,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -50669,16 +45679,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -50771,16 +45771,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -50873,16 +45863,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -50976,16 +45956,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -51070,16 +46040,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -51173,16 +46133,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -51276,16 +46226,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -51379,16 +46319,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -51482,16 +46412,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -51584,16 +46504,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -51685,16 +46595,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -51786,16 +46686,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -51889,16 +46779,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -51991,16 +46871,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -52093,16 +46963,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -52198,16 +47058,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -52303,16 +47153,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -52404,16 +47244,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -52505,16 +47335,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -52607,16 +47427,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -52709,16 +47519,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -52811,16 +47611,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -52913,16 +47703,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -53015,16 +47795,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -53117,16 +47887,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -53219,16 +47979,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -53321,16 +48071,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -53423,16 +48163,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -53525,16 +48255,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -53627,16 +48347,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -53724,16 +48434,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -53821,16 +48521,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -53918,16 +48608,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -54015,16 +48695,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -54124,16 +48794,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -54226,16 +48886,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -54328,16 +48978,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -54430,16 +49070,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -54531,16 +49161,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -54632,16 +49252,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -54734,16 +49344,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -54835,16 +49435,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -54937,16 +49527,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -55039,16 +49619,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -55141,16 +49711,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -55243,16 +49803,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -55340,16 +49890,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -55437,16 +49977,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -55534,16 +50064,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -55636,16 +50156,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -55738,16 +50248,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -55857,16 +50357,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -55960,16 +50450,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -56063,16 +50543,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -56166,16 +50636,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -56269,16 +50729,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -56372,16 +50822,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -59194,16 +53634,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_ci_test_results" @@ -59370,16 +53800,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -59483,16 +53903,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -59596,16 +54006,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -59709,16 +54109,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -59822,16 +54212,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -59935,16 +54315,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -60048,16 +54418,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -60161,16 +54521,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -60288,16 +54638,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -60401,16 +54741,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -60514,16 +54844,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -60627,16 +54947,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -60740,16 +55050,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -60853,16 +55153,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -60966,16 +55256,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -61087,16 +55367,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -61201,16 +55471,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -61314,16 +55574,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -61428,16 +55678,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -61541,16 +55781,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -61654,16 +55884,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -61767,16 +55987,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -61880,16 +56090,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -61997,16 +56197,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -62114,16 +56304,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -62227,16 +56407,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -62341,16 +56511,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -62454,16 +56614,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -62568,16 +56718,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -62681,16 +56821,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -62794,16 +56924,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -62907,16 +57027,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -63020,16 +57130,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -63133,16 +57233,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -63246,16 +57336,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -63359,16 +57439,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -63472,16 +57542,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -63585,16 +57645,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -63698,16 +57748,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -63811,16 +57851,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -63924,16 +57954,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -64037,16 +58057,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -64150,16 +58160,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -64263,16 +58263,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -64377,16 +58367,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -64490,16 +58470,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -64603,16 +58573,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -64717,16 +58677,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -64830,16 +58780,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -64943,16 +58883,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -65056,16 +58986,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -65168,16 +59088,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -65281,16 +59191,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -65394,16 +59294,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -65507,16 +59397,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -65620,16 +59500,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -65730,16 +59600,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -65869,16 +59729,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -65990,16 +59840,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -66102,16 +59942,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -66215,16 +60045,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -66327,16 +60147,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -66440,16 +60250,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -66553,16 +60353,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -66666,16 +60456,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -66778,16 +60558,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -66891,16 +60661,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -67003,16 +60763,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -67116,16 +60866,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -67228,16 +60968,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -67341,16 +61071,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -67454,16 +61174,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -67566,16 +61276,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -67677,16 +61377,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -67787,16 +61477,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -67897,16 +61577,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -68008,16 +61678,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -68119,16 +61779,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -68230,16 +61880,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -68341,16 +61981,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -68454,16 +62084,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -68567,16 +62187,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -68680,16 +62290,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -68793,16 +62393,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -68906,16 +62496,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -69019,16 +62599,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -69132,16 +62702,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -69245,16 +62805,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -69358,16 +62908,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -69471,16 +63011,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -69584,16 +63114,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -69696,16 +63216,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -69808,16 +63318,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -69920,16 +63420,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -70032,16 +63522,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -70141,16 +63621,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -70250,16 +63720,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -70359,16 +63819,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -70468,16 +63918,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -70577,16 +64017,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -70686,16 +64116,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -70795,16 +64215,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -70904,16 +64314,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -71013,16 +64413,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -71122,16 +64512,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -71231,16 +64611,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -71340,16 +64710,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -71449,16 +64809,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -71558,16 +64908,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -71667,16 +65007,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -71776,16 +65106,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -71885,16 +65205,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -71994,16 +65304,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -72103,16 +65403,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -72212,16 +65502,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -72321,16 +65601,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -72430,16 +65700,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -72539,16 +65799,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -72648,16 +65898,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -72757,16 +65997,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -72866,16 +66096,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -72973,16 +66193,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -73080,16 +66290,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -73187,16 +66387,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -73294,16 +66484,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -73401,16 +66581,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -73508,16 +66678,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -73615,16 +66775,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -73722,16 +66872,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -73829,16 +66969,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -73936,16 +67066,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -74043,16 +67163,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -74150,16 +67260,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -74257,16 +67357,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -74366,16 +67456,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -74475,16 +67555,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -74584,16 +67654,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -74693,16 +67753,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -74802,16 +67852,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -74911,16 +67951,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -75020,16 +68050,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -75129,16 +68149,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -75238,16 +68248,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -75347,16 +68347,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -75456,16 +68446,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -75565,16 +68545,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -75674,16 +68644,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -75783,16 +68743,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -75892,16 +68842,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -76001,16 +68941,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -76108,16 +69038,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -76215,16 +69135,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -76324,16 +69234,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -76436,16 +69336,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -76551,16 +69441,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -76674,16 +69554,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -76789,16 +69659,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -76912,16 +69772,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -77027,16 +69877,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -77142,16 +69982,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -77257,16 +70087,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -77379,16 +70199,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -77494,16 +70304,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -77609,16 +70409,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -77724,16 +70514,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -77839,16 +70619,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -77951,16 +70721,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -78063,16 +70823,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -78176,16 +70926,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -78289,16 +71029,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -78405,16 +71135,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -78518,16 +71238,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -78631,16 +71341,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -78744,16 +71444,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -78857,16 +71547,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -78970,16 +71650,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -79083,16 +71753,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -79197,16 +71857,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -79310,16 +71960,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -79423,16 +72063,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -79536,16 +72166,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -79649,16 +72269,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -79762,16 +72372,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -79875,16 +72475,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -79984,16 +72574,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -80097,16 +72677,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -80209,16 +72779,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -80322,16 +72882,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -80435,16 +72985,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -80552,16 +73092,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -80672,16 +73202,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -80786,16 +73306,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -80900,16 +73410,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -81011,16 +73511,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -81124,16 +73614,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -81237,16 +73717,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -81350,16 +73820,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -81457,16 +73917,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -81570,16 +74020,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -81683,16 +74123,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -81797,16 +74227,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -81910,16 +74330,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -82023,16 +74433,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -82135,16 +74535,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -82248,16 +74638,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -82361,16 +74741,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -82474,16 +74844,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -82586,16 +74946,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -82699,16 +75049,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -82819,16 +75159,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -82938,16 +75268,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -83054,16 +75374,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -83170,16 +75480,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -83286,16 +75586,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -83396,16 +75686,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -83506,16 +75786,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -83616,16 +75886,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -83726,16 +75986,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -83840,16 +76090,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -83953,16 +76193,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -84066,16 +76296,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -84179,16 +76399,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -84292,16 +76502,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -84405,16 +76605,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -84519,16 +76709,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -84632,16 +76812,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -84745,16 +76915,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -84858,16 +77018,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -84971,16 +77121,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -85085,16 +77225,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -85198,16 +77328,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -85312,16 +77432,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -85426,16 +77536,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -85539,16 +77639,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -85652,16 +77742,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -85765,16 +77845,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -85882,16 +77952,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -85995,16 +78055,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -86112,16 +78162,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -86226,16 +78266,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -86339,16 +78369,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -86452,16 +78472,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -86565,16 +78575,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -86678,16 +78678,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -86791,16 +78781,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -86904,16 +78884,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -87016,16 +78986,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -87123,16 +79083,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -87236,16 +79186,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -87347,16 +79287,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -87458,16 +79388,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -87570,16 +79490,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -87680,16 +79590,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -87791,16 +79691,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -87901,16 +79791,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -88012,16 +79892,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -88127,16 +79997,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -88242,16 +80102,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -88349,16 +80199,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -88459,16 +80299,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -88569,16 +80399,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -88680,16 +80500,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -88791,16 +80601,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -88902,16 +80702,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -89013,16 +80803,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -89124,16 +80904,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -89235,16 +81005,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -89346,16 +81106,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -89457,16 +81207,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -89568,16 +81308,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -89679,16 +81409,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -89790,16 +81510,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -89901,16 +81611,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -90013,16 +81713,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -90125,16 +81815,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -90236,16 +81916,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -90347,16 +82017,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -90457,16 +82117,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -90563,16 +82213,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -90669,16 +82309,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -90782,16 +82412,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -90895,16 +82515,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -91008,16 +82618,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -91121,16 +82721,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -91234,16 +82824,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -91347,16 +82927,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -91460,16 +83030,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -91573,16 +83133,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -91686,16 +83236,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -91799,16 +83339,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -91913,16 +83443,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -92030,16 +83550,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -92141,16 +83651,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -92253,16 +83753,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -92366,16 +83856,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -92476,16 +83956,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -92586,16 +84056,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -92696,16 +84156,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -92806,16 +84256,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -92916,16 +84356,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -93026,16 +84456,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -93136,16 +84556,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -93249,16 +84659,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -93362,16 +84762,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -93475,16 +84865,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -93593,16 +84973,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -93706,16 +85076,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -93819,16 +85179,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -93932,16 +85282,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -94051,16 +85391,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -94164,16 +85494,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -94285,16 +85605,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -94397,16 +85707,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -94513,16 +85813,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -94626,16 +85916,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -94739,16 +86019,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -94853,16 +86123,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -94966,16 +86226,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -95080,16 +86330,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -95193,16 +86433,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -95306,16 +86536,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -95419,16 +86639,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -95532,16 +86742,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -95645,16 +86845,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -95751,16 +86941,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results" @@ -95864,16 +87044,6 @@ test_results {} } bq_exports { - project: "luci-resultdb" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { project: "chrome-luci-data" dataset: "chromium" table: "gpu_try_test_results"
diff --git a/infra/config/lib/ci.star b/infra/config/lib/ci.star index fe01dc3..2fd4af9 100644 --- a/infra/config/lib/ci.star +++ b/infra/config/lib/ci.star
@@ -64,7 +64,7 @@ Will always upload to the following tables in addition to any tables specified by the list's elements: luci-resultdb.chromium.ci_test_results - luci-resultdb.chromium.gpu_ci_test_results + chrome-luci-data.chromium.gpu_ci_test_results experiments - a dict of experiment name to the percentage chance (0-100) that it will apply to builds generated from this builder. """ @@ -82,17 +82,6 @@ bq_table = "luci-resultdb.chromium.ci_test_results", ), resultdb.export_test_results( - bq_table = "luci-resultdb.chromium.gpu_ci_test_results", - predicate = resultdb.test_result_predicate( - # Only match the telemetry_gpu_integration_test and - # fuchsia_telemetry_gpu_integration_test targets. - # Android Telemetry targets also have a suffix added to the end - # denoting the binary that's included, so also catch those with - # [^/]*. - test_id_regexp = "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+", - ), - ), - resultdb.export_test_results( bq_table = "chrome-luci-data.chromium.gpu_ci_test_results", predicate = resultdb.test_result_predicate( # Only match the telemetry_gpu_integration_test and
diff --git a/infra/config/lib/try.star b/infra/config/lib/try.star index 5bb0bf6..95b60bf 100644 --- a/infra/config/lib/try.star +++ b/infra/config/lib/try.star
@@ -107,7 +107,7 @@ Will always upload to the following tables in addition to any tables specified by the list's elements: luci-resultdb.chromium.try_test_results - luci-resultdb.chromium.gpu_try_test_results + chrome-luci-data.gpu_try_test_results """ if not branches.matches(branch_selector): return @@ -122,17 +122,6 @@ bq_table = "luci-resultdb.chromium.try_test_results", ), resultdb.export_test_results( - bq_table = "luci-resultdb.chromium.gpu_try_test_results", - predicate = resultdb.test_result_predicate( - # Only match the telemetry_gpu_integration_test and - # fuchsia_telemetry_gpu_integration_test targets. - # Android Telemetry targets also have a suffix added to the end - # denoting the binary that's included, so also catch those with - # [^/]*. - test_id_regexp = "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+", - ), - ), - resultdb.export_test_results( bq_table = "chrome-luci-data.chromium.gpu_try_test_results", predicate = resultdb.test_result_predicate( # Only match the telemetry_gpu_integration_test and
diff --git a/ios/build/bots/scripts/shard_util.py b/ios/build/bots/scripts/shard_util.py index 8a4aa6c..f1dd580 100644 --- a/ios/build/bots/scripts/shard_util.py +++ b/ios/build/bots/scripts/shard_util.py
@@ -31,7 +31,8 @@ # of all EarlGrey/EarlGrey2 test classes. 'appConfigurationForTestCase' is a # class method. They have no real tests. IGNORED_CLASSES = [ - 'BaseEarlGreyTestCase', 'ChromeTestCase', 'appConfigurationForTestCase' + 'BaseEarlGreyTestCase', 'ChromeTestCase', 'appConfigurationForTestCase', + 'setUpForTestCase' ]
diff --git a/ios/build/bots/scripts/shard_util_test.py b/ios/build/bots/scripts/shard_util_test.py index 597f13d..c4936be7 100644 --- a/ios/build/bots/scripts/shard_util_test.py +++ b/ios/build/bots/scripts/shard_util_test.py
@@ -61,10 +61,11 @@ 'types 0x1064cc3e1 v16@0:8', 'name 0x1075e6887 testE', 'name 0x1075e6887 testF', 'baseProtocols 0x0', 'name 0x1064b8438 ChromeTestCase', 'name 0x1064b8438 setUp', - 'baseProtocols 0x0', 'name 0x1064b8438 ToolBarTestCase', - 'name 0x1075e6887 testG', 'name 0x1075e6887 testH', - 'name 0x1075e6887 DISABLED_testI', 'name 0x1075e6887 FLAKY_testJ', - 'baseProtocols 0x0', 'version 0' + 'baseProtocols 0x0', 'name 0x1064b8438 setUpForTestCase', + 'name 0x1064b8438 testPort', 'baseProtocols 0x0', + 'name 0x1064b8438 ToolBarTestCase', 'name 0x1075e6887 testG', + 'name 0x1075e6887 testH', 'name 0x1075e6887 DISABLED_testI', + 'name 0x1075e6887 FLAKY_testJ', 'baseProtocols 0x0', 'version 0' ]) # Release app otool output format in Xcode 11.4 toolchain. @@ -79,9 +80,10 @@ ' types 0x1064cc3e1 v16@0:8', ' name 0x1075e6887 testE', ' name 0x1075e6887 testF', 'baseProtocols 0x0', ' name 0x1064b8438 ChromeTestCase', ' name 0x1064b8438 setUp', - 'baseProtocols 0x0', ' name 0x1064b8438 ToolBarTestCase', - ' name 0x1075e6887 testG', ' name 0x1075e6887 testH', - ' name 0x1075e6893 DISABLED_testI', + 'baseProtocols 0x0', ' name 0x1064b8438 setUpForTestCase', + ' name 0x1064b8438 testPort', 'baseProtocols 0x0', + ' name 0x1064b8438 ToolBarTestCase', ' name 0x1075e6887 testG', + ' name 0x1075e6887 testH', ' name 0x1075e6893 DISABLED_testI', ' name 0x1075e723f FLAKY_testJ', 'baseProtocols 0x0', 'version 0' ])
diff --git a/ios/build/bots/scripts/test_apps.py b/ios/build/bots/scripts/test_apps.py index 4c186e9..7ca4541 100644 --- a/ios/build/bots/scripts/test_apps.py +++ b/ios/build/bots/scripts/test_apps.py
@@ -219,7 +219,10 @@ # Method names that starts with test* and also are in *TestCase classes # but they are not test-methods. # TODO(crbug.com/982435): Rename not test methods with test-suffix. - none_tests = ['ChromeTestCase/testServer', 'FindInPageTestCase/testURL'] + non_test_prefixes = [ + 'ChromeTestCase/testServer', 'FindInPageTestCase/testURL', + 'setUpForTestCase' + ] # TODO(crbug.com/1123681): Move all_tests to class var. Set all_tests, # disabled_tests values in initialization to avoid multiple calls to otool. all_tests = [] @@ -232,7 +235,8 @@ self.release, enabled_tests_only=False): test_name = '%s/%s' % (test_class, test_method) - if (test_name not in none_tests and + if ((not any( + test_name.startswith(prefix) for prefix in non_test_prefixes)) and # |self.initial_included_tests| contains the tests to execute, which # may be a subset of all tests b/c of the iOS test sharding logic in # run.py. Filter by |self.initial_included_tests| if specified.
diff --git a/ios/build/bots/scripts/test_apps_test.py b/ios/build/bots/scripts/test_apps_test.py index 15a8b73..dd64fac 100644 --- a/ios/build/bots/scripts/test_apps_test.py +++ b/ios/build/bots/scripts/test_apps_test.py
@@ -3,6 +3,7 @@ # found in the LICENSE file. """Unittests for test_apps.py.""" +from test_runner import TestRunner import mock import unittest @@ -41,6 +42,24 @@ self.assertEqual(test_apps.get_gtest_filter(tests, invert=True), expected) +class EgtestsAppGetAllTestsTest(test_runner_test.TestCase): + """Tests to get_all_tests methods of EgtestsApp.""" + + @mock.patch('os.path.exists', return_value=True) + @mock.patch('shard_util.fetch_test_names') + def testNonTestsFiltered(self, mock_fetch, _): + mock_fetch.return_value = [ + ('ATestCase', 'testB'), + ('setUpForTestCase', 'testForStartup'), + ('ChromeTestCase', 'testServer'), + ('FindInPageTestCase', 'testURL'), + ('CTestCase', 'testD'), + ] + test_app = test_apps.EgtestsApp(_TEST_APP_PATH) + tests = test_app.get_all_tests() + self.assertEqual(set(tests), set(['ATestCase/testB', 'CTestCase/testD'])) + + class DeviceXCTestUnitTestsAppTest(test_runner_test.TestCase): """Tests to test methods of SimulatorXCTestUnitTestsApp."""
diff --git a/ios/build/bots/scripts/xcodebuild_runner.py b/ios/build/bots/scripts/xcodebuild_runner.py index b0cde623..7eea3de 100644 --- a/ios/build/bots/scripts/xcodebuild_runner.py +++ b/ios/build/bots/scripts/xcodebuild_runner.py
@@ -39,6 +39,15 @@ super(LaunchCommandPoolCreationError, self).__init__(message) +def _tests_decided_at_runtime(app_name): + """Return if tests in app are selected at runtime by app_name. + + This works for suites defined in chromium infra. + """ + suite_name_fragments = ['ios_chrome_multitasking_eg', '_flaky_eg'] + return any(fragment in app_name for fragment in suite_name_fragments) + + def erase_all_simulators(path=None): """Erases all simulator devices. @@ -218,19 +227,32 @@ break # Exclude passed tests in next test attempt. - passed_tests = passed_tests.union( - set(self.test_results['attempts'][-1]['passed'])) - self.egtests_app.included_tests = list(running_tests - passed_tests) + passed_tests = passed_tests | set( + self.test_results['attempts'][-1]['passed']) + tests_to_include = set() + # |running_tests| are compiled tests in target intersecting with swarming + # sharding. For some suites, they are more than what's needed to run. + if not _tests_decided_at_runtime(self.egtests_app.test_app_path): + tests_to_include = tests_to_include | (running_tests - passed_tests) + # Add failed tests from last round for runtime decided suites and device + # suites. + tests_to_include = tests_to_include | ( + set(self.test_results['attempts'][-1]['failed'].keys()) - + cancelled_statuses) + self.egtests_app.included_tests = list(tests_to_include) # crbug.com/987664 - for the case when # all tests passed but build was interrupted, # passed tests are equal to tests to run. - if passed_tests == running_tests: - for status in cancelled_statuses: - failure = self.test_results['attempts'][-1]['failed'].pop( - status, None) - if failure: - LOGGER.info('Failure for passed tests %s: %s' % (status, failure)) + if passed_tests == running_tests or not self.egtests_app.included_tests: + # Keep cancelled status for these, since some tests might be skipped + # don't appear in test results. + if not _tests_decided_at_runtime(self.egtests_app.test_app_path): + for status in cancelled_statuses: + failure = self.test_results['attempts'][-1]['failed'].pop( + status, None) + if failure: + LOGGER.info('Failure for passed tests %s: %s' % (status, failure)) break # If tests are not completed(interrupted or did not start) @@ -243,7 +265,10 @@ # should be confined in this method. Real tests affected by these statuses # will be marked timeout in results. for status in cancelled_statuses: - self.test_results['attempts'][-1]['failed'].pop(status, None) + # Keep cancelled status for these, since some tests might be skipped + # don't appear in test results. + if not _tests_decided_at_runtime(self.egtests_app.test_app_path): + self.test_results['attempts'][-1]['failed'].pop(status, None) if (not cancelled_attempt # If need to re-run less than 20 tests, 1 shard should be enough. @@ -428,8 +453,7 @@ # from otool output is incorrect. For multitasking or any flaky test suite, # the list contains more tests than what actually runs. if (self.__class__.__name__ != 'DeviceXcodeTestRunner' and - 'ios_chrome_multitasking_eg' not in self.app_path and - '_flaky_eg' not in self.app_path): + not _tests_decided_at_runtime(self.app_path)): aborted_tests = list(all_tests_to_run - set(self.logs['failed tests']) - set(self.logs['passed tests'])) aborted_tests.sort()
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index 58a431fd..c5633a8 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -794,6 +794,12 @@ flag_descriptions::kWaitThresholdMillisecondsForCapabilitiesApiDescription, flags_ui::kOsIos, MULTI_VALUE_TYPE(kWaitThresholdMillisecondsForCapabilitiesApiChoices)}, + {"autofill-fill-merchant-promo-code-fields", + flag_descriptions::kAutofillFillMerchantPromoCodeFieldsName, + flag_descriptions::kAutofillFillMerchantPromoCodeFieldsDescription, + flags_ui::kOsIos, + FEATURE_VALUE_TYPE( + autofill::features::kAutofillFillMerchantPromoCodeFields)}, }; bool SkipConditionalFeatureEntry(const flags_ui::FeatureEntry& entry) {
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index 475cec9..7093ecf 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -23,6 +23,12 @@ "When enabled, offer data will be retrieved during downstream and shown in " "the dropdown list."; +const char kAutofillFillMerchantPromoCodeFieldsName[] = + "Enable Autofill of promo code fields in forms"; +const char kAutofillFillMerchantPromoCodeFieldsDescription[] = + "When enabled, Autofill will attempt to fill merchant promo/coupon/gift " + "code fields when data is available."; + const char kAutofillIOSDelayBetweenFieldsName[] = "Autofill delay"; const char kAutofillIOSDelayBetweenFieldsDescription[] = "Delay between the different fields of a form being autofilled. In "
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index fa76e395..c544a0c 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -19,6 +19,10 @@ extern const char kAutofillEnableOffersInDownstreamName[]; extern const char kAutofillEnableOffersInDownstreamDescription[]; +// Title and description for the flag to fill promo code fields with Autofill. +extern const char kAutofillFillMerchantPromoCodeFieldsName[]; +extern const char kAutofillFillMerchantPromoCodeFieldsDescription[]; + // Title and description for the flag to control the autofill delay. extern const char kAutofillIOSDelayBetweenFieldsName[]; extern const char kAutofillIOSDelayBetweenFieldsDescription[];
diff --git a/ios/chrome/browser/ui/authentication/BUILD.gn b/ios/chrome/browser/ui/authentication/BUILD.gn index aa98765..5bf7ee2 100644 --- a/ios/chrome/browser/ui/authentication/BUILD.gn +++ b/ios/chrome/browser/ui/authentication/BUILD.gn
@@ -190,21 +190,6 @@ ] } -source_set("internal+eg2") { - defines = [ "CHROME_EARL_GREY_2" ] - configs += [ - "//build/config/compiler:enable_arc", - "//build/config/ios:xctest_config", - ] - testonly = true - visibility = [ ":*" ] - sources = [ - "signin_earl_grey_app_interface.h", - "signin_earl_grey_app_interface_stub.mm", - ] - deps = [ "//ios/third_party/earl_grey2:test_lib" ] -} - source_set("eg_test_support+eg2") { defines = [ "CHROME_EARL_GREY_2" ] configs += [ @@ -215,13 +200,14 @@ sources = [ "signin_earl_grey.h", "signin_earl_grey.mm", + "signin_earl_grey_app_interface.h", + "signin_earl_grey_app_interface_stub.mm", "signin_earl_grey_ui.h", "signin_earl_grey_ui.mm", "signin_matchers.h", "signin_matchers.mm", ] deps = [ - ":internal+eg2", "//base", "//base/test:test_support", "//ios/chrome/app/strings",
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm b/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm index 57f6b2aa..837cb314 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm +++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm
@@ -10,6 +10,7 @@ #include "components/signin/public/base/account_consistency_method.h" #include "components/signin/public/base/signin_pref_names.h" #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" +#import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h" #import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h" #import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/browser/ui/authentication/views/views_constants.h" @@ -410,7 +411,8 @@ // app. - (void)testInterruptReauthSignin { FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1]; - [SigninEarlGrey triggerReauthDialogWithFakeIdentity:fakeIdentity]; + [SigninEarlGreyAppInterface triggerReauthDialogWithFakeIdentity:fakeIdentity]; + [ChromeEarlGreyUI waitForAppToIdle]; // Open the URL as if it was opened from another app. [ChromeEarlGrey simulateExternalAppURLOpening]; [[EarlGrey selectElementWithMatcher:chrome_test_util::Omnibox()]
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey.h b/ios/chrome/browser/ui/authentication/signin_earl_grey.h index 138ba79f..310da51 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey.h +++ b/ios/chrome/browser/ui/authentication/signin_earl_grey.h
@@ -57,11 +57,6 @@ // Induces a GREYAssert if the Sync state does not match |enabled|. - (void)verifySyncUIEnabled:(BOOL)enabled; -// Triggers the reauth dialog. This is done through SigninEarlGreyAppInterface, -// with ShowSigninCommand sent to SceneController, without any UI interaction -// to open the dialog. -- (void)triggerReauthDialogWithFakeIdentity:(FakeChromeIdentity*)identity; - @end #endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey.mm b/ios/chrome/browser/ui/authentication/signin_earl_grey.mm index 42b41c9..f73b7db 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey.mm +++ b/ios/chrome/browser/ui/authentication/signin_earl_grey.mm
@@ -112,9 +112,5 @@ selectElementWithMatcher:GetSettingsGoogleSyncAndServicesCellMatcher] assertWithMatcher:grey_sufficientlyVisible()]; } -- (void)triggerReauthDialogWithFakeIdentity:(FakeChromeIdentity*)identity { - [SigninEarlGreyAppInterface triggerReauthDialogWithFakeIdentity:identity]; - GREYWaitForAppToIdle(@"App failed to idle"); -} @end
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 index fdcdc35..698d6b3 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -9af19f37b50d9fe0da1f599f9d694d837ba70abd \ No newline at end of file +29b0a86a5ac02dbed78e9147969a81af2161710e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 index 7cc69b7..fdcc15e 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -3a51332c77377868d5c8fda98ac23fb87835740f \ No newline at end of file +4de3fe78df5e02ff6e0a359dc5c1646b0f63ea22 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 index f48c9ce8..b2aa24bb 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -159a4d20d793875b74d6cb2c11574b1980cb6299 \ No newline at end of file +5dbed6584b490871529e1a854dd76a456312da25 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 index 76c10c75..a896c59 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -3d0bfa21446f69d2714178344dc57c312e484f7d \ No newline at end of file +00e247c9b396117ee720f5b5cbe5fbfcc1816e2d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 index cb9af5a..521bea8 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -74dea7125d33d0692b245eeff38c7f947fe77c50 \ No newline at end of file +a1095d8119d81e6f226dc31cd8caef6d045ec67e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 index ccb44cb..959a3da 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -b813a61bddbb15dc5ccf7c3b26fc6f51a5a98922 \ No newline at end of file +ada79233739ef0e626be40ca1cc8fcd8a749b5fb \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 index 16d4491..da6b5e15 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -80a93e77647176c7f3ad68434e2482c99a8f4148 \ No newline at end of file +4e90ce0fb02b7dd4ea1583c6a20fbb0bce552444 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 index 4c4c851..1e181d8c 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -6935c50839f8311fe26192154674caf69d827fee \ No newline at end of file +ba540df4ea6e27e1e52de24dbfe3ab561fc47dad \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 index a377b3a..cad0b793 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -8f49c597cbddd8824c03357592603ff1d75dee3d \ No newline at end of file +ee8fcb0338fc52f9b06a74867cd3d06d7be30190 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 index 456508b..5ee761e4 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -9dbcb734a39aa695905fe48c841f6975351e7259 \ No newline at end of file +d8d5b008e7c3ef6d7e8ab1bf5472e69eb7ae6378 \ No newline at end of file
diff --git a/net/BUILD.gn b/net/BUILD.gn index 792b186..11499cd8 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -410,6 +410,8 @@ "cookies/cookie_monster_netlog_params.h", "cookies/cookie_options.cc", "cookies/cookie_options.h", + "cookies/cookie_partition_key.cc", + "cookies/cookie_partition_key.h", "cookies/cookie_store.cc", "cookies/cookie_store.h", "cookies/cookie_util.cc", @@ -4189,6 +4191,7 @@ "cookies/cookie_inclusion_status_unittest.cc", "cookies/cookie_monster_unittest.cc", "cookies/cookie_options_unittest.cc", + "cookies/cookie_partition_key_unittest.cc", "cookies/cookie_util_unittest.cc", "cookies/parsed_cookie_unittest.cc", "cookies/site_for_cookies_unittest.cc",
diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc index 3936de2..eeca896 100644 --- a/net/cookies/canonical_cookie.cc +++ b/net/cookies/canonical_cookie.cc
@@ -348,21 +348,22 @@ CanonicalCookie& CanonicalCookie::operator=(CanonicalCookie&& other) = default; -CanonicalCookie::CanonicalCookie(std::string name, - std::string value, - std::string domain, - std::string path, - base::Time creation, - base::Time expiration, - base::Time last_access, - bool secure, - bool httponly, - CookieSameSite same_site, - CookiePriority priority, - bool same_party, - absl::optional<SchemefulSite> partition_key, - CookieSourceScheme source_scheme, - int source_port) +CanonicalCookie::CanonicalCookie( + std::string name, + std::string value, + std::string domain, + std::string path, + base::Time creation, + base::Time expiration, + base::Time last_access, + bool secure, + bool httponly, + CookieSameSite same_site, + CookiePriority priority, + bool same_party, + absl::optional<CookiePartitionKey> partition_key, + CookieSourceScheme source_scheme, + int source_port) : name_(std::move(name)), value_(std::move(value)), domain_(std::move(domain)), @@ -581,7 +582,7 @@ CookieSameSite same_site, CookiePriority priority, bool same_party, - absl::optional<SchemefulSite> partition_key, + absl::optional<CookiePartitionKey> partition_key, CookieInclusionStatus* status) { // Put a pointer on the stack so the rest of the function can assign to it if // the default nullptr is passed in. @@ -702,7 +703,7 @@ CookieSameSite same_site, CookiePriority priority, bool same_party, - absl::optional<SchemefulSite> partition_key, + absl::optional<CookiePartitionKey> partition_key, CookieSourceScheme source_scheme, int source_port) { std::unique_ptr<CanonicalCookie> cc = base::WrapUnique(new CanonicalCookie( @@ -728,7 +729,7 @@ CookieSameSite same_site, CookiePriority priority, bool same_party, - absl::optional<SchemefulSite> partition_key, + absl::optional<CookiePartitionKey> partition_key, CookieSourceScheme source_scheme, int source_port) { return base::WrapUnique(new CanonicalCookie( @@ -751,37 +752,6 @@ } } -bool CanonicalCookie::SerializePartitionKey(std::string& out) const { - if (!partition_key_) { - out = kEmptyCookiePartitionKey; - return true; - } - if (partition_key_->GetURL().SchemeIsFile()) { - out = partition_key_->SerializeFileSiteWithHost(); - return true; - } - if (partition_key_->opaque()) - return false; - out = partition_key_->Serialize(); - return true; -} - -// static -bool CanonicalCookie::DeserializePartitionKey( - const std::string& in, - absl::optional<SchemefulSite>& out) { - if (in == kEmptyCookiePartitionKey) { - out = absl::nullopt; - return true; - } - auto schemeful_site = SchemefulSite::Deserialize(in); - // SchemefulSite is opaque if the input is invalid. - if (schemeful_site.opaque()) - return false; - out = absl::make_optional(schemeful_site); - return true; -} - bool CanonicalCookie::IsEquivalentForSecureCookieMatching( const CanonicalCookie& secure_cookie) const { // Names must be the same
diff --git a/net/cookies/canonical_cookie.h b/net/cookies/canonical_cookie.h index c5387be..3d1add3 100644 --- a/net/cookies/canonical_cookie.h +++ b/net/cookies/canonical_cookie.h
@@ -13,11 +13,11 @@ #include "base/gtest_prod_util.h" #include "base/time/time.h" #include "net/base/net_export.h" -#include "net/base/schemeful_site.h" #include "net/cookies/cookie_access_result.h" #include "net/cookies/cookie_constants.h" #include "net/cookies/cookie_inclusion_status.h" #include "net/cookies/cookie_options.h" +#include "net/cookies/cookie_partition_key.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "url/third_party/mozilla/url_parse.h" @@ -107,7 +107,7 @@ CookieSameSite same_site, CookiePriority priority, bool same_party, - absl::optional<SchemefulSite> partition_key, + absl::optional<CookiePartitionKey> partition_key, CookieInclusionStatus* status = nullptr); // FromStorage is a factory method which is meant for creating a new @@ -130,7 +130,7 @@ CookieSameSite same_site, CookiePriority priority, bool same_party, - absl::optional<SchemefulSite> partition_key, + absl::optional<CookiePartitionKey> partition_key, CookieSourceScheme source_scheme, int source_port); @@ -149,7 +149,7 @@ CookieSameSite same_site, CookiePriority priority, bool same_party, - absl::optional<SchemefulSite> partition_key = absl::nullopt, + absl::optional<CookiePartitionKey> partition_key = absl::nullopt, CookieSourceScheme scheme_secure = CookieSourceScheme::kUnset, int source_port = url::PORT_UNSPECIFIED); @@ -171,7 +171,7 @@ CookiePriority Priority() const { return priority_; } bool IsSameParty() const { return same_party_; } bool IsPartitioned() const { return partition_key_.has_value(); } - const absl::optional<SchemefulSite>& PartitionKey() const { + const absl::optional<CookiePartitionKey>& PartitionKey() const { return partition_key_; } @@ -396,7 +396,7 @@ CookieSameSite same_site, CookiePriority priority, bool same_party, - absl::optional<SchemefulSite> partition_key, + absl::optional<CookiePartitionKey> partition_key, CookieSourceScheme scheme_secure = CookieSourceScheme::kUnset, int source_port = url::PORT_UNSPECIFIED); @@ -479,7 +479,7 @@ // when the top-frame site matches the partition key. // If the partition key is non-null and opaque, this means the Partitioned // cookie was created on an opaque origin. - absl::optional<SchemefulSite> partition_key_; + absl::optional<CookiePartitionKey> partition_key_; CookieSourceScheme source_scheme_{CookieSourceScheme::kUnset}; // This can be [0,65535], PORT_UNSPECIFIED, or PORT_INVALID. // PORT_UNSPECIFIED is used for cookies which already existed in the cookie
diff --git a/net/cookies/canonical_cookie_fuzzer.cc b/net/cookies/canonical_cookie_fuzzer.cc index 9cee4da6..aa3bb25 100644 --- a/net/cookies/canonical_cookie_fuzzer.cc +++ b/net/cookies/canonical_cookie_fuzzer.cc
@@ -53,8 +53,9 @@ CookiePriority::COOKIE_PRIORITY_HIGH, }); - auto partition_key = absl::make_optional<net::SchemefulSite>( - net::SchemefulSite(GURL(data_provider.ConsumeRandomLengthString(800)))); + const auto partition_key = absl::make_optional<CookiePartitionKey>( + CookiePartitionKey::FromURLForTesting( + GURL(data_provider.ConsumeRandomLengthString(800)))); const std::unique_ptr<const CanonicalCookie> sanitized_cookie = CanonicalCookie::CreateSanitizedCookie(
diff --git a/net/cookies/canonical_cookie_unittest.cc b/net/cookies/canonical_cookie_unittest.cc index 49d50d9..50a3f67 100644 --- a/net/cookies/canonical_cookie_unittest.cc +++ b/net/cookies/canonical_cookie_unittest.cc
@@ -69,7 +69,8 @@ "A", "2", ".www.example.com", "/", current_time, base::Time(), base::Time(), false, false, CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_DEFAULT, true, - absl::make_optional(net::SchemefulSite::Deserialize("https://foo.com")), + absl::make_optional( + CookiePartitionKey::FromURLForTesting(GURL("https://foo.com"))), CookieSourceScheme::kNonSecure, 65536); EXPECT_EQ("A", cookie2->Name()); EXPECT_EQ("2", cookie2->Value()); @@ -553,79 +554,6 @@ EXPECT_EQ(base::Time(), cookie->ExpiryDate()); } -TEST(CanonicalCookieTest, PartitionKeySerialization) { - // SerializePartitionKey: no parititon key - std::unique_ptr<CanonicalCookie> cookie = - CanonicalCookie::CreateUnsafeCookieForTesting( - "__Host-A", "B", "www.example.com", "/", base::Time::Now(), - base::Time::Now(), base::Time::Now(), /* secure */ true, - /* httponly */ false, CookieSameSite::UNSPECIFIED, - CookiePriority::COOKIE_PRIORITY_DEFAULT, /* sameparty */ false, - absl::nullopt); - std::string got; - EXPECT_TRUE(cookie->SerializePartitionKey(got)); - EXPECT_EQ(net::kEmptyCookiePartitionKey, got); - - // SerializePartitionKey: partition key present - cookie = CanonicalCookie::CreateUnsafeCookieForTesting( - "__Host-A", "B", "www.example.com", "/", base::Time::Now(), - base::Time::Now(), base::Time::Now(), /* secure */ true, - /* httponly */ false, CookieSameSite::UNSPECIFIED, - CookiePriority::COOKIE_PRIORITY_DEFAULT, /* sameparty */ false, - absl::make_optional(SchemefulSite(GURL("https://toplevelsite.com")))); - EXPECT_TRUE(cookie->SerializePartitionKey(got)); - EXPECT_EQ("https://toplevelsite.com", got); - - // SerializePartitionKey: local file URLs - cookie = CanonicalCookie::CreateUnsafeCookieForTesting( - "__Host-A", "B", "www.example.com", "/", base::Time::Now(), - base::Time::Now(), base::Time::Now(), /* secure */ true, - /* httponly */ false, CookieSameSite::UNSPECIFIED, - CookiePriority::COOKIE_PRIORITY_DEFAULT, /* sameparty */ false, - absl::make_optional(SchemefulSite(GURL("file:///path1/to/file.txt")))); - EXPECT_TRUE(cookie->SerializePartitionKey(got)); - EXPECT_EQ("file://", got); - - // SerializePartitionKey: file URLs with hostnames. - cookie = CanonicalCookie::CreateUnsafeCookieForTesting( - "__Host-A", "B", "www.example.com", "/", base::Time::Now(), - base::Time::Now(), base::Time::Now(), /* secure */ true, - /* httponly */ false, CookieSameSite::UNSPECIFIED, - CookiePriority::COOKIE_PRIORITY_DEFAULT, /* sameparty */ false, - absl::make_optional( - SchemefulSite(GURL("file://toplevelsite1.com/path/to/file.txt")))); - EXPECT_TRUE(cookie->SerializePartitionKey(got)); - EXPECT_EQ("file://toplevelsite1.com", got); - - // SerializeParititonKey: opaque partition key - auto opaque = SchemefulSite(url::Origin()); - cookie = CanonicalCookie::CreateUnsafeCookieForTesting( - "__Host-A", "B", "www.example.com", "/", base::Time::Now(), - base::Time::Now(), base::Time::Now(), /* secure */ true, - /* httponly */ false, CookieSameSite::UNSPECIFIED, - CookiePriority::COOKIE_PRIORITY_DEFAULT, - /* sameparty */ false, absl::make_optional(opaque)); - EXPECT_FALSE(cookie->SerializePartitionKey(got)); - - // DeserializePartitionKey: empty partition key - absl::optional<SchemefulSite> partition_key; - EXPECT_TRUE(CanonicalCookie::DeserializePartitionKey(kEmptyCookiePartitionKey, - partition_key)); - EXPECT_FALSE(partition_key); - - // DeserializePartitionKey: example site - SchemefulSite site = SchemefulSite(GURL("https://toplevelsite.com")); - EXPECT_TRUE(CanonicalCookie::DeserializePartitionKey(site.Serialize(), - partition_key)); - EXPECT_TRUE(partition_key); - EXPECT_FALSE(partition_key.value().opaque()); - EXPECT_EQ(site, partition_key.value()); - - // DeserializePartitionKey: invalid partition key - EXPECT_FALSE(CanonicalCookie::DeserializePartitionKey("abc123foobar!!", - partition_key)); -} - TEST(CanonicalCookieTest, IsEquivalent) { GURL url("https://www.example.com/"); std::string cookie_name = "A"; @@ -2421,8 +2349,8 @@ "__Host-A", "B", "x.y", "/", base::Time(), base::Time(), base::Time(), true, false, CookieSameSite::UNSPECIFIED, COOKIE_PRIORITY_LOW, false, - absl::make_optional( - net::SchemefulSite(GURL("https://toplevelsite.com")))) + absl::make_optional(CookiePartitionKey::FromURLForTesting( + GURL("https://toplevelsite.com")))) ->IsCanonical()); // Partitioned attribute invalid, no __Host- prefix. @@ -2430,8 +2358,8 @@ "A", "B", "x.y", "/", base::Time(), base::Time(), base::Time(), true, false, CookieSameSite::UNSPECIFIED, COOKIE_PRIORITY_LOW, false, - absl::make_optional( - net::SchemefulSite(GURL("https://toplevelsite.com")))) + absl::make_optional(CookiePartitionKey::FromURLForTesting( + GURL("https://toplevelsite.com")))) ->IsCanonical()); // Partitioned attribute invalid, SameParty attribute also included. @@ -2439,8 +2367,8 @@ "__Host-A", "B", "x.y", "/", base::Time(), base::Time(), base::Time(), true, false, CookieSameSite::UNSPECIFIED, COOKIE_PRIORITY_LOW, true, - absl::make_optional( - net::SchemefulSite(GURL("https://toplevelsite.com")))) + absl::make_optional(CookiePartitionKey::FromURLForTesting( + GURL("https://toplevelsite.com")))) ->IsCanonical()); } @@ -2664,7 +2592,8 @@ base::Time(), base::Time(), base::Time(), true /*secure*/, false /*httponly*/, CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_LOW, false /*same_party*/, - absl::make_optional(net::SchemefulSite(GURL("https://toplevelsite.com"))), + absl::make_optional(CookiePartitionKey::FromURLForTesting( + GURL("https://toplevelsite.com"))), &status); EXPECT_TRUE(cc); EXPECT_TRUE(cc->IsPartitioned()); @@ -3060,8 +2989,8 @@ two_hours_ago, one_hour_from_now, one_hour_ago, true /*secure*/, false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT, false /*same_party*/, - absl::optional<net::SchemefulSite>( - net::SchemefulSite(GURL("https://toplevelsite.com"))), + absl::optional<CookiePartitionKey>(CookiePartitionKey::FromURLForTesting( + GURL("https://toplevelsite.com"))), &status)); EXPECT_TRUE(status.IsInclude()); // Invalid: no __Host- prefix @@ -3070,8 +2999,8 @@ one_hour_from_now, one_hour_ago, true /*secure*/, false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT, false /*same_party*/, - absl::optional<net::SchemefulSite>( - net::SchemefulSite(GURL("https://toplevelsite.com"))), + absl::optional<CookiePartitionKey>(CookiePartitionKey::FromURLForTesting( + GURL("https://toplevelsite.com"))), &status)); EXPECT_TRUE(status.HasExactlyExclusionReasonsForTesting( {CookieInclusionStatus::EXCLUDE_INVALID_PARTITIONED})); @@ -3082,8 +3011,8 @@ two_hours_ago, one_hour_from_now, one_hour_ago, true /*secure*/, false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT, true /*same_party*/, - absl::optional<net::SchemefulSite>( - net::SchemefulSite(GURL("https://toplevelsite.com"))), + absl::optional<CookiePartitionKey>(CookiePartitionKey::FromURLForTesting( + GURL("https://toplevelsite.com"))), &status)); EXPECT_TRUE(status.HasExactlyExclusionReasonsForTesting( {CookieInclusionStatus::EXCLUDE_INVALID_PARTITIONED}));
diff --git a/net/cookies/cookie_partition_key.cc b/net/cookies/cookie_partition_key.cc new file mode 100644 index 0000000..8d28310 --- /dev/null +++ b/net/cookies/cookie_partition_key.cc
@@ -0,0 +1,68 @@ +// 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 "net/cookies/cookie_partition_key.h" + +#include "net/cookies/cookie_constants.h" + +namespace net { + +CookiePartitionKey::CookiePartitionKey() = default; + +CookiePartitionKey::CookiePartitionKey(const SchemefulSite& site) + : site_(site) {} + +CookiePartitionKey::CookiePartitionKey(const GURL& url) + : site_(SchemefulSite(url)) {} + +CookiePartitionKey::CookiePartitionKey(const CookiePartitionKey& other) = + default; + +CookiePartitionKey::CookiePartitionKey(CookiePartitionKey&& other) = default; + +CookiePartitionKey& CookiePartitionKey::operator=( + const CookiePartitionKey& other) = default; + +CookiePartitionKey& CookiePartitionKey::operator=(CookiePartitionKey&& other) = + default; + +CookiePartitionKey::~CookiePartitionKey() = default; + +bool CookiePartitionKey::operator==(const CookiePartitionKey& other) const { + return site_ == other.site_; +} + +// static +bool CookiePartitionKey::Serialize(const absl::optional<CookiePartitionKey>& in, + std::string& out) { + if (!in) { + out = kEmptyCookiePartitionKey; + return true; + } + if (in->site_.GetURL().SchemeIsFile()) { + out = in->site_.SerializeFileSiteWithHost(); + return true; + } + if (in->site_.opaque()) + return false; + out = in->site_.Serialize(); + return true; +} + +// static +bool CookiePartitionKey::Deserialize(const std::string& in, + absl::optional<CookiePartitionKey>& out) { + if (in == kEmptyCookiePartitionKey) { + out = absl::nullopt; + return true; + } + auto schemeful_site = SchemefulSite::Deserialize(in); + // SchemfulSite is opaque if the input is invalid. + if (schemeful_site.opaque()) + return false; + out = absl::make_optional(CookiePartitionKey(schemeful_site)); + return true; +} + +} // namespace net
diff --git a/net/cookies/cookie_partition_key.h b/net/cookies/cookie_partition_key.h new file mode 100644 index 0000000..a78de05 --- /dev/null +++ b/net/cookies/cookie_partition_key.h
@@ -0,0 +1,78 @@ +// 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 NET_COOKIES_COOKIE_PARTITION_KEY_H_ +#define NET_COOKIES_COOKIE_PARTITION_KEY_H_ + +#include <string> + +#include "net/base/net_export.h" +#include "net/base/schemeful_site.h" +#include "third_party/abseil-cpp/absl/types/optional.h" + +namespace network { +namespace mojom { +class CookiePartitionKeyDataView; +} // namespace mojom +} // namespace network + +namespace mojo { +template <typename DataViewType, typename T> +struct StructTraits; +} // namespace mojo + +namespace net { + +// TODO(crbug.com/1225444): Add fuzzer test. +class NET_EXPORT CookiePartitionKey { + public: + CookiePartitionKey(); + explicit CookiePartitionKey(const SchemefulSite& site); + CookiePartitionKey(const CookiePartitionKey& other); + CookiePartitionKey(CookiePartitionKey&& other); + CookiePartitionKey& operator=(const CookiePartitionKey& other); + CookiePartitionKey& operator=(CookiePartitionKey&& other); + ~CookiePartitionKey(); + + bool operator==(const CookiePartitionKey& other) const; + + // Methods for serializing and deserializing a partition key to/from a string. + // This will be used for Android, storing persistent partitioned cookies, and + // loading partitioned cookies into Java code. + // + // This function returns true if the partition key is not opaque. We do not + // want to serialize cookies with opaque origins in their partition key to + // disk, because if the browser session ends we will not be able to attach the + // saved cookie to any future requests. This is because opaque origins' nonces + // are only stored in volatile memory. + // + // TODO(crbug.com/1225444) Investigate ways to persist partition keys with + // opaque origins if a browser session is restored. + static bool Serialize(const absl::optional<CookiePartitionKey>& in, + std::string& out) WARN_UNUSED_RESULT; + // Deserializes the result of the method above. + // If the result is absl::nullopt, the resulting cookie is not partitioned. + // + // Returns if the resulting partition key is valid. + static bool Deserialize(const std::string& in, + absl::optional<CookiePartitionKey>& out) + WARN_UNUSED_RESULT; + + static CookiePartitionKey FromURLForTesting(const GURL& url) { + return CookiePartitionKey(url); + } + + private: + explicit CookiePartitionKey(const GURL& url); + + // IPC needs access to internal site. + friend struct mojo::StructTraits<network::mojom::CookiePartitionKeyDataView, + CookiePartitionKey>; + + SchemefulSite site_; +}; + +} // namespace net + +#endif // NET_COOKIES_COOKIE_PARTITION_KEY_H_
diff --git a/net/cookies/cookie_partition_key_unittest.cc b/net/cookies/cookie_partition_key_unittest.cc new file mode 100644 index 0000000..ef604ea --- /dev/null +++ b/net/cookies/cookie_partition_key_unittest.cc
@@ -0,0 +1,77 @@ +// 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 NET_COOKIES_COOKIE_PARTITION_KEY_UNITTEST_H_ +#define NET_COOKIES_COOKIE_PARTITION_KEY_UNITTEST_H_ + +#include "net/cookies/cookie_partition_key.h" +#include "net/cookies/cookie_constants.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace net { + +TEST(CookiePartitionKeyTest, Serialization) { + struct { + absl::optional<CookiePartitionKey> input; + bool expected_ret; + std::string expected_output; + } cases[] = { + // No partition key + {absl::nullopt, true, kEmptyCookiePartitionKey}, + // Partition key present + {absl::make_optional(CookiePartitionKey::FromURLForTesting( + GURL("https://toplevelsite.com"))), + true, "https://toplevelsite.com"}, + // Local file URL + {absl::make_optional(CookiePartitionKey::FromURLForTesting( + GURL("file:///path/to/file.txt"))), + true, "file://"}, + // File URL with host + {absl::make_optional(CookiePartitionKey::FromURLForTesting( + GURL("file://toplevelsite.com/path/to/file.pdf"))), + true, "file://toplevelsite.com"}, + // Opaque origin + {absl::make_optional(CookiePartitionKey::FromURLForTesting(GURL())), + false, ""}, + // Invalid partition key + {absl::make_optional( + CookiePartitionKey::FromURLForTesting(GURL("abc123foobar!!"))), + false, ""}, + }; + + for (const auto& tc : cases) { + std::string got; + EXPECT_EQ(tc.expected_ret, CookiePartitionKey::Serialize(tc.input, got)); + EXPECT_EQ(tc.expected_output, got); + } +} + +TEST(CookiePartitionKeyTest, Deserialization) { + struct { + std::string input; + bool expected_ret; + absl::optional<CookiePartitionKey> expected_output; + } cases[] = { + {kEmptyCookiePartitionKey, true, absl::nullopt}, + {"https://toplevelsite.com", true, + absl::make_optional(CookiePartitionKey::FromURLForTesting( + GURL("https://toplevelsite.com")))}, + {"abc123foobar!!", false, absl::nullopt}, + }; + + for (const auto& tc : cases) { + absl::optional<CookiePartitionKey> got; + EXPECT_EQ(tc.expected_ret, CookiePartitionKey::Deserialize(tc.input, got)); + if (tc.expected_output.has_value()) { + EXPECT_TRUE(got.has_value()); + EXPECT_EQ(tc.expected_output.value(), got.value()); + } else { + EXPECT_FALSE(got.has_value()); + } + } +} + +} // namespace net + +#endif // NET_COOKIES_COOKIE_PARTITION_KEY_UNITTEST_H_
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json index 13bdcab2..6d985bd 100644 --- a/net/http/transport_security_state_static.json +++ b/net/http/transport_security_state_static.json
@@ -2074,7 +2074,6 @@ { "name": "al-shami.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "alanrickmanflipstable.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ankakaak.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "anonym-surfen.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "apps-for-fishing.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "athenelive.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "aurainfosec.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -2098,7 +2097,6 @@ { "name": "danskoferie.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "daylightpirates.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "deliverance.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "disking.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dubrovskiy.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dyeager.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "edix.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -2188,7 +2186,6 @@ { "name": "tox.im", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "traas.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "trashnothing.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "tuturulianda.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ucfirst.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "unitedadmins.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "unknownphenomena.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -2579,7 +2576,6 @@ { "name": "alethearose.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "anakros.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "andrewimeson.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "antoniomarques.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "apachehaus.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "apibot.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "aponow.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -3403,7 +3399,6 @@ { "name": "greenvines.com.tw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hollowrap.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hostingactive.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "humankode.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "immunicity.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kahopoon.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "khetzal.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -3660,7 +3655,6 @@ { "name": "checktype.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "chloe.re", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "chrst.ph", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "coldhak.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "comarkinstruments.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "consciousandglamorous.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "crestoncottage.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -3784,7 +3778,6 @@ { "name": "topnovini.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "trendberry.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "trybind.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "uberfunction.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ulrik.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "utopians.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vanetv.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -3949,7 +3942,6 @@ { "name": "taborsky.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "teampaddymurphy.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "teampoint.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "therewill.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "threelions.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tm-solutions.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tomasjacik.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -5150,7 +5142,6 @@ { "name": "creditkarma.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cryptify.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cwagner.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cyberkov.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cyberpunk.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dadons-laserdiscs.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "darkag.ovh", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -5577,7 +5568,6 @@ { "name": "evilized.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "evossd.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "eytosh.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "f00.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fabienbaker.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fableforge.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "faeriecakes.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -6444,7 +6434,6 @@ { "name": "getts.ro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ggx.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gheorghesarcov.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "gmoes.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "goben.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gogenenglish.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "goldpreisfinder.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -7125,7 +7114,6 @@ { "name": "1xcess.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "2carpros.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "3r.org.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "aaron-gustafson.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "abilitynet.org.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "aboutmyproperty.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "acheconcursos.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -8099,7 +8087,6 @@ { "name": "casinolistings.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "casinoreal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "castlejackpot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "catgirl.pics", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cdndepo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cdnjs.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cdreporting.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -8193,7 +8180,6 @@ { "name": "creditproautos.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "crefelder.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "crowd.supply", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "crypticshell.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cryptojar.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cryptonym.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "csbs.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -8474,7 +8460,6 @@ { "name": "fortesanshop.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fotocerita.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fotopasja.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "fotowettbewerb.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "foxbnc.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "foxdev.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "foxley-farm.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -8642,7 +8627,6 @@ { "name": "herr-webdesign.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hibilog.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hicl.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "hiddendepth.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "higgstools.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "higp.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hippies.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -10408,7 +10392,6 @@ { "name": "holzheizerforum.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "holzvergaser-forum.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hotelvictoriaoax-mailing.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "hostisan.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hotelvillahermosa-mailing.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "horstmanshof.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hwag-pb.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -11315,7 +11298,6 @@ { "name": "haozhang.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "haydenhill.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hebriff.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "heitland-it.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "helioanodyne.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hengelsportdeal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "herds.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -11499,7 +11481,6 @@ { "name": "onviga.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "open-infrastructure.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "openrtv.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "oses.mobi", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "panaxis.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "panelomix.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "parodybit.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -11604,7 +11585,6 @@ { "name": "signere.no", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "silaslova-ekb.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "simplicitypvp.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "simpul.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sistersurprise.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sleep10.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "slimspots.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -11872,7 +11852,6 @@ { "name": "benohead.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "benzou-space.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "berna.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bertrand.bio", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "besola.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bestmotherfucking.website", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "betterbabyshop.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -12542,7 +12521,6 @@ { "name": "ltba.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ltbytes.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lunchbunch.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "luongvu.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "luuppi.fi", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lynx.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lynxbroker.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -12707,7 +12685,6 @@ { "name": "oneazcu.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onlinebiller.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onmuvo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "onpatient.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "oogartsennet.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "oparl.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "openquery.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -12748,7 +12725,6 @@ { "name": "phenomeno.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "phenomenoporto.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "phenomenoporto.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "philpropertygroup.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "philsturgeon.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "phonenumberinfo.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "photographyforchange.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -13424,7 +13400,6 @@ { "name": "awaremi-tai.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bewerbungsfibel.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bemsoft.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bluebill.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "beyondalderaan.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "awk.tw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bilke.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -14524,7 +14499,6 @@ { "name": "sec.ec", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rivermendhealthcenters.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rdl.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "scores4schools.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "satmd.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sagemontchurch.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "schlagma.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -14940,7 +14914,6 @@ { "name": "ameego.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "agrias.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "acessoeducacao.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "263.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "abilma.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "amineptine.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "alexmak.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -15729,7 +15702,6 @@ { "name": "nieuwsoverijssel.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "notarvysocina.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "new-process.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "montazer.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ms-alternativ.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nscnet.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onlyzero.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -15953,7 +15925,6 @@ { "name": "semmlers.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "spotlightsrule.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "smallpath.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "sodiao.cc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "spamloco.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "slimk1nd.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "standards.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -16217,7 +16188,6 @@ { "name": "adelinlydia-coach.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "agfmedia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "abulanov.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "398.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "alertaenlinea.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "39sihu.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "2600edinburgh.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -16251,7 +16221,6 @@ { "name": "abborsjo.fi", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "actu-medias.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "amcfirst.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "amimoto-ami.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "amphetamines.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "amartinz.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "andrewdaws.tv", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -16316,7 +16285,6 @@ { "name": "asafilm.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "aparaatti.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ariacreations.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "assurancesmons.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "askkaren.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "asuhe.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "0day.su", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -17454,7 +17422,6 @@ { "name": "michaelsulzer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "minenash.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mikori.sk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "modelcube.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "limpens.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mahfouzadedimeji.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "malwarekillers.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -17807,7 +17774,6 @@ { "name": "ruskamodra.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "room3b.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "s-rickroll-p.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "reinaldudras.ee", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "repair.by", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nzquakes.maori.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "muckingabout.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -17898,7 +17864,6 @@ { "name": "snekchat.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "seobot.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "smartcheck.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "salmonvision.com.tw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "shaken110.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "shadowguardian507.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "skidstresser.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18056,7 +18021,6 @@ { "name": "techreview.link", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thisfreelife.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thecrochetcottage.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "tetramax.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thehighersideclothing.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tampabaybusinesslistings.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thebrightons.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18337,7 +18301,6 @@ { "name": "xn--lsupp-mra.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "yourcopywriter.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "yame2.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "youcruit.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "youon.tokyo", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wpcarer.pro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "uygindir.ml", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18393,7 +18356,6 @@ { "name": "724go.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "0g.org.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "7261696e626f77.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "525.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "3drenaline.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "adorewe.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "1041263497.rsc.cdn77.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18864,7 +18826,6 @@ { "name": "chrisdecairos.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "desplats.com.ar", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "completesportperformance.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "databeam.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "desertsounds.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "demonwolfdev.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dee.su", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19384,7 +19345,6 @@ { "name": "initramfs.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "index-mp3.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "inkontriamoci.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "indochina.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ikiler.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "inet.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "integrity.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19465,7 +19425,6 @@ { "name": "imrunner.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "joelfries.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "julianvmodesto.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "jskier.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jakubvrba.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "inspirationalquotesuk.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "julientartarin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19709,7 +19668,6 @@ { "name": "mimobile.website", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mdosch.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mendy.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "mfedderke.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "menaraannonces.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "memoryex.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "meshotes.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -20101,7 +20059,6 @@ { "name": "receitasdebacalhau.pt", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "researchgate.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "reagir43.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "retroity.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "reha-honpo.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "quentinchevre.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rcvd.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -20311,7 +20268,6 @@ { "name": "sole-erdwaermetauscher.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "skandiabanken.no", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "standagainstspying.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "simfri.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "socialnitro.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sol.works", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sorensen-online.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -20729,7 +20685,6 @@ { "name": "ziegler-heizung-frankfurt.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wine-importer.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xn--v6q426ishax2a.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "zurret.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "zhangfangzhou.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xynex.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "willemsjort.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -20971,7 +20926,6 @@ { "name": "d4rkdeagle.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "damasexpress.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "daniel-mosquera.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "danielepestilli.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "danielsblog.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "danielstach.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "danoz.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -21662,7 +21616,6 @@ { "name": "vow.vn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wadidi.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "waelisch.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "wallet.pp.ua", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wapt.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "warezaddict.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wasil.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -21762,7 +21715,6 @@ { "name": "1981612088.rsc.cdn77.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "1it.click", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "1scope.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "208.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "21x9.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "24-7.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "256k.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -21870,7 +21822,6 @@ { "name": "aetherc0r3.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "afdkompakt.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "affiliatetest.azurewebsites.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "affordablemudjacking.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "affordableracingparts.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ag-websolutions.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "agenciadeempregosdourados.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -23070,7 +23021,6 @@ { "name": "hipnos.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hippomovers.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hippopotamuses.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "hiratake.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hire-a-coder.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hirefitness.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hirokilog.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -23613,7 +23563,6 @@ { "name": "mastodon.expert", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mastodon.host", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mastodon.my", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "mastodon.org.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mastodon.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mastodon.rocks", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mastodon.top", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -23711,7 +23660,6 @@ { "name": "mkaciuba.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mkakh.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mlcambiental.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "mlpchan.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mlpvc-rr.ml", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mmilog.hu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mmt.my", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -24997,7 +24945,6 @@ { "name": "windycitydubfest.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "winnersports.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wireframesoftware.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "wiseflat.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wkennington.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wmustore.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wodboss.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -25234,7 +25181,6 @@ { "name": "ak-varazdin.hr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "abox-kb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "afrikarl.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "alexandros.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ahiru3.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "adamas-magicus.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "8azino777.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -25455,7 +25401,6 @@ { "name": "bghost.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "beichtgenerator.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "amitse.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "betterworldinternational.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "berlin-flirt.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "berthelier.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bentphotos.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -25981,7 +25926,6 @@ { "name": "ehandel.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "effizienta.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "envescent.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "dupisces.com.tw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "die-borts.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "elliff.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dovenzorgmalawi.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26182,7 +26126,6 @@ { "name": "funnybikini.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fukakukeiba.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fid-elite.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "froehlich.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "freedomflotilla.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gala.kiev.ua", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gatewaybridal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26395,7 +26338,6 @@ { "name": "hydrodipcenter.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "home-cloud.online", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "horodance.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "hvdbox.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "i-geld.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "icebound.cc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ibps.blog", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26411,7 +26353,6 @@ { "name": "imperial-legrand.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "idranktoomuch.coffee", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "imagebin.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "ihollaback.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "imperdin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "imperdintechnologies.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "huongquynh.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -27247,7 +27188,6 @@ { "name": "pluto.life", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "piratte.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "plzdontpwn.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "outpostinfo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pollingplace.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pony.tf", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "playwhyyza.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -27611,7 +27551,6 @@ { "name": "slik.ai", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "single-in-stuttgart.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sjdaws.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "shoshin-aikido.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "silvergoldbull.mw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "skylgenet.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "smartwritingservice.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28528,7 +28467,6 @@ { "name": "boueki.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "booox.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "biomodra.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "breadandlife.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "braviskindenjeugd.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bravisziekenhuis.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bro.hk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28623,7 +28561,6 @@ { "name": "comoquitarlasestriasrapidamente.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "clusteranalyse.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "columbuswines.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cnam-idf.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "commitsandrebases.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "connorsmith.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "coda.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28785,7 +28722,6 @@ { "name": "eklepka.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "elias-nicolas.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "elhossari.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "ecoterramedia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dogworld.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dtechstore.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "edgecustomersportal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28854,7 +28790,6 @@ { "name": "elevateandprosper.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "edubras.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "emiele.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "editoraacademiacrista.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "factorypartsdirect.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ezdog.press", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fatedata.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -29213,13 +29148,11 @@ { "name": "kurzonline.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "leeclemens.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jembatankarir.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "labelleza.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lazytux.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kromamoveis.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "larepublicacultural.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "linkedinbackground.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "levatc.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "ligonier.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lipoabaltimore.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lazytux.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lesjardinsdubanchet.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -30493,7 +30426,6 @@ { "name": "churrasqueirafacil.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cirurgicalucena.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "civilg20.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "clinicaferrusbratos.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "club-reduc.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "comflores.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "comodesinflamarlashemorroides.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -31046,7 +30978,6 @@ { "name": "my-host.ovh", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mybb.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "myday.eu.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "myhair.asia", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "myspa.asia", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nataldigital.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nathumarket.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -31249,7 +31180,6 @@ { "name": "watchfreeonline.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wbci.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wbx.support", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "weyland-yutani.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wintermeyer-consulting.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wintermeyer.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wordpresspro.cl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -31583,7 +31513,6 @@ { "name": "blogom.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bloom-avenue.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "blumen-binder.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bmw-motorradclub-seefeld.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "booter.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "borisavstankovic.rs", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "borrelpartybus.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -31846,7 +31775,6 @@ { "name": "everytruckjob.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "excentos.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "expatmortgage.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "expatriate.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "expo-america.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "eyps.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "eznfe.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32098,7 +32026,6 @@ { "name": "jmsolodesigns.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jmssg.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jobs-in-tech.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "jobtestprep.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jobzninja.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "joe262.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "joearodriguez.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32107,7 +32034,6 @@ { "name": "joetyson.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "johand.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "johanli.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "johngaltgroup.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jokedalderup.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "joker.menu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jooksuratas.ee", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32265,7 +32191,6 @@ { "name": "mbits.solutions", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "media-pi.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mediadandy.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "medtankers.management", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "meetingfriends.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mehmetakif.edu.tr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mehr-schulferien.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32416,7 +32341,6 @@ { "name": "owlishmedia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "paazmaya.fi", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "painlessproperty.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "paktolos.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pantallasled.com.mx", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "parisescortgirls.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "parleamonluc.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -34541,7 +34465,6 @@ { "name": "oldbrookmarqueehire.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oliode.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "omgbouncycastlehire.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ona.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onceuponarainbow.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ond-inc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onestopcastles.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -35362,7 +35285,6 @@ { "name": "lollaconcept.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lordgun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lovenwishes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lsc.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lucakrebs.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lugui.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "luiscapelo.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -35380,7 +35302,6 @@ { "name": "mamiecouscous.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "manawill.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maquettage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "marek.su", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "martijn.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mashandco.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mashandco.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -35446,7 +35367,6 @@ { "name": "pcbricole.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "piils.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pioche.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pittmantraffic.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plae.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "planetromeofoundation.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plexpy13.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -35582,7 +35502,6 @@ { "name": "trendykids.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tribac.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tripsinc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "triz.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "trynta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uitgeverij-deviant.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "unschoolrules.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -35708,7 +35627,6 @@ { "name": "bingcheung.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "binti.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bioetco.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bioharmony.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bitcoinclashic.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bluepearl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bolte.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -36501,7 +36419,6 @@ { "name": "nerfroute.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nerpa-club.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "netnik.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "neutralvehicle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nightmoose.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ninebytes.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ninfora.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -36695,7 +36612,6 @@ { "name": "52b9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "52b9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "53ningen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "546802.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "788da.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "81uc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8951889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -36911,7 +36827,6 @@ { "name": "blunderify.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bluproducts.com.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bmriv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "boards.ie", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bodypainting.waw.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bolgarnyelv.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bondingwithbaby.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -36953,7 +36868,6 @@ { "name": "cadams.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "calcedge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "campingskyhooks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "canglong.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "canker.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "canterbury.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "captainark.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -37278,7 +37192,6 @@ { "name": "fotonjan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fowlsmurf.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "francescoservida.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "frankenhost.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frankslaughterinsurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frederikvig.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freelancecollab.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -37444,7 +37357,6 @@ { "name": "jape.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jastrow.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "javiermixdjs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jci.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jdgonzalez95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jedayoshi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jeepeg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -37529,7 +37441,6 @@ { "name": "laboutiquedejuliette.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lachosetypo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ladyanna.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lagit.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lalalab.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lalunecreative.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lamaisondelatransformationculturelle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -38166,7 +38077,6 @@ { "name": "usbr.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "utcast-mate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "utgifter.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "valudo.st", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vantagepointpreneed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vasilikieleftheriou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vats.im", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -38492,7 +38402,6 @@ { "name": "dekoh-shouyu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "delorenzi.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "depot-leipzig.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "derekheld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deukie.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dev-tek.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "diem-project.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -38645,7 +38554,6 @@ { "name": "hotels-insolites.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "houstonauthorizedrepair.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hquest.pro.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hr-tech.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hr-tech.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hub.org.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "humppakone.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -38688,7 +38596,6 @@ { "name": "katthewaffle.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kazand.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "keengamer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kenbonny.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "keralit.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "keylaserinstitute.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "khudothiswanpark.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39375,7 +39282,6 @@ { "name": "feuerwehr-vechta.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "filetransfer.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "filidorwiese.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "findrejsepartner.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "firmenwerbung-vermarktung.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "firstinnovationltd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fishexport.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39488,7 +39394,6 @@ { "name": "joeyvilaro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jonathanj.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jugendfeuerwehr-vechta.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jule-spil.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "juliankirchner.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "julibon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kalilinux.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39511,7 +39416,6 @@ { "name": "kselenia.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kubica.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kunstdrucke-textildruck.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kurserne.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lared.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lariposte.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lazapateriahandmade.pe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39537,7 +39441,6 @@ { "name": "loddeke.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "logicoma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lojatema.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lommeregneren.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lonniemason.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lovelovenavi.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lublin.toys", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39764,7 +39667,6 @@ { "name": "tandempartnerships.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teamusec.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "technoswag.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "telefonabonnement.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tenno.tools", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "testosteronedetective.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tetraktus.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40052,7 +39954,6 @@ { "name": "cooljs.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "coussinsky.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cpd-education.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "craftinghand.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "croeder.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "croncron.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "crownpoint.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -41785,7 +41686,6 @@ { "name": "phaux.uno", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "phishing-studie.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "phishing.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "piruchita.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pkbjateng.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pkbjateng.or.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pksps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42126,7 +42026,6 @@ { "name": "carepassport.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "carrollservicecompany.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "casusgrillcaribbean.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "caterkids.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ccsource.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cellartracker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "certchannel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42411,7 +42310,6 @@ { "name": "morhys.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mosshi.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "moucloud.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "moyu.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mr-coffee.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "multitec.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "murashun.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42471,7 +42369,6 @@ { "name": "opengovpartnership.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "openruhr.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "optimize-jpg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "orioncokolada.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "osaka-onakura.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oyosoft.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "paardenhulp.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42484,7 +42381,6 @@ { "name": "paxerahealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "paykings.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "perez-marrero.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "persephone.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pescadorcomunicacao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "petdesign.pet", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "peterborgapps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42566,7 +42462,6 @@ { "name": "smaltimentorifiuti.firenze.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smokinghunks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snic.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "snoerendevelopment.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "soakgames.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "soaringtoglory.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sobreporcentagem.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -43335,7 +43230,6 @@ { "name": "cintactimber.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "clawhammer.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "clod-hacking.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "codeandpeace.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "codeproxy.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "codestep.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cognitip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -43359,7 +43253,6 @@ { "name": "cultureelbeleggen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "curarnosensalud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "custerweb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cvps.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cybit.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cygu.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cykelbanor.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -43675,7 +43568,6 @@ { "name": "naturblogg.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "naturesbest.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nea.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "nems.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nesbase.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "net-rencontre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "newtonproject.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -43858,7 +43750,6 @@ { "name": "ts3-dns.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tunnelventilation.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "twitchplaysleaderboard.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ueberdosis.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "umsolugar.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "unityconsciousnessbooks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "unsereins.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44120,7 +44011,6 @@ { "name": "eve.ac", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eveswell.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "extensionschallenge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "eyyubyilmaz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fairydust.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fanactu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fdos.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45071,7 +44961,6 @@ { "name": "kedv.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "keepingtheplot.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kejibot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kersbergen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kessawear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kinautas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kiwi.wiki", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45127,7 +45016,6 @@ { "name": "mathys.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mattcorp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mawo.olkusz.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mcl.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mcqyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mdg-online.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "megam.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45348,7 +45236,6 @@ { "name": "serverexpose.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "setsailanddive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shift.ooo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "shopadvies.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "siciliapulizie.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sidema.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "silkebeckmann.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45973,7 +45860,6 @@ { "name": "merloat.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "messdorferfeld.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "meteo-r.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "michaelsnoeren.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "michellavat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mikkelscheike.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "miku.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46036,7 +45922,6 @@ { "name": "ojbk.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onderwijstransparant.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "orikadabra.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "orikum.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "orthograph.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "osborn.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "otsu.beer", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46139,7 +46024,6 @@ { "name": "rwgamernl.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sachk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sadev.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sadou.kyoto.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "safepay.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sanantoniolocksmithinc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "santensautomatics.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46147,7 +46031,6 @@ { "name": "sbsrv.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "scaffoldhirerandburg.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "scaffoldhiresandton.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sch44r0n.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schlick.wedding", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schlossfuchs.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schneeketten-ratgeber.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46432,7 +46315,6 @@ { "name": "freedomfinance.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freedomrahoitus.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fsdress.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fsstyle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "full-stack.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fyretrine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "g0881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46779,7 +46661,6 @@ { "name": "brush.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bryansmith.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bt78.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bt85.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bt9.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bt96.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bt995.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -47483,7 +47364,6 @@ { "name": "alquiaga.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amcangroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amyfoundhermann.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "anegabawa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "angelesydemonios.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "animan.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aoaprograms.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -47595,7 +47475,6 @@ { "name": "ipad.li", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iran-geo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iranjeunesse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "islamonline.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "it-service24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "izaakbeekman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jadchaar.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -47767,7 +47646,6 @@ { "name": "xn--hgbk4a00a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--kckd0bd4a8tp27yee2e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--mgbpkc7fz3awhe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xuanmeishe.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "youngpeopleunited.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "youtuberis.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zengdong.ren", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -48177,7 +48055,6 @@ { "name": "firegore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fireplex.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "firstdry.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fitmeat.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "flickcritter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "florian2833z.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fluids.ac.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -48274,7 +48151,6 @@ { "name": "hktkl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hochyi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hohenleimbach.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "homem-viril.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "homesteadandprepper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hopesanddreams.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "horrormovies.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -48354,7 +48230,6 @@ { "name": "jorcus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "joseitoda.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "joshruppe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "joshua.bio", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "js93029.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jsdelivr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ju.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -48583,7 +48458,6 @@ { "name": "plokko.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plurr.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pmnaish.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pogera.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "polyr.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "poodlefan.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "portale-randkowe.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -49142,7 +49016,6 @@ { "name": "georgiaautoglass.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gesica.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "getwemap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gino-gelati.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ginzaj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "git.sb", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "glamourdaze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -50223,7 +50096,6 @@ { "name": "firesuite.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "flanga.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fletemaritimo.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "flexfunding.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "flip.kim", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fotografechristha.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fpgradosuperior.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -50752,7 +50624,6 @@ { "name": "superway.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "suttacentral.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "swqa.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "swxtd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "syntheticgrassliving.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tadiranbatteries.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "talentwall.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -50942,7 +50813,6 @@ { "name": "academkin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "acklandstainless.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "actioncleaningnd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "actualidadkd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "addictionresource.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "advanced-fleet-services.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "advertis.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -51176,7 +51046,6 @@ { "name": "falcona.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "farthing.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fdresearch.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "feli.games", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "felixaufreisen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "feng-hhcm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fierscleaning.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52037,7 +51906,6 @@ { "name": "megakoncert90.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "merakilp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mers.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "metric.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mglink.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "microzubr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "minfin.gov.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52313,7 +52181,6 @@ { "name": "choiceautoloan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "christian-krug.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "churchofsaintrocco.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "citizenslasvegas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "civicforum.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cleaningbyrosie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cognicom-gaming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52450,7 +52317,6 @@ { "name": "kringloopwinkelsteenwijk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ktsofas.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kuaitiyu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kumilasvegas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kxline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kxway.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lakewoodcityglass.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52640,7 +52506,6 @@ { "name": "vapingdaily.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "venuedriver.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "verios.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vestd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vincentoshana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vingt.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "visasofoz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52661,7 +52526,6 @@ { "name": "wolfvideoproductions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "woodinvillesepticservice.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wsldp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wtfsec.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wxkxsw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wyysoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xeryus.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -53953,7 +53817,6 @@ { "name": "buysuisse.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bytecrafter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bytecrafter.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "c3sign.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "c3woc.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cachedview.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "caglarcakici.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54019,8 +53882,6 @@ { "name": "coworking-luzern.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cpsq.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "crackers4cheese.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "crazybulk.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "crazybulk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "crazybulk.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "creativeimagery.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "creativerezults.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54238,7 +54099,6 @@ { "name": "fsty.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fun4tomorrow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "furcdn.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "futureaudiographics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fydjbsd.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fyreek.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gabriele.tips", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54304,7 +54164,6 @@ { "name": "hcscrusaders.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hddrecovery.net.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hdtwinks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hearinghelpexpress.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hebamme-cranio.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hellerarko.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hemtest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54999,7 +54858,6 @@ { "name": "stephenreescarter.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stgeorgecomfortinn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stichtingdemuziekkamer.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "stjosephtheworker.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stmatthewri.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stonechatjewellers.ie", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stopjunkmail.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55043,7 +54901,6 @@ { "name": "teamspeak-serverlist.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tech-info.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "techmagus.icu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "techmoviles.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "telesto.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teletexto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "temariopolicianacional.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55080,7 +54937,6 @@ { "name": "threefantasy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thrush.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tidy.chat", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "timbrado.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tittelbach.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tobi-server.goip.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tobi-videos.goip.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55590,7 +55446,6 @@ { "name": "vampire142.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "verticrew.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "videobrochuresmarketing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vnpay.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vtt-hautsdefrance.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vvzero.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w88info.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -57597,7 +57452,6 @@ { "name": "vitamina.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vitamina.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vive.link", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "voolik.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "voxpopuli.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vragenvanproust.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vuatruyen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -57803,7 +57657,6 @@ { "name": "esovita.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "europalettenkaufen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "evernaut.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fabiocicerchia.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fakeemergency.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "familienportal.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "faradrive.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -57906,7 +57759,6 @@ { "name": "oaktonhouseandgardens.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "omenprinting.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "organicskincare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "oximo.lviv.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "p0l.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "paullockaby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "paulw.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -58015,7 +57867,6 @@ { "name": "1in9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "24.ie", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "360-staffing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "494k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7898666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7plus.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9867666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -58522,7 +58373,6 @@ { "name": "kileahh.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "klop.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "komp247.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kosmos.org.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lares.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "launcher-minecraft.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "leafland.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -58578,7 +58428,6 @@ { "name": "newfoundland-labradorflora.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nilgirispice.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nonx.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "northebridge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "noxx.global", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "obec-krakovany.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "olandiz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59537,7 +59386,6 @@ { "name": "esmincg2t1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "etduvindemoselle.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eventsframe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "executiveresolutions.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "f1nal-lap.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "factory-f.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "femaex.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59578,7 +59426,6 @@ { "name": "imgal.vin", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "innovamag.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "inqorp.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "integrityglobal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "interparcel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iszy.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "it-inside.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59618,7 +59465,6 @@ { "name": "machidaclip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "madamegarage.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maiti.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "makejusticework.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mann-und-maeuse.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "manuscripteditorial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "margaux-perrin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59636,7 +59482,6 @@ { "name": "misakastudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mmsmotor.com.hk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "monetki.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "monsterandfox.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mopliangxing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mrcrowley217.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mtludlow.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59705,7 +59550,6 @@ { "name": "roosta.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rossfrance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rrssww.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ruthbarrettmusic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "s-yuz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sannefoltz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sargeson.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59730,10 +59574,8 @@ { "name": "sophiahatstudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "speakersbusiness.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "spt.tf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "staffhunt.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "star-darom.co.il", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stevehaid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "stevereedmp.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stockholmpride.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "storytellingforbusiness.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "strategos.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59781,7 +59623,6 @@ { "name": "webmaster-infographiste-lyon.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "websa.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "weidehelp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "westthorntonlabour.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "widely.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wigelsworth.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "woodwormtreatment.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60360,7 +60201,6 @@ { "name": "hybrydowe-samochody.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hypnovir.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iautodily.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "iboy1069.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "icanhazpass.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ihorizon.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "infodesigners.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60538,7 +60378,6 @@ { "name": "well-around-the-world.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "westcoastheatingair.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wifimb.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wingsofacow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wowgenial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wyczaruj.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--95q32l0t6b9cb17l.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60897,7 +60736,6 @@ { "name": "blueskydigitalstrategy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bonus.net.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bottinquebec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bouldercolorado.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bowtie.com.hk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "branno.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bufla.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61030,7 +60868,6 @@ { "name": "kaizenjuku.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kamilmagdziak.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "katsunet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kimkuhlmanphoto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kizzedbykelz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kolitel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kollegamenti.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61396,7 +61233,6 @@ { "name": "hektenkairez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "helpwithadoption.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hjertingfysioterapi.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "how2dev.tools", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hq77.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "huoyankan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ibb.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61555,7 +61391,6 @@ { "name": "strandbyfysio.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "styletron.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "summiteyekc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sv1880-lichtenau.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teboorthodontics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "technofirstonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "telemovi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61592,7 +61427,6 @@ { "name": "vladsfads.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vractive.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "warung.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "webhoffmann.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "what.tf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "whiskey.town", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "windowsdoors.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61925,7 +61759,6 @@ { "name": "distratus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "divingforlife.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "diygeek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "djfrenchy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dm1.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dmn.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dolph.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62078,8 +61911,6 @@ { "name": "imy.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "indota.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "info-o-zbozi.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "infodiscus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "infogym.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "informace-zbozi.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "infosecchicago.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "infosective.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62530,7 +62361,6 @@ { "name": "squirtingpussygirl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ss.systems", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stable.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "stadsbos013.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "star-one.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "startloop.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stehlik.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62565,7 +62395,6 @@ { "name": "teamliquid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "techcu.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "techjobplaybook.nyc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "technogps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tecknobox.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teeqq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tehniss.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64327,7 +64156,6 @@ { "name": "nn9728.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nordstromheating.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nsradiology.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "nudge.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nullwebscripts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nwea.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nyerjachioval.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64838,7 +64666,6 @@ { "name": "ift.cx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iiax.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iiax.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "iisjy.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "impns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "impresapulizia.milano.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "impresapuliziebergamo.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -65801,7 +65628,6 @@ { "name": "filecloud.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "files.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fizjoterapia.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fokos.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "foxroy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frtib.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fucknazis.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -65940,7 +65766,6 @@ { "name": "n6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "n6957.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "n6957.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "n8ta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "netexpat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "networg.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "networg.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -66229,7 +66054,6 @@ { "name": "ag888818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag88910.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agaa35.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "aglucky.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agslot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agslot.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agslot777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -66335,7 +66159,6 @@ { "name": "electrocardiographe.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "elle-weine.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eqassociates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "erfolgsmaschine.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "especialistagoogleadwords.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "espyder.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "euc.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67159,7 +66982,6 @@ { "name": "fraplaster.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frasestop.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frosty.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fulibyg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "funyirotraktor.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "getonyx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "glammybabes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67321,7 +67143,6 @@ { "name": "studyportal.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "swdiscount.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "syogainenkin119.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "taichichuanyang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tanshin.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "techmunchies.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "technotronikcanada.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68117,13 +67938,11 @@ { "name": "technistan.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "telford.codes", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "terabyte-computing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "terminalhrd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tested.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "testmx.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "testmx.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "testmx.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "textonly.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "thailandlongtime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thaqfni.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "theapplewiki.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thedinnerdetective.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68654,7 +68473,6 @@ { "name": "vamosbien.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vilafloridacapivari.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vinmmo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "voevm.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "volvoconnect.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wallisch.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wearefrantic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68676,7 +68494,6 @@ { "name": "y5bet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y6bet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y7bet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "yourbetterkitchen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yuer.sytes.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zi5.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl-59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70036,7 +69853,6 @@ { "name": "cartfilm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "casalcrevillent.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "casalinghedisperate.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "casalribeiro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "castalie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "castle.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "castleoblivion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70235,7 +70051,6 @@ { "name": "dranik.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dream-pools.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dreamcrack.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dreamwork.financial", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dreamworldstudio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "drianpublishing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "driv.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70940,7 +70755,6 @@ { "name": "ouwerling.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oxymail.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ozonstyle.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "p2d.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "p30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "p58101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "p58102.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73668,7 +73482,6 @@ { "name": "bestgearlist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blackteam.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blacktownbuildingsupplies.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "blessedgeeks.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blessedgeeks.social", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blm69.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blonde.style", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74602,7 +74415,6 @@ { "name": "imranraza.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "in1000worten.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ingfreelancer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "initialization.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "intelmed.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "intensify.pictures", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "internetmusicexchange.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74666,7 +74478,6 @@ { "name": "marvnetforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "max-it.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mdcghana.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "meevo.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mein-domizil.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mekanika.com.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "metroplex.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76098,7 +75909,6 @@ { "name": "whatismypublicip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wielrenbond.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wso01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wuzigackl.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--80ancacgircb8q.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yanniclandsmann.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ydraulikos.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76579,7 +76389,6 @@ { "name": "binoqlo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "biol.moscow", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bither.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bloom.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boreacr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bossdistribuidora.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "brandonforce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76622,7 +76431,6 @@ { "name": "cristianuibar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "crossword.city", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cruciverba.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cupclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d36594.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dark.fail", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ddepot.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77386,7 +77194,6 @@ { "name": "latinosup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "latinosuptv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lc862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "le-cameleon.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "leemankuiper.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lelux.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "liberhk.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77897,7 +77704,6 @@ { "name": "houseofpertijs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hrpage.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "igap.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ikaria.com.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "imiix.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "incrom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "inflatiecalculator.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79582,7 +79388,6 @@ { "name": "onlineradio.pp.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "openarch.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "openbayes.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "osano.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "paardenpro.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "packetoverflow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "panthi.lk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79666,7 +79471,6 @@ { "name": "sixcolors.lu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sjrcommercialfinance.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "skywalkers.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sobczakdesign.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "socialclimb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "softwaresecurityandradefernando.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "softwsabri.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80088,7 +79892,6 @@ { "name": "netferie.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "netferie.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "newcomm.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "newendsoft.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nic.ads", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nic.android", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nic.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80272,7 +80075,6 @@ { "name": "tantravoorlichting.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tdvg.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teamkoncert.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "technewera.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tekingb.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tele-points.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "texasbluesalley.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80344,7 +80146,6 @@ { "name": "wismile.lu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wolftain.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wolvesvtc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "worldtravelandadventure.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wormate.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xcraftsumulator.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xier.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81000,7 +80801,6 @@ { "name": "artikel9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "artisan-emmanuel.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aseth.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "asmrbuluo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aussiestories.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "awlgolf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ayselonia.onl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81365,7 +81165,6 @@ { "name": "gentlentapis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "germfr.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "get-baaam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "getcreditscore.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gethome.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "getmonero.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gezondheidszorg-ict.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81635,7 +81434,6 @@ { "name": "schnitzel-und-co.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sebastian-walla.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "selectra.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sexonosalao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sgsy.bid", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sh0uld.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shansen-online.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81903,7 +81701,6 @@ { "name": "baidu-s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ballisticdetailing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "balsallcommonbouncycastles.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "banlinhdanong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "barkassen15.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "beam-to.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bedrijvencentrum-maartenslaan.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82561,7 +82358,6 @@ { "name": "1234365t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1voz.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2dua.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3798.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3798.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3aexpert.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4kpi.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -83041,7 +82837,6 @@ { "name": "solidrop.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "speeder.best", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "speederss.best", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sportswear.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "spteam.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stevenapate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "studiekort.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -83436,7 +83231,6 @@ { "name": "klabnikova.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kolibrikapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kooibeds.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kopfootdoctor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kunow.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kup-sluzbu.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kupsluzbu.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -83834,7 +83628,6 @@ { "name": "b70302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b70305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "backpainandsciaticahouston.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bagira.guru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "baithe.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "banfun.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bangkrak.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -83985,7 +83778,6 @@ { "name": "darfurwall.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "darkcards.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "datensalat.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "datometry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "daygametraining.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dcdn.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deck.academy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -84899,7 +84691,6 @@ { "name": "herkel.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "herkelmedia.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hlz.mn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "horti-it.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hp-lexicon.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hqsmartpanel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hstudio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -85431,7 +85222,6 @@ { "name": "tonymaster21.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tout-a-fait.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tredevlet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "turismonochile.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vaccineskill.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vault.investments", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "velocityfiber.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -85802,7 +85592,6 @@ { "name": "naifcare.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "natlec.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "naturaleza.com.ar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "netcombne.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "news-trendlab.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "newsall.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nicetaninaka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -86906,7 +86695,6 @@ { "name": "drszucs.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dubridgeweb.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dumaurier.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dundeerecycling.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dust.bio", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dutabisnis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dwhightmolina.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -87173,7 +86961,6 @@ { "name": "knightsofcolumbus867.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "koelingmonitor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "koenmartens.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kokoro-singsong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kranbearys.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "krazy.net.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kuba-orlik.name", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -87766,7 +87553,6 @@ { "name": "zercutie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zihari.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zindaa.mn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zklcdc.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zrkhosting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zuiverjegeest.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "00228.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -87792,7 +87578,6 @@ { "name": "777234567.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7fon.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aarsunwoods.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "abelordbalagtas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "abemarx.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "accesslogisticgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "achmazstore.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -87875,7 +87660,6 @@ { "name": "basicports.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "basicports.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bastiaanbosch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bazarelregaloideal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bciiconsultores.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bcnation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bdtc.com.bd", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -87989,7 +87773,6 @@ { "name": "cs-kurnik.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cube-filing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cumulus.photo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "curl.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "customerfocus.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dada.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "daimonikos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -88066,7 +87849,6 @@ { "name": "eamigo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "easyserver.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ebooksbag.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ecdahls.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eckotech.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ecorak.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ecotecelevator.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -88837,7 +88619,6 @@ { "name": "xy.ax", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y.gy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yannyann.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "yellowtrace.net.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yj4p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yjav11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yjav8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -90297,7 +90078,6 @@ { "name": "alexmainz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alexmainz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alexmainz.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "alivelimo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "allerlei-havelte.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amaruddinmufid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ambicorprealestate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -90383,7 +90163,6 @@ { "name": "delvinoadegas.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "delycate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "derbysound.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "desarrollosmoyan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "detonic.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "devloope.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "digitalcarbide.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91355,7 +91134,6 @@ { "name": "sharingiscaring.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shaunallen.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shiulungkungfu.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "simplesend.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sorocabacopos.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "streamlineaudio.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "strogov.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91369,11 +91147,9 @@ { "name": "tidton.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tipscesarlopez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tomkwok.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "toorfor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "torwart-jugend.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "town-night.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "traitement-arthrose.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "travel4history.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "trekonbh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tutamail.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tutanota.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91559,7 +91335,6 @@ { "name": "am2digital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amasea.yachts", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ambersoftware.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "animate.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "animepahe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ankureurope.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ao3fan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -92198,7 +91973,6 @@ { "name": "linotrac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "linotrac.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "liongueststudios.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lovecode.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lsj.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lunademiel.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "luxplay.com.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -92398,7 +92172,6 @@ { "name": "talonro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tamatoyaku.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tamronhallshow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tarchive.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tccb.gov.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tcybert.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -95796,7 +95569,6 @@ { "name": "grafenberg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "graft.spb.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grallersdegegants.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "grammofono.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grand-books.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grand-knighki.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grandi-books.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -96509,7 +96281,6 @@ { "name": "jobrus.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jobsportalbookmarking.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jobynet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "johanlog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "johannes-schaefer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "johncook.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "johnwinter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -100690,7 +100461,6 @@ { "name": "travelbiz.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "travelcenter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "travelclinic.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "travelfoot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "travelfriend.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "travelinsurance.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "travelmontenegro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -102374,7 +102144,6 @@ { "name": "991ccc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aaflalo.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "abeshultz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "abzarweb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "advancedroofingmuskoka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ae86m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agasaya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -102750,7 +102519,6 @@ { "name": "qbacano.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qjg.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rabec.com.sa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "renedekoeijer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "riley.love", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rinton.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "robin-kusch.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -102813,7 +102581,6 @@ { "name": "thoughtworthy.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tiempoalegria.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "top4c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tripartie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tulevaisuusdemarit.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tupahost.net.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tupperwaresalamanca.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -102894,7 +102661,6 @@ { "name": "archaeology.lk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "artlinestix.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "artofclouds.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "asdf.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "asean-wen.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "astyork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "at-machining.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -103171,7 +102937,6 @@ { "name": "mizuasobi.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mkm.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mobilerhandwerker.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mobilise.solutions", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mockups.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mokujinken.tokyo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mondsee-psychotherapie.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -103427,7 +103192,6 @@ { "name": "9jajuice.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "a1scubagear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aakashbhati.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "aappe.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "abnobapetstore.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "acceleratedpayments.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "acdk2.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -103570,7 +103334,6 @@ { "name": "docusign.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "domains.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "donislawdev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dostal.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "drivingtest.autos", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ds-statistik.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eatinghouz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -104047,7 +103810,6 @@ { "name": "dentalgap.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "designburners.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "destiney-arkaden.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dg1298.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "diis.plus", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "diversegold.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "djfunkyju.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -104214,7 +103976,6 @@ { "name": "medifit.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "medradar.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "megainformatyk.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "meridianbanker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mesasysillas.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "michael-simon.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "minbrew.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -104294,7 +104055,6 @@ { "name": "proagile.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "profile.ooo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "progenixlab.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "prosperfit.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "provinzblogger.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "psychotiq.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "publish.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -104882,7 +104642,6 @@ { "name": "physiotherapist-physicaltherapist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pigeonracinginformation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pirateproxy.name", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "plex-server.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "poder.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "porntop100.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pornvidsfree.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -104917,14 +104676,12 @@ { "name": "rostirolla.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rtl.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rtonin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rumbies.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rx-diet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ry88url.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sandtime.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sanskrit.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sb-graph.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schwimmschule-kleine-fische.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "server-check.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "seti.co.il", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "setin.srl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sha512.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -105211,7 +104968,6 @@ { "name": "flugplatzmanager.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "formacionodontologica.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frahub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "framatube.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freewoman.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "froh.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frutidump.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -105521,7 +105277,6 @@ { "name": "sistemasarquitectonicos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snowatka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "softwaterinc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "somom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sorcemegavendas.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sovraindebitamento.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sphera.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -105652,7 +105407,6 @@ { "name": "yy30019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z30019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "znfinnews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zorox.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zporno.porn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zz30019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "flynnhub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -105972,7 +105726,6 @@ { "name": "modacruz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mods.fm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "monveilleuretmoi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "morwynna.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mrsourabh.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "msoida.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mueblescuerolorca.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -106096,7 +105849,6 @@ { "name": "taskman.london", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "taxisantandreudelabarca.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tch-forum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tecnologia.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tecnomagazine.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teplo-russia.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "termodej.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -107508,7 +107260,6 @@ { "name": "roishopper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rosewebdesignstudio.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "roveridx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rpcinmobiliaria.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rpj.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "russell-tech.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "s2.coach", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -108287,7 +108038,6 @@ { "name": "dallaswebsite.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dangeredwolf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "danielaeichberger.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dannys.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "date-hijri.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deadspin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "decorarei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -108442,7 +108192,6 @@ { "name": "jobinbennykutty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "johngreatwood.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "joshmoulin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kabataanpartylist.com.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kahane.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kazumi-clinic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "keithwillcock.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -109049,7 +108798,6 @@ { "name": "oxalato.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oz-artfocus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pacificaent.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pagalworld.wiki", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pairfum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pakistanwatches.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "papergamer.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -109390,7 +109138,6 @@ { "name": "czqu.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "daily-city.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dajjal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "daveroverts.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "davincigourmet.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deanpearce.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deluxeblogtips.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -109517,7 +109264,6 @@ { "name": "investinestonia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ioghawaii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "irr59.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "islamerkantho.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iswag.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "izolyatsia.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "izone.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -109794,7 +109540,6 @@ { "name": "wowkia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wpautolistings.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wpdgimart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wpfy.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wphaxor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wpslimseo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wpspeedmetrix.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -109855,7 +109600,6 @@ { "name": "babacloud.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "backlinksgenerator.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "badwi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "baocaosuhp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bathrobes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bavaropuntacanahotels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "beaconfed.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -110040,7 +109784,6 @@ { "name": "ilondres.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "incidentresponsesolution.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "incidentresponsesystem.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "incpak.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "infinifour.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "infomate360.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "infradot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -110988,7 +110731,6 @@ { "name": "artiman-center.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "asla.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "assid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "associationguillaume.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "atlasdog.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "atris.media", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "audionamix.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -111118,7 +110860,6 @@ { "name": "eptreviewer.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "erpsolutionsmart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "escuelitasansebastian.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "espacetendance.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "etmtobik.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "exceloreflexology.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "executiveice.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -111229,7 +110970,6 @@ { "name": "liuwenxuan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "loli.gallery", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lordgrant.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lovelylanguedoc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lu2343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "magsdata.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "malrox.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -111306,7 +111046,6 @@ { "name": "praktijkdeeersteindruk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "praxis-liebner.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "precisionsportsonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "privatetrainingonline.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "prizrak-v-dospehah.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "proalist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "projectborealis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -111446,7 +111185,6 @@ { "name": "wdpapi.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "weaponsinhebrew.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "weatherproduct.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "websitesbymark.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "webstellung.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wefixmd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "westbeachparks.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -112001,7 +111739,6 @@ { "name": "alphalight.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alphalightgear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amineamellouk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "amsuisse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anjaamelia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ankarakurumsalwebtasarim.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ao3-cn.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -112043,7 +111780,6 @@ { "name": "brandhout-b-tree.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "brasilianskbikini.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "brushcreekdistillery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bureaux-entrepots.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cadiskitchen.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "callisabel.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "camaradecomerciosiguatepeque.hn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -112088,7 +111824,6 @@ { "name": "digitalrowdy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "digitlyx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "djh-nordmark.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dluxelab.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dontasktoask.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dovemoe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "drathaisdentista.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -112261,7 +111996,6 @@ { "name": "pension-chevaux.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "persuasionmatters.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "phg-eg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "piastaola.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "play-lu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plexmark.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pmi-install.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -112483,7 +112217,6 @@ { "name": "chaturbates.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chatweb.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chdg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "chrawrizard.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "christophfink.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "claypenblanks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "clickaplay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -112767,7 +112500,6 @@ { "name": "qbicwashrooms.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qiangtou.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qingyule.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "qtxh.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "quinteroorthodontics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "quiq.im", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "radio-pulsar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -113319,7 +113051,6 @@ { "name": "freepik.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freezvon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freshmail.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "freshstep.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "friedcoffee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "friendlytennisclub.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "friendofthehoneybee.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -113532,7 +113263,6 @@ { "name": "lasmorfianapoletana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lastlightlodge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "latdor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "latestmyanmarnews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "latouchemusicale.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "laura.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "laurahausmann.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -113568,7 +113298,6 @@ { "name": "lukasbures.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lyckselefrasch.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "m9297.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "macreports.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mahroos.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maisonmalou.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "makeagif.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -113965,7 +113694,6 @@ { "name": "unblockit.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "understrap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uniritter.edu.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "uploadcare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "urbanmsp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "urfayazar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "us-10.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -114028,7 +113756,6 @@ { "name": "xn----etba6agm4a9a.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--losolivareos-jhb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xpertcenter.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xposure.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y-syouten.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y9297.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yakitofisi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -114055,7 +113782,6 @@ { "name": "729solutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8868ty8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9111s.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "925silverjewelry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9dragonstea.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aboutyou.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ac.id.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -114306,7 +114032,6 @@ { "name": "missouriheatingcoolingadvice.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "missyapartman.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "misterseguros.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mixinglight.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mmlebanon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "moheatingcoolinghvac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "monicz.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -115457,7 +115182,6 @@ { "name": "cholleria.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cinderellacloset.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "classyhandmade.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "clever-fit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "clgb.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "code4u.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "compraenpijama.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -115799,7 +115523,6 @@ { "name": "archerlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "archerlongx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "archerxlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "armpension.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "arthurdev.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "arztpraxis-kubalok.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "asher.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -115915,11 +115638,9 @@ { "name": "fasam.edu.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fastesp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "federize.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fertisa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ffty2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fietsherstel.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "finvantive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "flblog.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "followme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fossbytes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakinstream.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -116008,7 +115729,6 @@ { "name": "lautremode.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lazosamericaunida.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lekkergoings.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lemcarni.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lena-klein.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lena-klein.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "leonardcyber.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -116508,7 +116228,6 @@ { "name": "joshu.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "justin3d.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "justyardsign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaibinyang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "katewrightmba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "khimno.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kinderopvang.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -116562,7 +116281,6 @@ { "name": "modul8r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "montserrat.ind.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "movedigital.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "munkavedelemaruhaz.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mycoordinates.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mylearners.vic.gov.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "myrealestateautomation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -117113,7 +116831,6 @@ { "name": "gyefund.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "h2orto.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "habrastorage.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hartmann-hartmann.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hatierchinois.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hcr2bot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "healthyhomeventilation.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -117220,7 +116937,6 @@ { "name": "laud.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "layan-luxurylighting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "leandrebergeron.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "leapa.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ledebergleeft.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "legen.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "leivadi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -117338,7 +117054,6 @@ { "name": "o2.tn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oapks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oasiskitchens.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "obve.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ocasio.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ocmwgent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oettig.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -117529,7 +117244,6 @@ { "name": "taciso.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "taikhoanfree.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "taskforce.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tayebbayri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tcook.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tcook.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tcshop.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -117582,7 +117296,6 @@ { "name": "twilite.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "typecho.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ugodeal.md", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "unausa.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "unblockit.lat", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "universal-techno.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "universalspf.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -117789,7 +117502,6 @@ { "name": "damiengobron.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "data-mining.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dazenelevator.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dblfree.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ddi.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dealdelicate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "demisch-tim.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -118280,7 +117992,6 @@ { "name": "birchlane.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bitazza.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bitwoci.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "blacksearegion.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blankstyle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blatnic.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blogomoll.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -118450,7 +118161,6 @@ { "name": "hometeenorgy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hongfumall88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hoorgold.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hotelv.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hotrender.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "huelvatrabaja.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "huiskopenspanje.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -118579,7 +118289,6 @@ { "name": "mellmon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "meslekifikir.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "messenger.md", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "metalloprokat.market", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mezemeze.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mfg-forex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mfg-fx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -118677,7 +118386,6 @@ { "name": "polymathian.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pozyka.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "prepz.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "presidentinternet.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "press-wall24.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pricesdoors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "profarm.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -118927,10 +118635,8 @@ { "name": "alfst.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "allgooddeedshomes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alonely.place", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "along.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "andhaniawan.my.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "andresrosa.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "androidgadgematic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anomalous.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aparistravel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "applydirect.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -119000,7 +118706,6 @@ { "name": "chto-posmotretj.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chukcha.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "churchplaza.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ciordigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "citycardgand.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ciudadrealtrabaja.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cleanmysolarpanels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -119289,7 +118994,6 @@ { "name": "mynak.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mysaldo.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mysterycards.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "nakvartiru.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "namaanak.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nanco.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nanco.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -119332,7 +119036,6 @@ { "name": "onlineradious.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oogent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "opendolls.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "opikini.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ordigame.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oroconews.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "osaki.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -119426,7 +119129,6 @@ { "name": "ranikaart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rbzl.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rded.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "realty.tatar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "refrigeracion2hermanos.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "regtify.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "regtify.com.cy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -119497,7 +119199,6 @@ { "name": "snetts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snrd.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snukep.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sochi.ooo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sodi.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sodigent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "softbabyducks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -119648,7 +119349,6 @@ { "name": "xaydungnamcuong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn----7sbbfsshjvgyde8g3c.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn----7sbedlbhv2azb6a.xn--j1amh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xn----7sbfchj2dvap7h.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn----8sbfkobhgmxahfmmhe8b8c6ff.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--36-dlcdun7abo4a.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--80aqlihiyv.xn--p1acf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -119675,8 +119375,6 @@ { "name": "88518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "88creative.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "a789.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "aaaportaserve.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "aajkakavi.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aavstudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "abc-sport-klin.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aboutamit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -119815,7 +119513,6 @@ { "name": "battlepetsonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "batwatt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bavaria-feuerloeschershop.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bbkl.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "beashandmade.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bedez.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "beehealthyllc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -119843,7 +119540,6 @@ { "name": "blogdelgloton.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bluecoastelectric.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bluecollarfetishwear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bluegrottoscuba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bluemango-studios.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bogolybu.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bolotnaya.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -120331,11 +120027,9 @@ { "name": "mad-fabrikken.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "madisonsjewelersorlando.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maerzpa.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mafondue.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "magicitaca.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "magicvaporizers.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "magneticmoney.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "magnewsblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mainstreetartisans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maintainyourwebsite.help", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mairimcosmetics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -120552,7 +120246,6 @@ { "name": "powerofsocialtech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "powerplanter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "powerup.com.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "prasso.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "precedenceum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "predmetnyj-fotograf.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "primelendingdallasfw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -120734,7 +120427,6 @@ { "name": "theatergroep-o.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thebsclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thechefsgear.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "thecombustionway.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thecompanysheffield.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thecook.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thedivesource.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -120819,7 +120511,6 @@ { "name": "vid-eo.click", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "villagephysicians.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "villaismaelcortinas.uy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vinsonconsulting.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "virtualtabletop.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vivapharma.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vnlfrk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -120921,7 +120612,6 @@ { "name": "worldclassfriend.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "worldnetone.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "writestreak.team", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ws5.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wtfcripto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wum.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wz8.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -121102,7 +120792,6 @@ { "name": "alcar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alcaralifusi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alchemisten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "alcionesakugawa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alcoholicbeverages.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alcoholismtreatment.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aldealices.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -121292,7 +120981,6 @@ { "name": "automir.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "automosanto.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "autoparts-for-foreigncars.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "autosneed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "autosprint.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "auxilium-informatique.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "avacatossiu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -121647,7 +121335,6 @@ { "name": "charqawi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chat-cam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cheatmasters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cheazey.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cheazey.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cheazey.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chechencity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -122290,7 +121977,6 @@ { "name": "elvis-presley.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "email24.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "emavending.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "emdyn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "emeraldheights.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "emergency-broadcast-system.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "emersonreview.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -122373,7 +122059,6 @@ { "name": "evendesign.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "evenfall.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eventjams.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "eventusgc.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "evergreenilder.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "evermade.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "everwinter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -122945,7 +122630,6 @@ { "name": "ileonidze.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ilneminis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ilona-france.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ilouis.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ilovefanyi.win", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ilovefun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ilquintoseitu.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -123017,7 +122701,6 @@ { "name": "invariant.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "investasipasti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "invokingspirits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "involve.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ionline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iperon.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iperon.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -123041,7 +122724,6 @@ { "name": "itrew.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "itsmohitchahal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "itsnotnot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "itxcjm.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ivan-tadej.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ivankuchin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ivanzorin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -123063,7 +122745,6 @@ { "name": "janetandjohns.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "janservfl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "janujani.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jasawebbisnis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jasik.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "javafiles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "javsod.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -123114,7 +122795,6 @@ { "name": "jtbservice.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "julenetxaniz.eus", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jurquestion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "just6f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "justfoodfordogs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kabal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kadett-c-club-limburg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -123660,7 +123340,6 @@ { "name": "mohaabobclan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mohamedsherif.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mojome.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mon-lab-digital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "monakinolandscape.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "monarchisc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "monconcoursdgfip.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -124219,7 +123898,6 @@ { "name": "relatosypoesias.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "releases.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "relentlessroofing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "remateszarate.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "remcuavilla.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "reminded.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "remontdot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -124893,7 +124571,6 @@ { "name": "txtentertainment.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tyinnovations.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tylerdurden.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tylerharcourt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tyuning-avto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ua-autonews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uba-tra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -125385,7 +125062,6 @@ { "name": "aptcaust.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "apuestalegal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aqcbv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "aravitor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "archipaedia.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "arcopay.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ariensfoundation.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -125789,7 +125465,6 @@ { "name": "faribanx-porn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fastfloorscreed.ie", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fati.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fazer.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fbo.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fdmg.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "feastshare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -125956,7 +125631,6 @@ { "name": "hyperjit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "i-cyber.gov.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "i4cu.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "iain.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iban.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ibu.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "icehousefit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -126137,7 +125811,6 @@ { "name": "lojadafloresta.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lokeryu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "londonpods.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lookae.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lovlyluna.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lpcom.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lpid.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -126405,7 +126078,6 @@ { "name": "popfitclothing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pornbabetyra.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pornorapido.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pornquebec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pororoca.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "portovelhoshopping.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "postacyprus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -126620,7 +126292,6 @@ { "name": "stylesaag.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stylezutra.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stylspire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "subjecto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sublimesurface.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sublimigeek.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "summermovies.nyc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -126656,7 +126327,6 @@ { "name": "tealegrar.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teamkgsr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teamwork-bad-wurzach.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "teamxavier4ever.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teatrolatea.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "techgama.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "techlab.co.il", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -126774,7 +126444,6 @@ { "name": "vasi.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vatav.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vcsource.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vectorsiriushockeyclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "verakoubova.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vertichost.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "veryestate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -128533,7 +128202,6 @@ { "name": "streaming.jetzt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stroigid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stroykomi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sttpk.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "studentjournalist.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "studentnep.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "studiocharloslivro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -129022,7 +128690,6 @@ { "name": "highdonate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "highlandsmode.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hm-notes.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hocz.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "holger-schwarze.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "holiy.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hollandhouse.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -129134,7 +128801,6 @@ { "name": "menddie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mexby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mfoda-eg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mftn.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "midial.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mielelpinsapar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mightytips.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -129180,7 +128846,6 @@ { "name": "nurshka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nycu.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "o2design.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "oasisbahamas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oceancore.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "odziezrobocza.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "okinawa-seaside.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -129209,7 +128874,6 @@ { "name": "palmaxgroup.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "panhardclub.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "parcelauditpartners.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "paris-elysees.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "partners4results.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pawsandpurses.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pedrollo-ua.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -129494,7 +129158,6 @@ { "name": "aboutmarketing.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aboutmedicine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "absolution.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "abtech.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aceweb.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "acmilan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "actievloerkleden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -129710,7 +129373,6 @@ { "name": "cgrequinos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "charlesonrecreationarea.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chauvelcinema.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cheerpassionallstars.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chesterultimatefrisbee.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chiffrer.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "choicemediaworks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -130578,7 +130240,6 @@ { "name": "avstack.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "avtojurist.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "avtomaniya.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "awaua.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "awayword.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "awxg.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "axelcalle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -130608,7 +130269,6 @@ { "name": "barnestransport.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "barrack.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "barzza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "basenio.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bashkiria.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bati-renov.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "batka-stealer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -130785,7 +130445,6 @@ { "name": "cathedralappointments.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "catholicteuchtar.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "catscreativecakes.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "catskillselfstorage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ccnm.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ccpinturas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cctld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -131200,7 +130859,6 @@ { "name": "funnyvideoclips.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "furniture-for-home.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gabbeh.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gabtitui.gov.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gajabhindi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "galatabazaar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "galaxit.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -131812,7 +131470,6 @@ { "name": "mestovpohybu.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "metalweaverscreations.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "metrixdm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "metrophone.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "michaelboogerd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "michaelhastrich.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "michaeljames.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -132786,7 +132443,6 @@ { "name": "truecircumcision.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "trusted-medications.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tscfoods.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tsra.gov.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tstech.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tstlr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tsuki.link", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -132944,7 +132600,6 @@ { "name": "xiuzhouinvest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xloffice.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--90acrudcl3j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xn--c-xga.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--zca.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xnsir.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xtom.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -133004,7 +132659,6 @@ { "name": "31-elagage.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "33-couvreur.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "33-elagage.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "339999.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3speak.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "40010monogatari.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "44ada.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -133131,7 +132785,6 @@ { "name": "baclofen.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bacus.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bad-homburg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "badanteinformatica.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "baharmusic24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bahrain.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "baif.hr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -133343,7 +132996,6 @@ { "name": "degreecollege.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "delasamericas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deluxewindowanddoor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "democrats.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "denkorolev.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dennisrubin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "departamentoslosolivos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -133364,7 +133016,6 @@ { "name": "diogof.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dip.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "divband.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "divesourcefl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "divvy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dizayn-cheloveka.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dj-eran.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -133996,7 +133647,6 @@ { "name": "renvisegrad.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rexograph.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rhjf.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "riccardoslanzi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ripin.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "robertoggarcia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rootpak.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -134192,7 +133842,6 @@ { "name": "visit.natal.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vivoldi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vokov.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "volkswagensaigon.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vpetkov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vvd.bz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w0.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -134227,7 +133876,6 @@ { "name": "xanaxanax.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--7tq798c.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--kryptowhrungen-cib.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xy96.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yantarniy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yasmin.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ybexalev.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -134299,7 +133947,6 @@ { "name": "amped4ski.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "andonivr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "andreas-kurtz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "andrew-lazarev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "angiology.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anikabyaabi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "antennekaart.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -134315,7 +133962,6 @@ { "name": "armamentevolved.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "artmaterials.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "artwhale.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "asianmaterials.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "askindia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aspirateur-univers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "assistancepaws.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -134609,7 +134255,6 @@ { "name": "cangku.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "capeprivacy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "capris.cr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cargomurah.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cartegrise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "casinocity.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "castillo.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -134639,7 +134284,6 @@ { "name": "corebit.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cortadorplasma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "counterespionage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "countryatheartcandles.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "crealab.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "credentsys.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "creditoconsolidado.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -135306,7 +134950,6 @@ { "name": "skipbinsforhire.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smashbylaney.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "soccerbetwinner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sochiatrium.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "socseti.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sold.red", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "soloproductos.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -135416,7 +135059,6 @@ { "name": "turksell.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tweedandtalon.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "twinspringcoupling.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "twobrothersbbq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "type74.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "u15.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "u15x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -135501,7 +135143,6 @@ { "name": "2fa.directory", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "369369.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5keys.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "60mbanime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "a1qualityspareparts.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "abogehad.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aboutearning.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -135981,7 +135622,6 @@ { "name": "cattery-mundilfari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "catterydumagasin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ccshire.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cdnmc.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ceet.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "celayix.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "celebratesportsnetwork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -136082,7 +135722,6 @@ { "name": "cyclingmonthlyest.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyril-leytsihovich.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "da-tixe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dalbarsqm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dallasdesignco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "daniya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "darc.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -136997,7 +136636,6 @@ { "name": "luxurythatlasts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "macrotech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "madoucefrance.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "makaradigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maliyehukuk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mallorca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "manchestermoneyman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -137633,7 +137271,6 @@ { "name": "travelsunflower.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "travelsuperhero.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "travelurban.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "trubapro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "truongthanhaudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "trustedpropertymanagement.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "trustreview.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -137691,7 +137328,6 @@ { "name": "yorkmoneyman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yoti.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "youngdevotion.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "yukinastorage.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zefort.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zenyxis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zheltyy.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -137834,7 +137470,6 @@ { "name": "bksites.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blathinwheatens.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blauwepanterengonnie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "blockvideo.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blogabouthealthy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bloggerzarausa.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blogpark.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -137911,7 +137546,6 @@ { "name": "cortex.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "costalinux.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "couponsale.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cpoj.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "craftsofcleo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "creattic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "creditopessoal.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -138520,7 +138154,6 @@ { "name": "plasticdonut.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plasticscm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plasticsurgerypartyest.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "plataformaslms.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "play-mate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "play3niu22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "play3niu66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -138536,7 +138169,6 @@ { "name": "poolvilla-margarita.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pornbabetyra.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "porumbei.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "posvq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "powerbux.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "presidiotunneltops.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "primesense.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -138962,7 +138594,6 @@ { "name": "darlingtonia.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "debicicletas.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deelmee.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "devreactorlabs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "devs.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "devs.icu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "devsectools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -139478,7 +139109,6 @@ { "name": "caueteam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cbchslax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cecitim.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cerby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cervek.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "changeforfuture.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "charge.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -139852,7 +139482,6 @@ { "name": "my-salesforce-scrt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "my-salesforce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "my-salesforcescrt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "myavocado.md", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mycats.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "myface.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "myshiftbid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -140078,7 +139707,6 @@ { "name": "storyark.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "streameo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stsen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "studiodriban.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sugoicraft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "suleeka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sumanai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -140635,7 +140263,6 @@ { "name": "hairloss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "halilova.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "halilova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hampuskraft.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "happygardencenter.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "harwoeck.group", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hawaiianlion.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -140990,7 +140617,6 @@ { "name": "sealart.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "seo-promox.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "serralheriaeseguranca.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sethsimmons.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sexoclicker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sexoclicker.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sexoclicker.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -141295,7 +140921,6 @@ { "name": "albaronventures.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "albuterolwithoutprescription.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alchemyequities.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "aldevadigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alejandromoda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alemagia.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alexandre-acaries.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -141311,7 +140936,6 @@ { "name": "allandrich.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "allandrichonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "allboard.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "allianceautomotive.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "allindiatanzeem.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alltwwk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "almajaniyate.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -142231,7 +141855,6 @@ { "name": "gezakekazeg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ghiro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gibkoesteklo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gibumpark.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gieoduyentinhdo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gijonshiro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gilmasocial.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -143113,7 +142736,6 @@ { "name": "obereg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "obsceneeulogy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "obuhov.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "oceaniaservergroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oceanshaman.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oceansidetour.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ocenilla.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -143552,7 +143174,6 @@ { "name": "sergiomur.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sertim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "servicespot.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "servn.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "seseai.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sesliturkgencligi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sexgood.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -144182,7 +143803,6 @@ { "name": "yugioh-duelodefinitivo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yugiohthenextgeneration.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yummycouple.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "yurilight.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yus-azaria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zadd.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zakachat-temi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -144334,7 +143954,6 @@ { "name": "blogfeng.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bluegorilla.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boathut.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bonyancard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "braidice.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "brasillifeoficial.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "braynblog.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -144551,7 +144170,6 @@ { "name": "hentaiz.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "herriman.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hfikq8.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hikawa.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hipsterpixel.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hoardit.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "holmes.ie", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -144672,7 +144290,6 @@ { "name": "lesconfiseriesdaleth.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lesnet.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "letterrill.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lgf.im", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "libramedia.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lilithqueisser.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "limitededitioncomputers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -145138,7 +144755,6 @@ { "name": "audiobit.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aureshotels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "autoinkoop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "avanzbanc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "avm99963.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ayersanaheim.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ayerscoronaeast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -145240,7 +144856,6 @@ { "name": "bistum-eichstaett.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blogidol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bluetechnician-inc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bonyancard.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boon.so", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "booths.cyou", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boxingclubduval.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -145521,7 +145136,6 @@ { "name": "expodum.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "expressmedcarenj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fabianfrisch.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fachschaften.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fanbike.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "farmaciaanagallis.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "federalprisonforums.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -145557,7 +145171,6 @@ { "name": "glacialexperience.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gmavsg.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "golfturkey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goodlandks.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gorgeouspizza.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "govtnaukrinews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grapheneos.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -145738,7 +145351,6 @@ { "name": "movnest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "multsearch.eu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mushroomcloud.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "muuglu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mygame.me.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "myroaccutaneexperience.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "n1co68.freeboxos.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -145780,7 +145392,6 @@ { "name": "oduachambers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "offerground.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "office-addins.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "oh14.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oliver-wenz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oliverlanguages.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oliverwenz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -146036,7 +145647,6 @@ { "name": "truckscout24.lv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "truss.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tuamipartanna.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tudafa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tuneserver.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tupsicoayuda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "turc.church", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -146052,7 +145662,6 @@ { "name": "unoodostoques.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "unpost.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uploadtokiosk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "urbantecno.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "utahcountydjcompany.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vadis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vado.li", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -146366,7 +145975,6 @@ { "name": "askatrans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "asociacionatlas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "asociacionlarueda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "assistanteplus.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "atabor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "atletismomacotera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "atomicanet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -146750,7 +146358,6 @@ { "name": "highstage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hinkel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hitglish.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hoangphuongtek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hobo.video", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hoc-bv.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "holydumplings.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -146759,7 +146366,6 @@ { "name": "hoofexplorer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hoofexplorer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hostker.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hotsupreme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "houseplant.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "howtomediacenter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "huanwei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -146874,7 +146480,6 @@ { "name": "khabland.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kidsplace.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kievholod.in.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kif.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kilpiapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kindredspirits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kingpay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -146990,7 +146595,6 @@ { "name": "nachodelacruz.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "naraku.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "narutodelivery.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "nashc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nautika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ndscreening.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nemnodes.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -147204,15 +146808,6 @@ { "name": "tattoocorina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "taxly.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "team-russia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "teambeam.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "teambeam.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "teambeam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "teambeam.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "teambeam.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "teambeam.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "teambeam.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "teambeam.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "teambeam.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "telhatelite.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tender-alert.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tennisschool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -147306,7 +146901,6 @@ { "name": "wittamer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wixmultimedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "woonplein.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wpsteam.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wuellenweber.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wurstmineberg.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wynlv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -147670,7 +147264,6 @@ { "name": "cuttingedges.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cuvantul.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cvalda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cxcarepro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyber-party.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyberboy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyberclaw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -149784,7 +149377,6 @@ { "name": "aixm.aero", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "al-hekka.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alborgwatch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "alcasan.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aldebaranbm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alessandropuccistudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alexsavin.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -149832,7 +149424,6 @@ { "name": "avanade.com.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "avanadealumni.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aviaskan.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "aymhome.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "azs-nw.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b11p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "backupauthentication.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -149950,7 +149541,6 @@ { "name": "duhurensohn.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dvkg.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "e-buspacific.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "eatmportal.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eco-doors.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "edacasa.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "educampus.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -150020,7 +149610,6 @@ { "name": "globemilk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "globemilk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "golfbettingsystem.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goxyshuk.duckdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gpwa.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "graine-de-cafe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "greffe-de-cheveux-turquie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -150248,7 +149837,6 @@ { "name": "posterlounge.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "powerpc.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "premieraviation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "primevtc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "projetootaku.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "promobit.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "propertyvalue.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -150335,7 +149923,6 @@ { "name": "smksatriamagelang.sch.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smooth-e.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snapmuse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "softmas.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "softowe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "soin-rebozo.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "solongandthanksforallthe.fish", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -150423,7 +150010,6 @@ { "name": "udilicitana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ultrabkk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "umasoda-tohoku.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "universalmusic.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "universitypark.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "unsupervised.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uopeople.review", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -150448,7 +150034,6 @@ { "name": "wartegseberangsana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "webka.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "websdeweb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "webwiz.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "weijero.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "weitundbreit.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "werranfehtan.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -151046,6 +150631,832 @@ { "name": "zerodhacapital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zofoke.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zxtremetech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0n3b1t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "100up.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "123soldcash.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1337sound.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1990.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3changtrai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3gdev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3niu81.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3niu85.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3niu89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "415.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "567.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "7992.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "800999.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "888700.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "888900.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "999700.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "a.tt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aaablindfactory.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abbuc.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abgame.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abminv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "accurx.nhs.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acrylicstyle.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "actualprogressivevotersguide.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adacoins.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aec-security.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aficiontigres.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "africanconstellations.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aftamurae.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aga.gov.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agencecentaure.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agenciainhouse.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agora.co.il", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agri.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ahmetazgin.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aibuz.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airlinelondon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airlinetic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airlineticketscheapflights.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airlinetovegas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airporttaxibudapest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airporttransferbudapest.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ajvco.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akimitsu.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alexblock.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alinecordeiro.adv.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alkiraresidences.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allyoucanstyle.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amedeo.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andrewvannyplumbing.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anehost.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anglais-angouleme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ankaraotomobilcikmaparca.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ankaraotomobilyedekparca.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anketlekazan.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anntatt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antivirus.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antonmcclure.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antti.codes", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anypromo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "appac.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "approvedcashmax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apricotactuaries.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apropont.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ariacellini.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "armando.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arnaudligny.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "artushak.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asap-advice.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astcorporation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atbtaxi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atyafesolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "auralia.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ausfinex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autofornal.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autologix.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "automekbromma.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autoroutes.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "available.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "awakinn.co.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aydahwa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "b5i.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babycezi.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babytoschool.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bahraincredit.com.bh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bakerymazowsze.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "balls.zone", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bargenarenji.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "barlow-media.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "basel-onlinemarketing.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bataminnovationhub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "battlefield2042.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bddam.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bddam.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beaflamingo.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bebechegou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bebechegou.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beberik.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beetsforyou.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "benjilopez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bertbrockham.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "besonders-s.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "betterlifekidsclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bf2042.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bgmsquad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bighouse-events.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bigskyhomebuyers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bigsmallhosting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "birraisocialclub.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bit-academy.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blakescrepes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bluechipspace.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blueridge.social", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bookmakers-expert.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "borisenko-alexander.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boughtbymany.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brandbook.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bravurasolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brendanreev.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "budapestairporttaxi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "budapestairporttransfer.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "budapestairporttransfer.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "budapesttaxi.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "budapesttaxi.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buildingpassport.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bullesdeculture.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bvlp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caillou.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "calendriergratuit.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cambriacoveapartments.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camgirl-info.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canntinas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carniceriaserrador.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cartoesemilhas.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "casabitare.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "casinocity.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cassembly.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ccover.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cellini.name", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centr-postavok.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centralkladno.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chandradeepdey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "charpy.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheapdomainnameindia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "checkda.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chialab.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chireiden.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chrisdasie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chrisliebaer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chui.bi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cientotreintagrados.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cindinero.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "circular.fashion", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ck-pms.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cleverlance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cleverlance.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clickdocs.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clio-dev2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cloud7.news", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cnclp.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cock.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "codev.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coffeekaroasters.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coinpaprika.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colegios.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colossean.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comicstrove.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "compareweddinginsurance.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comtelnow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comunitelia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "concreteworksohio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "concreteworksplus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conform.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "congdongvietnhat.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coronalab.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cpflsolucoes.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "craftersmarket.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "craftyun.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "create-it.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "credithelpinfo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cricketwatch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "critical-scientists.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crocc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crystalpack.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cube64128.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cubicempire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cxm.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d1zh9ivw96w8wn.cloudfront.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dailykosbeta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "damibaby.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "damienchicotphotographe.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dasareview.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dasaskincare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dastchin.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dastchin.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "datawow.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daviddegner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dayuse.com.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dba-support.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dbgames.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dbgroupe.link", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ddog-gov.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dealzme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "delikpos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dentalaragonesa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "derailer.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dereklandis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "desmart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dfwrvroofmasters.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diadoc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "didntdoitbailbonds.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digi-trax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digib.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dimspith.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "disavowfile.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "distract09.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dkos2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dkos3.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dkos4.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dkos5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dkos6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dkos7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dmccommerceconsultants.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dns.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doble.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dolbyatmosmusiclist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "donselaarbouw.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dorianssecrets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dosimapress.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "down.pm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dr-aldebert-orthopaedie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dr-feldman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dramacooltv.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drchowchow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drivehub.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drogaleste.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drthiagorighetto.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dsgvo-fit.co.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dveretti.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dwgfree.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easyescortwebsites.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edinburghopenworkshop.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "egliseclichy92.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ejkitservices.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ejkweb.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elfix.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elki-musik.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elok.eu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elyum.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emilypennock.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "encuestaspagadas.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "encuestaspagadas.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "entomologia.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "entranz.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "entrpnr-connect.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eoitek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epicerie-raccourci.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epubmarkets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "equinesalacia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erkonut.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erste.guru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "etopia.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "event1teamstore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evervitjuice.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exam4.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "excellcleaners.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exeest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "f6s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "farmaciasantabrigida.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fastburg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fehrm.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "felin.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fenris.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fickfreundinnen.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "figuro.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finflee.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finhealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fitnessboard.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flamingoresidency.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flawed.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flipping.land", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flormidabel.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flowio.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foggi.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fordpartsgiant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forlook.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "formup.com.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foxeworks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fpt.icu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fptbb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freecoursepage.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freitasm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "froh-s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fundacaoeveris.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fwup.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "galerie-marguerite.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gambinotrasporti.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamedealsnow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "garagewisdom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gardinia.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gassycat.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gastouderbureausnoesje.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gayreppc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gdufe.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getestudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghereben.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "giovannicellini.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gipernn.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glassrepairsperth.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glenatlasmd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gnr-21.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goddessacumen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gongik.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gonorthwest.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gotwo.icu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gps4net.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gps4net.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "graphicnab.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greenandgolden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greenclouddefense.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greenleafkratom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "groendakmaker.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "group-project.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "groupe-immo9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "groupsh.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grtc.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grupoeurodesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guikemarijwielhandel.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gulfadvocates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gwtg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hapvider.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healthactive.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hearingthecall.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heartfolder.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hechno.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heidarilawgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heilstein.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "helastel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "helpatmyhome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hereits.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heycrab.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hive.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hjorslev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hodi.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hoffmanns-ballonshop.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hollandersleepdecor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homegardengift.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homesport.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hoody.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "houghtonhouse.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "howdo.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hunhun.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iboe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ict-oldehove.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ieji.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iframefinancement.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ikhwanfillah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imakin.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infgc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "innerlifeskills.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ins-jpn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insecret.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insinex.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intrdate.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inwao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipdfreedom.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "isaaya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iso.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itbusiness.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itebgarcia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iteks.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itsmyedu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jacquelinebellefontaine.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jedayoshi.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jem.style", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jimmykey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jnovonj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "joesniderman.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jonaschorum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "joncellini.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jot.works", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jotoho.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jpg.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jsx.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "juicyforum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "justsem.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jvmlending.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k2velosi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaerntenjobs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaffeluckan.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kamilporembinski.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karet-stroy24.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kastmedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "keep.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "keithrainz.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "keiyuki.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kenguru.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kfgsa.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kiefner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kiefnersoftware.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kovacia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kozgi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kraksky.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ksm-soccer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kunnen.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kylelovell.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kyncostyle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ladderfinance.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lamparassevilla.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lancerm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lata.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "latestonmarketing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lauracookeconsulting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leeapk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lefevre-ec.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lhffinanceira.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "libertefinanciere.africa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "libranet.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "librerecipes.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lightquantum.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lindamadu.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lindanblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ling2030.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linkagencia.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linuxhostingdelhi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linuxhostingindia.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "liquid.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "liveatliveoakapts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "livecricketscore.co.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "livrariaatlantico.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lixx.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "llantas.pe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localonesou.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lodongxu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loi-pinel-bordeaux.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "louisianahiker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ls-market.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lumineled.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "madboyz.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maedacolo.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mail.td", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "makertown.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "malaysurveys.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mamilitante.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mamont.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mandala-porn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mangadex.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mangeeaudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manpro.systems", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manypets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maraboutserieuxhonnete.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marcossamerson.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "margeriam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marytetzstore.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masantefinanciere.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mashcl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masrud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "matapacoin.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "matescort.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mauicharm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maximillianoertel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maxs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medipost.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mefinanceira.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meineweidegans.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "melissacellini.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "merchentpro.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "merck.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metebalci.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metrobus.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mgr-dev.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michel.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "midpss.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "millionseha.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mimidots.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minacellini.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minasan.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minkatilmancoaching.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mmmm.mn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobileit.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mod.gov.mk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "modelist.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moeto-zdrave.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mogujr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "molokaibreeze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monde-ampoule.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moodle.servebbs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "morten-harket.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "movemais.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mp.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrbusinessbrain.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrgusercontent.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mtap.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muac-innolab.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multispaninc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mummatters.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musikwerk-stuttgart.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musition.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mysmmstore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mysmmstore.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "najdidelo.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "najdisa.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nanameue.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nandedam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "negocieipanema.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nekomimix.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netpraetor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newasianbistro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nightlife.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nilsvital.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nim.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nimes-gard.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nitoville.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "notryden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "noy.asia", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nsb.lk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ntscalibracao.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "o7.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "objectcache.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "odbierzspozywke.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ohanacannabis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oleksandr-petrusenko.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oliverniebuhr.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olivetchurch.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "omersalaj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "omgqueensland.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "one-dot.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onsweb.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onvi.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oo.ps", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "optimumcircle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oracle-support.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orunodoy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oxfordenglish.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oyantec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p.sb", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pacenterforhearingandbalance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "panthertee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paslc.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "patrickod.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paysoft.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pc94666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pedro-fonseca.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pelagicus.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "penpalezine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peoplenotpoliticians.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "permanencesecretariat.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pesquisasremuneradas.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peterseninc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petersweb.me.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phoenixconnection.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phxbailbonds.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pianoschmitz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pixelshealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pixelstrade.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "planeticke.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plaul.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "play3niu11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "play3niu33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "play3niu55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plymouthbus.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "png.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "podeacontecer.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poseidonwaterproofing.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poseidonwaterproofing.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poseidonwaterproofing.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "potteranderson.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "powch-dev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "powch-dev2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prcsurvey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "precisioncourt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "primetimepokerparties.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "productsonsale.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "programme-neuf-toulouse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "przemyslprzyszlosci.gov.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "q3cdn.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qdm.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qonnected.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quakeroaksfarm.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qualifio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quelchemin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quickway.cn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quin.md", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quinpro.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quintonic.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quorrax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "r.sb", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "racknride.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rana.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "re.fyi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realacademy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realespanamiami.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realestateagent-directory.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realmoney.games", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recreatehomesolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "regalleadership.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remotewx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "republikapost.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reservabiosferavalledelcabriel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "responsible-disclosure.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "retrohaven.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rgc.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rhwebdesigns.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rigidlandscapes.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "risingsoftware.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ritepriceroofing.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rmfscrubs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roams.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robinzone.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rodrigoamozu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rodriguezsanchezabogados.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "romeroeletro.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rootly.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rootlyhq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "routeur4g.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "royaltyk9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "royvansichem.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rpguilds.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubberchicken.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rudianto.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "safebus.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "safesigner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "safetrax.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanbs.org.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanitation-planning-tool.herokuapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sansairyu-kuyoukai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saskialund.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saya.gg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sber-solutions.kz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sbpk.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scapin.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "schiessl.guru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "schwimmschulen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sdphoto.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secwatch.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seg27.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "selectedbym.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "semtelco.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seoapi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seosergio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "serenityeditor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sethforprivacy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sexxyangie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sexy-mom.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sexyjanahot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sexyrachel846.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sh1mar.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shedrickflowers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shigu.fyi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shih.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shrug.fyi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sidlicenceapp.herokuapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigb.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "siliton.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "silkky.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sip.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sleetandsole.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sleetandsole.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartclothing.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smithandnephewpensions.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smnz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smpred.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sneakkerworld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "snh.nrw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solutek.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sorteiosdotom.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soso.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sotonlgbt.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sourcesdegarrigue.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spammable.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanstindrundt.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spazioasperger.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "speedhost.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "speleo.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spindrel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "splinterface.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sporenvanslavernijutrecht.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spparkly.agency", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spparkly.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spparkly.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spparkly.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "squirtqueen.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "srebro.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ssf.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "starfieldguide.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "starlitestation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stauffer-media.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "steiermarkjobs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stekelenburg.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stevendearstyne.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "storyliebe.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studio-np.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studio-vertcitron.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studiosgaravato.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subilarch.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suchhunde.wien", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "summitescorts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunbike-driver.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supedium.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "surveyberbayar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "surveyviet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "survicate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "synology-distribution.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "systematik.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "szetoesq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taat.edu.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "talshine.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tarrantandharman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teablr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tecnologiahdv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teddit.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teesonic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "terapeuticaenalza.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "terra.bio", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "terranimo.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testable.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tf2pickup.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thaisurveys.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thecache.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thefatlosspuzzle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thehempcretecompany.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thekitchenprofessor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theroams.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thevacuumpouch.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thewindowcleaningexpert.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thichson.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "think-ai.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tholab.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thotcomputed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "threatint.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timecamp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timecamp.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinyhouse-bimify.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tipsforgamers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tnt2k.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tokidoki.team", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tokocuan.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toolsofcomputing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top-melody.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top-model.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top-shashlik.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toyouiv.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tradebot.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tranhlavender.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trastornoevitacion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trastornolimite.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "triggertraders.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "triperapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "triskelion.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trom.tf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tropicalf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "truyenmoi.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tutocursos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ulax.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unibet.ltd", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unit-soft.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unitedea-ph.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unlimiteddata.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unsharpen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uomo.com.ar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upupor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urlcitr.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "usintimate.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uxlab-agency.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vacunas.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valeryvenom.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vanitybiss.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vanral.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vanylou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vault182.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vegalanguageacademy.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vetlab.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "victoriavalente.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vilavilma.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "viliv.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vivace.parts", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vkstaticcontent.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vkusercontent.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vmotosoco.lv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voneus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vsure.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vyomoverseas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "w66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "warfighters.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "warringtonsownbuses.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wayscript.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wayscript.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weasyl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webhostingahmedabad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webhostingdelhi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weplay.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "westpennwire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wevah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whistleblower.report", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wholesalecabinets.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wholesomebuyers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wildvicky.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "williamlong.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winchuan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wogame.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wowpilates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wrozbyzkartklasycznych.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xavierxu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xiangshan.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xinyezx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--4gq45ay49m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--rs5a.xn--fiqs8s", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xp.ht", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yesleaks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yoim.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "youbil.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "youiv.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "youronly.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yoursfunny.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ytprivate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yuh.im", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yuh.li", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yuriland.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zajsoft.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zav-hub.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zebradom.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zedex.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zendrop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhaozhiru.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, // END OF 1-YEAR BULK HSTS ENTRIES // Only eTLD+1 domains can be submitted automatically to hstspreload.org,
diff --git a/remoting/host/basic_desktop_environment.cc b/remoting/host/basic_desktop_environment.cc index 2c93251..1aa185a2 100644 --- a/remoting/host/basic_desktop_environment.cc +++ b/remoting/host/basic_desktop_environment.cc
@@ -19,6 +19,7 @@ #include "remoting/host/keyboard_layout_monitor.h" #include "remoting/host/mouse_cursor_monitor_proxy.h" #include "remoting/host/screen_controls.h" +#include "remoting/host/url_forwarder_configurator.h" #include "remoting/protocol/capability_names.h" #include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h" #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h" @@ -118,6 +119,11 @@ return std::make_unique<LocalFileOperations>(ui_task_runner_); } +std::unique_ptr<UrlForwarderConfigurator> +BasicDesktopEnvironment::CreateUrlForwarderConfigurator() { + return UrlForwarderConfigurator::Create(); +} + std::string BasicDesktopEnvironment::GetCapabilities() const { return std::string(); }
diff --git a/remoting/host/basic_desktop_environment.h b/remoting/host/basic_desktop_environment.h index bb3c1ff..413aa63 100644 --- a/remoting/host/basic_desktop_environment.h +++ b/remoting/host/basic_desktop_environment.h
@@ -44,6 +44,8 @@ base::RepeatingCallback<void(const protocol::KeyboardLayout&)> callback) override; std::unique_ptr<FileOperations> CreateFileOperations() override; + std::unique_ptr<UrlForwarderConfigurator> CreateUrlForwarderConfigurator() + override; std::string GetCapabilities() const override; void SetCapabilities(const std::string& capabilities) override; uint32_t GetDesktopSessionId() const override;
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc index 25bf0bb2..1c896ed 100644 --- a/remoting/host/client_session.cc +++ b/remoting/host/client_session.cc
@@ -32,6 +32,7 @@ #include "remoting/host/remote_open_url_message_handler.h" #include "remoting/host/screen_controls.h" #include "remoting/host/screen_resolution.h" +#include "remoting/host/url_forwarder_configurator.h" #include "remoting/host/url_forwarder_control_message_handler.h" #include "remoting/proto/control.pb.h" #include "remoting/proto/event.pb.h" @@ -909,7 +910,9 @@ // UrlForwarderControlMessageHandler manages its own lifetime and is tied to // the lifetime of |pipe|. Once |pipe| is closed, this instance will be // cleaned up. - new UrlForwarderControlMessageHandler(channel_name, std::move(pipe)); + new UrlForwarderControlMessageHandler( + desktop_environment_->CreateUrlForwarderConfigurator(), channel_name, + std::move(pipe)); } } // namespace remoting
diff --git a/remoting/host/desktop_environment.h b/remoting/host/desktop_environment.h index 5f7dc3f..98b11e82 100644 --- a/remoting/host/desktop_environment.h +++ b/remoting/host/desktop_environment.h
@@ -29,6 +29,7 @@ class InputInjector; class KeyboardLayoutMonitor; class ScreenControls; +class UrlForwarderConfigurator; namespace protocol { class KeyboardLayout; @@ -53,6 +54,8 @@ base::RepeatingCallback<void(const protocol::KeyboardLayout&)> callback) = 0; virtual std::unique_ptr<FileOperations> CreateFileOperations() = 0; + virtual std::unique_ptr<UrlForwarderConfigurator> + CreateUrlForwarderConfigurator() = 0; // For platforms that require the mouse cursor to be composited into the video // stream when it is not rendered by the client, returns a composing capturer.
diff --git a/remoting/host/fake_desktop_environment.cc b/remoting/host/fake_desktop_environment.cc index ec17aad..e9c0df2 100644 --- a/remoting/host/fake_desktop_environment.cc +++ b/remoting/host/fake_desktop_environment.cc
@@ -12,6 +12,7 @@ #include "remoting/host/file_transfer/file_operations.h" #include "remoting/host/input_injector.h" #include "remoting/host/keyboard_layout_monitor.h" +#include "remoting/host/url_forwarder_configurator.h" #include "remoting/proto/event.pb.h" #include "remoting/protocol/fake_desktop_capturer.h" @@ -110,6 +111,11 @@ return nullptr; } +std::unique_ptr<UrlForwarderConfigurator> +FakeDesktopEnvironment::CreateUrlForwarderConfigurator() { + return nullptr; +} + std::string FakeDesktopEnvironment::GetCapabilities() const { return std::string(); }
diff --git a/remoting/host/fake_desktop_environment.h b/remoting/host/fake_desktop_environment.h index 1065c214..b9c9e1d 100644 --- a/remoting/host/fake_desktop_environment.h +++ b/remoting/host/fake_desktop_environment.h
@@ -103,6 +103,8 @@ base::RepeatingCallback<void(const protocol::KeyboardLayout&)> callback) override; std::unique_ptr<FileOperations> CreateFileOperations() override; + std::unique_ptr<UrlForwarderConfigurator> CreateUrlForwarderConfigurator() + override; std::string GetCapabilities() const override; void SetCapabilities(const std::string& capabilities) override; uint32_t GetDesktopSessionId() const override;
diff --git a/remoting/host/host_mock_objects.cc b/remoting/host/host_mock_objects.cc index 5a30e03..bacbad2 100644 --- a/remoting/host/host_mock_objects.cc +++ b/remoting/host/host_mock_objects.cc
@@ -62,6 +62,11 @@ return base::WrapUnique(CreateFileOperationsPtr()); } +std::unique_ptr<UrlForwarderConfigurator> +MockDesktopEnvironment::CreateUrlForwarderConfigurator() { + return base::WrapUnique(CreateUrlForwarderConfiguratorPtr()); +} + std::unique_ptr<DesktopAndCursorConditionalComposer> MockDesktopEnvironment::CreateComposingVideoCapturer() { return base::WrapUnique(CreateComposingVideoCapturerPtr());
diff --git a/remoting/host/host_mock_objects.h b/remoting/host/host_mock_objects.h index eecc9544..c8ded45 100644 --- a/remoting/host/host_mock_objects.h +++ b/remoting/host/host_mock_objects.h
@@ -22,6 +22,7 @@ #include "remoting/host/screen_controls.h" #include "remoting/host/screen_resolution.h" #include "remoting/host/security_key/security_key_auth_handler.h" +#include "remoting/host/url_forwarder_configurator.h" #include "remoting/proto/control.pb.h" #include "remoting/proto/event.pb.h" #include "testing/gmock/include/gmock/gmock.h" @@ -51,6 +52,7 @@ KeyboardLayoutMonitor*( base::RepeatingCallback<void(const protocol::KeyboardLayout&)>)); MOCK_METHOD0(CreateFileOperationsPtr, FileOperations*()); + MOCK_METHOD0(CreateUrlForwarderConfiguratorPtr, UrlForwarderConfigurator*()); MOCK_CONST_METHOD0(GetCapabilities, std::string()); MOCK_METHOD1(SetCapabilities, void(const std::string&)); MOCK_CONST_METHOD0(GetDesktopSessionId, uint32_t()); @@ -69,6 +71,8 @@ base::RepeatingCallback<void(const protocol::KeyboardLayout&)> callback) override; std::unique_ptr<FileOperations> CreateFileOperations() override; + std::unique_ptr<UrlForwarderConfigurator> CreateUrlForwarderConfigurator() + override; std::unique_ptr<DesktopAndCursorConditionalComposer> CreateComposingVideoCapturer() override; };
diff --git a/remoting/host/ipc_desktop_environment.cc b/remoting/host/ipc_desktop_environment.cc index 9352b2cc..3c9e974 100644 --- a/remoting/host/ipc_desktop_environment.cc +++ b/remoting/host/ipc_desktop_environment.cc
@@ -24,6 +24,7 @@ #include "remoting/host/input_injector.h" #include "remoting/host/keyboard_layout_monitor.h" #include "remoting/host/screen_controls.h" +#include "remoting/host/url_forwarder_configurator.h" #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h" #include "third_party/webrtc/modules/desktop_capture/mouse_cursor_monitor.h" @@ -85,6 +86,12 @@ return desktop_session_proxy_->CreateFileOperations(); } +std::unique_ptr<UrlForwarderConfigurator> +IpcDesktopEnvironment::CreateUrlForwarderConfigurator() { + // TODO(yuweih): Get it from |desktop_session_proxy_|. + return UrlForwarderConfigurator::Create(); +} + std::string IpcDesktopEnvironment::GetCapabilities() const { return desktop_session_proxy_->GetCapabilities(); }
diff --git a/remoting/host/ipc_desktop_environment.h b/remoting/host/ipc_desktop_environment.h index fa79351..fef092082 100644 --- a/remoting/host/ipc_desktop_environment.h +++ b/remoting/host/ipc_desktop_environment.h
@@ -61,6 +61,8 @@ base::RepeatingCallback<void(const protocol::KeyboardLayout&)> callback) override; std::unique_ptr<FileOperations> CreateFileOperations() override; + std::unique_ptr<UrlForwarderConfigurator> CreateUrlForwarderConfigurator() + override; std::string GetCapabilities() const override; void SetCapabilities(const std::string& capabilities) override; uint32_t GetDesktopSessionId() const override;
diff --git a/remoting/host/url_forwarder_configurator.cc b/remoting/host/url_forwarder_configurator.cc index 39518ffc..64b995e 100644 --- a/remoting/host/url_forwarder_configurator.cc +++ b/remoting/host/url_forwarder_configurator.cc
@@ -16,7 +16,7 @@ #if !defined(OS_LINUX) && !defined(OS_WIN) // static -UrlForwarderConfigurator* UrlForwarderConfigurator::GetInstance() { +std::unique_ptr<UrlForwarderConfigurator> UrlForwarderConfigurator::Create() { // Unsupported platforms. NOTREACHED(); return nullptr;
diff --git a/remoting/host/url_forwarder_configurator.h b/remoting/host/url_forwarder_configurator.h index 80b68fa7..e525715 100644 --- a/remoting/host/url_forwarder_configurator.h +++ b/remoting/host/url_forwarder_configurator.h
@@ -5,6 +5,8 @@ #ifndef REMOTING_HOST_URL_FORWARDER_CONFIGURATOR_H_ #define REMOTING_HOST_URL_FORWARDER_CONFIGURATOR_H_ +#include <memory> + #include "base/callback.h" #include "remoting/proto/url_forwarder_control.pb.h" @@ -14,24 +16,31 @@ // default browser of the OS). class UrlForwarderConfigurator { public: + using SetUpUrlForwarderResponse = + protocol::UrlForwarderControl::SetUpUrlForwarderResponse; using IsUrlForwarderSetUpCallback = base::OnceCallback<void(bool)>; - using SetUpUrlForwarderCallback = base::RepeatingCallback<void( - protocol::UrlForwarderControl::SetUpUrlForwarderResponse::State)>; + using SetUpUrlForwarderCallback = + base::RepeatingCallback<void(SetUpUrlForwarderResponse::State)>; - static UrlForwarderConfigurator* GetInstance(); + static std::unique_ptr<UrlForwarderConfigurator> Create(); + + virtual ~UrlForwarderConfigurator(); // Runs |callback| with a boolean indicating whether the URL forwarder has // been properly set up. + // NOTE: |callback| may be called after |this| is destroyed. Make sure your + // callback can handle it. virtual void IsUrlForwarderSetUp(IsUrlForwarderSetUpCallback callback) = 0; // Sets the URL forwarder as the default browser; calls |callback| with any // state changes during the setup process. |callback| may be called multiple // times until the final state (either COMPLETE or ERROR) is reached. + // NOTE: |callback| may be called after |this| is destroyed. Make sure your + // callback can handle it. virtual void SetUpUrlForwarder(const SetUpUrlForwarderCallback& callback) = 0; protected: UrlForwarderConfigurator(); - virtual ~UrlForwarderConfigurator(); }; } // namespace remoting
diff --git a/remoting/host/url_forwarder_configurator_linux.cc b/remoting/host/url_forwarder_configurator_linux.cc index 1bee73f..a05d4859 100644 --- a/remoting/host/url_forwarder_configurator_linux.cc +++ b/remoting/host/url_forwarder_configurator_linux.cc
@@ -4,11 +4,12 @@ #include "remoting/host/url_forwarder_configurator_linux.h" +#include <memory> + #include "base/base_paths.h" #include "base/bind.h" #include "base/command_line.h" #include "base/logging.h" -#include "base/no_destructor.h" #include "base/path_service.h" #include "base/process/launch.h" #include "base/task/thread_pool.h" @@ -42,7 +43,7 @@ return ExecuteConfigScriptWithSwitch("setup") ? protocol::UrlForwarderControl::SetUpUrlForwarderResponse:: COMPLETE - : protocol::UrlForwarderControl::SetUpUrlForwarderResponse::ERROR; + : protocol::UrlForwarderControl::SetUpUrlForwarderResponse::FAILED; } } // namespace @@ -68,9 +69,8 @@ } // static -UrlForwarderConfigurator* UrlForwarderConfigurator::GetInstance() { - static base::NoDestructor<UrlForwarderConfiguratorLinux> instance; - return instance.get(); +std::unique_ptr<UrlForwarderConfigurator> UrlForwarderConfigurator::Create() { + return std::make_unique<UrlForwarderConfiguratorLinux>(); } } // namespace remoting
diff --git a/remoting/host/url_forwarder_configurator_linux.h b/remoting/host/url_forwarder_configurator_linux.h index 06dde5c..98abe147 100644 --- a/remoting/host/url_forwarder_configurator_linux.h +++ b/remoting/host/url_forwarder_configurator_linux.h
@@ -15,6 +15,7 @@ class UrlForwarderConfiguratorLinux final : public UrlForwarderConfigurator { public: UrlForwarderConfiguratorLinux(); + ~UrlForwarderConfiguratorLinux() override; void IsUrlForwarderSetUp(IsUrlForwarderSetUpCallback callback) override; void SetUpUrlForwarder(const SetUpUrlForwarderCallback& callback) override; @@ -24,8 +25,6 @@ const UrlForwarderConfiguratorLinux&) = delete; private: - ~UrlForwarderConfiguratorLinux() override; - scoped_refptr<base::SequencedTaskRunner> io_task_runner_; };
diff --git a/remoting/host/url_forwarder_configurator_win.cc b/remoting/host/url_forwarder_configurator_win.cc index 94667b6..0ddb94d 100644 --- a/remoting/host/url_forwarder_configurator_win.cc +++ b/remoting/host/url_forwarder_configurator_win.cc
@@ -4,32 +4,138 @@ #include "remoting/host/url_forwarder_configurator_win.h" +#include <windows.h> +#include <wtsapi32.h> +#include <memory> +#include <string> + +#include "base/base_paths.h" +#include "base/bind.h" +#include "base/command_line.h" +#include "base/files/file_path.h" +#include "base/location.h" +#include "base/logging.h" #include "base/no_destructor.h" #include "base/notreached.h" +#include "base/path_service.h" +#include "base/process/launch.h" +#include "base/sequence_checker.h" +#include "base/task/task_traits.h" +#include "base/task/thread_pool.h" +#include "base/time/time.h" +#include "base/win/scoped_handle.h" +#include "remoting/host/switches.h" namespace remoting { -UrlForwarderConfiguratorWin::UrlForwarderConfiguratorWin() = default; +namespace { -UrlForwarderConfiguratorWin::~UrlForwarderConfiguratorWin() = default; +// If the user has already changed the default browser to the URL forwarder, +// then the setup process will finish immediately without showing any UI, so we +// delay reporting USER_INTERVENTION_REQUIRED so that the client doesn't pop up +// a toast when it's unnecessary. +constexpr base::TimeDelta kReportUserInterventionRequiredDelay = + base::TimeDelta::FromMilliseconds(500); + +base::win::ScopedHandle GetCurrentUserToken() { + HANDLE user_token = nullptr; + if (!WTSQueryUserToken(WTS_CURRENT_SESSION, &user_token)) { + PLOG(ERROR) << "Failed to get current user token"; + return base::win::ScopedHandle(); + } + return base::win::ScopedHandle(user_token); +} + +// If |switch_name| is empty, the process will be launched with no extra +// switches. +bool LaunchConfiguratorProcess(const std::string& switch_name = std::string()) { + base::LaunchOptions launch_options; + auto current_user = GetCurrentUserToken(); + if (!current_user.IsValid()) { + return false; + } + launch_options.as_user = current_user.Get(); + // The remoting_desktop.exe binary (where this code runs) has extra manifest + // flags (uiAccess and requireAdministrator) that are undesirable for the + // url_forwarder_configurator child process, so remoting_host.exe is used + // instead. + base::FilePath path; + if (!base::PathService::Get(base::DIR_EXE, &path)) { + LOG(ERROR) << "Failed to get executable path."; + return false; + } + path = path.AppendASCII("remoting_host.exe"); + base::CommandLine command(path); + command.AppendSwitchASCII(kProcessTypeSwitchName, + kProcessTypeUrlForwarderConfigurator); + if (!switch_name.empty()) { + command.AppendSwitch(switch_name); + } + int exit_code = -1; + base::LaunchProcess(command, launch_options).WaitForExit(&exit_code); + return exit_code == 0; +} + +} // namespace + +UrlForwarderConfiguratorWin::UrlForwarderConfiguratorWin() + : io_task_runner_(base::ThreadPool::CreateSequencedTaskRunner( + {base::MayBlock(), base::WithBaseSyncPrimitives()})) {} + +UrlForwarderConfiguratorWin::~UrlForwarderConfiguratorWin() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} void UrlForwarderConfiguratorWin::IsUrlForwarderSetUp( IsUrlForwarderSetUpCallback callback) { - NOTIMPLEMENTED(); - std::move(callback).Run(true); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + io_task_runner_->PostTaskAndReplyWithResult( + FROM_HERE, base::BindOnce(&LaunchConfiguratorProcess, std::string()), + std::move(callback)); } void UrlForwarderConfiguratorWin::SetUpUrlForwarder( const SetUpUrlForwarderCallback& callback) { - NOTIMPLEMENTED(); - callback.Run( - protocol::UrlForwarderControl::SetUpUrlForwarderResponse::COMPLETE); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + if (set_up_url_forwarder_callback_) { + LOG(ERROR) << "Setup is already in progress."; + callback.Run(SetUpUrlForwarderResponse::FAILED); + return; + } + + set_up_url_forwarder_callback_ = callback; + report_user_intervention_required_timer_.Start( + FROM_HERE, kReportUserInterventionRequiredDelay, this, + &UrlForwarderConfiguratorWin::OnReportUserInterventionRequired); + io_task_runner_->PostTaskAndReplyWithResult( + FROM_HERE, + base::BindOnce(&LaunchConfiguratorProcess, kSetUpUrlForwarderSwitchName), + base::BindOnce(&UrlForwarderConfiguratorWin::OnSetUpResponse, + weak_factory_.GetWeakPtr())); +} + +void UrlForwarderConfiguratorWin::OnSetUpResponse(bool success) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + report_user_intervention_required_timer_.AbandonAndStop(); + set_up_url_forwarder_callback_.Run(success + ? SetUpUrlForwarderResponse::COMPLETE + : SetUpUrlForwarderResponse::FAILED); + set_up_url_forwarder_callback_.Reset(); +} + +void UrlForwarderConfiguratorWin::OnReportUserInterventionRequired() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + set_up_url_forwarder_callback_.Run( + SetUpUrlForwarderResponse::USER_INTERVENTION_REQUIRED); } // static -UrlForwarderConfigurator* UrlForwarderConfigurator::GetInstance() { - static base::NoDestructor<UrlForwarderConfiguratorWin> instance; - return instance.get(); +std::unique_ptr<UrlForwarderConfigurator> UrlForwarderConfigurator::Create() { + return std::make_unique<UrlForwarderConfiguratorWin>(); } } // namespace remoting
diff --git a/remoting/host/url_forwarder_configurator_win.h b/remoting/host/url_forwarder_configurator_win.h index 6192b59..dce3dab5 100644 --- a/remoting/host/url_forwarder_configurator_win.h +++ b/remoting/host/url_forwarder_configurator_win.h
@@ -5,14 +5,22 @@ #ifndef REMOTING_HOST_URL_FORWARDER_CONFIGURATOR_WIN_H_ #define REMOTING_HOST_URL_FORWARDER_CONFIGURATOR_WIN_H_ +#include "base/memory/scoped_refptr.h" +#include "base/memory/weak_ptr.h" +#include "base/sequence_checker.h" +#include "base/sequenced_task_runner.h" +#include "base/thread_annotations.h" +#include "base/timer/timer.h" #include "remoting/host/url_forwarder_configurator.h" namespace remoting { // Windows implementation of UrlForwarderConfigurator. +// Note that this class requires elevated privileges. class UrlForwarderConfiguratorWin final : public UrlForwarderConfigurator { public: UrlForwarderConfiguratorWin(); + ~UrlForwarderConfiguratorWin() override; void IsUrlForwarderSetUp(IsUrlForwarderSetUpCallback callback) override; void SetUpUrlForwarder(const SetUpUrlForwarderCallback& callback) override; @@ -22,7 +30,18 @@ delete; private: - ~UrlForwarderConfiguratorWin() override; + void OnSetUpResponse(bool success); + void OnReportUserInterventionRequired(); + + SEQUENCE_CHECKER(sequence_checker_); + + scoped_refptr<base::SequencedTaskRunner> io_task_runner_; + SetUpUrlForwarderCallback set_up_url_forwarder_callback_ + GUARDED_BY_CONTEXT(sequence_checker_); + base::OneShotTimer report_user_intervention_required_timer_ + GUARDED_BY_CONTEXT(sequence_checker_); + + base::WeakPtrFactory<UrlForwarderConfiguratorWin> weak_factory_{this}; }; } // namespace remoting
diff --git a/remoting/host/url_forwarder_control_message_handler.cc b/remoting/host/url_forwarder_control_message_handler.cc index 0599c55..b806705 100644 --- a/remoting/host/url_forwarder_control_message_handler.cc +++ b/remoting/host/url_forwarder_control_message_handler.cc
@@ -17,9 +17,11 @@ constexpr char UrlForwarderControlMessageHandler::kDataChannelName[]; UrlForwarderControlMessageHandler::UrlForwarderControlMessageHandler( + std::unique_ptr<UrlForwarderConfigurator> url_forwarder_configurator, const std::string& name, std::unique_ptr<protocol::MessagePipe> pipe) - : protocol::NamedMessagePipeHandler(name, std::move(pipe)) { + : protocol::NamedMessagePipeHandler(name, std::move(pipe)), + url_forwarder_configurator_(std::move(url_forwarder_configurator)) { DCHECK_EQ(kDataChannelName, name); } @@ -35,14 +37,13 @@ auto url_forwarder_config = protocol::ParseMessage<protocol::UrlForwarderControl>(message.get()); if (url_forwarder_config->has_query_config_state_request()) { - UrlForwarderConfigurator::GetInstance()->IsUrlForwarderSetUp(base::BindOnce( + url_forwarder_configurator_->IsUrlForwarderSetUp(base::BindOnce( &UrlForwarderControlMessageHandler::OnIsUrlForwarderSetUpResult, weak_factory_.GetWeakPtr())); } else if (url_forwarder_config->has_set_up_url_forwarder_request()) { - UrlForwarderConfigurator::GetInstance()->SetUpUrlForwarder( - base::BindRepeating( - &UrlForwarderControlMessageHandler::OnSetUpUrlForwarderResult, - weak_factory_.GetWeakPtr())); + url_forwarder_configurator_->SetUpUrlForwarder(base::BindRepeating( + &UrlForwarderControlMessageHandler::OnSetUpUrlForwarderResult, + weak_factory_.GetWeakPtr())); } else { LOG(ERROR) << "Unrecognized UrlForwarderControl message."; }
diff --git a/remoting/host/url_forwarder_control_message_handler.h b/remoting/host/url_forwarder_control_message_handler.h index a92eaa2..250a8dd2 100644 --- a/remoting/host/url_forwarder_control_message_handler.h +++ b/remoting/host/url_forwarder_control_message_handler.h
@@ -7,11 +7,15 @@ #include "remoting/protocol/named_message_pipe_handler.h" +#include <memory> + #include "base/memory/weak_ptr.h" #include "remoting/proto/url_forwarder_control.pb.h" namespace remoting { +class UrlForwarderConfigurator; + // Message handler for the url-forwarder-control data channel. class UrlForwarderControlMessageHandler final : public protocol::NamedMessagePipeHandler { @@ -19,6 +23,7 @@ static constexpr char kDataChannelName[] = "url-forwarder-control"; UrlForwarderControlMessageHandler( + std::unique_ptr<UrlForwarderConfigurator> url_forwarder_configurator, const std::string& name, std::unique_ptr<protocol::MessagePipe> pipe); ~UrlForwarderControlMessageHandler() override; @@ -38,6 +43,8 @@ void OnSetUpUrlForwarderResult( protocol::UrlForwarderControl::SetUpUrlForwarderResponse::State state); + std::unique_ptr<UrlForwarderConfigurator> url_forwarder_configurator_; + base::WeakPtrFactory<UrlForwarderControlMessageHandler> weak_factory_{this}; };
diff --git a/remoting/proto/url_forwarder_control.proto b/remoting/proto/url_forwarder_control.proto index c066c6e..2284208cb 100644 --- a/remoting/proto/url_forwarder_control.proto +++ b/remoting/proto/url_forwarder_control.proto
@@ -41,7 +41,7 @@ COMPLETE = 1; // The setup process has failed. - ERROR = 2; + FAILED = 2; // The setup process requires user intervention. The host will send // another SetUpUrlForwarderResponse once the setup process becomes
diff --git a/services/device/BUILD.gn b/services/device/BUILD.gn index 3468be4..d1956023 100644 --- a/services/device/BUILD.gn +++ b/services/device/BUILD.gn
@@ -356,7 +356,8 @@ } # UsbContext is a libusb-specific object. - if (is_mac || is_win) { + # TODO(https://crbug.com/1096743) Remove these tests. + if (is_mac) { sources += [ "usb/usb_context_unittest.cc" ] deps += [ "//third_party/libusb" ] }
diff --git a/services/device/usb/BUILD.gn b/services/device/usb/BUILD.gn index 348e922..bb40dc9 100644 --- a/services/device/usb/BUILD.gn +++ b/services/device/usb/BUILD.gn
@@ -62,10 +62,14 @@ "usb_service_android.cc", "usb_service_android.h", ] + + deps += [ ":jni_headers" ] } if (is_win) { sources += [ + "scoped_winusb_handle.cc", + "scoped_winusb_handle.h", "usb_device_handle_win.cc", "usb_device_handle_win.h", "usb_device_win.cc", @@ -73,6 +77,13 @@ "usb_service_win.cc", "usb_service_win.h", ] + + libs = [ + "setupapi.lib", + "winusb.lib", + ] + + deps += [ "//third_party/re2" ] } if (is_mac) { @@ -84,30 +95,9 @@ "usb_service_mac.cc", "usb_service_mac.h", ] - } - if (is_linux || is_chromeos) { - sources += [ - "usb_device_linux.cc", - "usb_device_linux.h", - ] - } - - if (use_udev) { - if (is_linux || is_chromeos) { - sources += [ - "usb_service_linux.cc", - "usb_service_linux.h", - ] - } - deps += [ "//device/udev_linux" ] - } - - if (is_android) { - deps += [ ":jni_headers" ] - } - - if (is_win || is_mac) { + # These sources and deps are required for libusb. + # TODO(https://crbug.com/1096743) Remove these sources. sources += [ "scoped_libusb_device_handle.cc", "scoped_libusb_device_handle.h", @@ -128,18 +118,21 @@ deps += [ "//third_party/libusb" ] } - if (is_win) { + if (is_linux || is_chromeos) { sources += [ - "scoped_winusb_handle.cc", - "scoped_winusb_handle.h", + "usb_device_linux.cc", + "usb_device_linux.h", ] + } - libs = [ - "setupapi.lib", - "winusb.lib", - ] - - deps += [ "//third_party/re2" ] + if (use_udev) { + if (is_linux || is_chromeos) { + sources += [ + "usb_service_linux.cc", + "usb_service_linux.h", + ] + } + deps += [ "//device/udev_linux" ] } if (is_android || is_chromeos || is_linux) {
diff --git a/services/device/usb/usb_context_unittest.cc b/services/device/usb/usb_context_unittest.cc index 6f1faee..0148827e 100644 --- a/services/device/usb/usb_context_unittest.cc +++ b/services/device/usb/usb_context_unittest.cc
@@ -5,7 +5,6 @@ #include "services/device/usb/usb_context.h" #include "base/macros.h" #include "base/threading/platform_thread.h" -#include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/libusb/src/libusb/libusb.h" @@ -28,17 +27,7 @@ } // namespace -#if defined(OS_LINUX) || defined(OS_CHROMEOS) -// Linux trybot does not support usb. -#define MAYBE_GracefulShutdown DISABLED_GracefulShutdown -#elif defined(OS_ANDROID) -// Android build does not include usb support. -#define MAYBE_GracefulShutdown DISABLED_GracefulShutdown -#else -#define MAYBE_GracefulShutdown GracefulShutdown -#endif - -TEST_F(UsbContextTest, MAYBE_GracefulShutdown) { +TEST_F(UsbContextTest, GracefulShutdown) { base::TimeTicks start = base::TimeTicks::Now(); { PlatformUsbContext platform_context;
diff --git a/services/device/usb/usb_service.cc b/services/device/usb/usb_service.cc index f3a8da62..7c23cce 100644 --- a/services/device/usb/usb_service.cc +++ b/services/device/usb/usb_service.cc
@@ -23,14 +23,12 @@ #include "services/device/usb/usb_service_android.h" #elif defined(USE_UDEV) #include "services/device/usb/usb_service_linux.h" -#else -#if defined(OS_MAC) +#elif defined(OS_MAC) +#include "services/device/usb/usb_service_impl.h" #include "services/device/usb/usb_service_mac.h" #elif defined(OS_WIN) #include "services/device/usb/usb_service_win.h" #endif -#include "services/device/usb/usb_service_impl.h" -#endif namespace device { @@ -55,10 +53,7 @@ #elif defined(USE_UDEV) return base::WrapUnique(new UsbServiceLinux()); #elif defined(OS_WIN) - if (base::FeatureList::IsEnabled(kNewUsbBackend)) - return base::WrapUnique(new UsbServiceWin()); - else - return base::WrapUnique(new UsbServiceImpl()); + return base::WrapUnique(new UsbServiceWin()); #elif defined(OS_MAC) if (base::FeatureList::IsEnabled(kNewUsbBackend)) return base::WrapUnique(new UsbServiceMac());
diff --git a/services/device/usb/usb_service_impl.cc b/services/device/usb/usb_service_impl.cc index 0b38f32..74bfe41d 100644 --- a/services/device/usb/usb_service_impl.cc +++ b/services/device/usb/usb_service_impl.cc
@@ -31,16 +31,6 @@ #include "services/device/usb/webusb_descriptors.h" #include "third_party/libusb/src/libusb/libusb.h" -#if defined(OS_WIN) -#define INITGUID -#include <devpkey.h> -#include <setupapi.h> -#include <usbiodef.h> - -#include "base/strings/string_util.h" -#include "device/base/device_info_query_win.h" -#endif // OS_WIN - namespace device { namespace { @@ -48,42 +38,6 @@ // Standard USB requests and descriptor types: const uint16_t kUsbVersion2_1 = 0x0210; -#if defined(OS_WIN) - -bool IsWinUsbInterface(const std::wstring& device_path) { - DeviceInfoQueryWin device_info_query; - if (!device_info_query.device_info_list_valid()) { - USB_PLOG(ERROR) << "Failed to create a device information set"; - return false; - } - - // This will add the device so we can query driver info. - if (!device_info_query.AddDevice(device_path)) { - USB_PLOG(ERROR) << "Failed to get device interface data for " - << device_path; - return false; - } - - if (!device_info_query.GetDeviceInfo()) { - USB_PLOG(ERROR) << "Failed to get device info for " << device_path; - return false; - } - - std::string buffer; - if (!device_info_query.GetDeviceStringProperty(DEVPKEY_Device_Service, - &buffer)) { - USB_PLOG(ERROR) << "Failed to get device service property"; - return false; - } - - USB_LOG(DEBUG) << "Driver for " << device_path << " is " << buffer << "."; - if (base::StartsWith(buffer, "WinUSB", base::CompareCase::INSENSITIVE_ASCII)) - return true; - return false; -} - -#endif // OS_WIN - scoped_refptr<UsbContext> InitializeUsbContextBlocking() { PlatformUsbContext platform_context = nullptr; int rv = libusb_init(&platform_context); @@ -97,21 +51,10 @@ } absl::optional<std::vector<ScopedLibusbDeviceRef>> GetDeviceListBlocking( - const std::wstring& new_device_path, scoped_refptr<UsbContext> usb_context) { base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, base::BlockingType::MAY_BLOCK); -#if defined(OS_WIN) - if (!new_device_path.empty()) { - if (!IsWinUsbInterface(new_device_path)) { - // Wait to call libusb_get_device_list until libusb will be able to find - // a WinUSB interface for the device. - return absl::nullopt; - } - } -#endif // defined(OS_WIN) - libusb_device** platform_devices = NULL; const ssize_t device_count = libusb_get_device_list(usb_context->context(), &platform_devices); @@ -241,7 +184,7 @@ UsbServiceImpl::~UsbServiceImpl() { NotifyWillDestroyUsbService(); - if (hotplug_enabled_) + if (context_) libusb_hotplug_deregister_callback(context_->context(), hotplug_handle_); } @@ -255,40 +198,14 @@ return; } - if (hotplug_enabled_ && !enumeration_in_progress_) { - // The device list is updated live when hotplug events are supported. - UsbService::GetDevices(std::move(callback)); - } else { + if (enumeration_in_progress_) { pending_enumeration_callbacks_.push_back(std::move(callback)); - RefreshDevices(); + return; } + + UsbService::GetDevices(std::move(callback)); } -#if defined(OS_WIN) - -void UsbServiceImpl::OnDeviceAdded(const GUID& class_guid, - const std::wstring& device_path) { - // Only the root node of a composite USB device has the class GUID - // GUID_DEVINTERFACE_USB_DEVICE but we want to wait until WinUSB is loaded. - // This first pass filter will catch anything that's sitting on the USB bus - // (including devices on 3rd party USB controllers) to avoid the more - // expensive driver check that needs to be done on the FILE thread. - if (device_path.find(L"usb") != std::wstring::npos) { - pending_path_enumerations_.push(device_path); - RefreshDevices(); - } -} - -void UsbServiceImpl::OnDeviceRemoved(const GUID& class_guid, - const std::wstring& device_path) { - // The root USB device node is removed last. - if (class_guid == GUID_DEVINTERFACE_USB_DEVICE) { - RefreshDevices(); - } -} - -#endif // OS_WIN - void UsbServiceImpl::OnUsbContext(scoped_refptr<UsbContext> context) { if (!context) { usb_unavailable_ = true; @@ -304,37 +221,27 @@ static_cast<libusb_hotplug_flag>(0), LIBUSB_HOTPLUG_MATCH_ANY, LIBUSB_HOTPLUG_MATCH_ANY, LIBUSB_HOTPLUG_MATCH_ANY, &UsbServiceImpl::HotplugCallback, this, &hotplug_handle_); - if (rv == LIBUSB_SUCCESS) - hotplug_enabled_ = true; + if (rv != LIBUSB_SUCCESS) { + usb_unavailable_ = true; + context_.reset(); + return; + } // This will call any enumeration callbacks queued while initializing. RefreshDevices(); - -#if defined(OS_WIN) - DeviceMonitorWin* device_monitor = DeviceMonitorWin::GetForAllInterfaces(); - if (device_monitor) - device_observation_.Observe(device_monitor); -#endif // OS_WIN } void UsbServiceImpl::RefreshDevices() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - if (!context_ || enumeration_in_progress_) - return; + DCHECK(context_); + DCHECK(!enumeration_in_progress_); enumeration_in_progress_ = true; DCHECK(devices_being_enumerated_.empty()); - std::wstring device_path; - if (!pending_path_enumerations_.empty()) { - device_path = pending_path_enumerations_.front(); - pending_path_enumerations_.pop(); - } - base::ThreadPool::PostTaskAndReplyWithResult( FROM_HERE, kBlockingTaskTraits, - base::BindOnce(&GetDeviceListBlocking, device_path, context_), + base::BindOnce(&GetDeviceListBlocking, context_), base::BindOnce(&UsbServiceImpl::OnDeviceList, weak_factory_.GetWeakPtr())); } @@ -415,10 +322,6 @@ for (GetDevicesCallback& callback : callbacks) std::move(callback).Run(result); } - - if (!pending_path_enumerations_.empty()) { - RefreshDevices(); - } } void UsbServiceImpl::EnumerateDevice(ScopedLibusbDeviceRef platform_device,
diff --git a/services/device/usb/usb_service_impl.h b/services/device/usb/usb_service_impl.h index 21edd890..fcb24e4 100644 --- a/services/device/usb/usb_service_impl.h +++ b/services/device/usb/usb_service_impl.h
@@ -24,11 +24,6 @@ #include "third_party/abseil-cpp/absl/types/optional.h" #include "third_party/libusb/src/libusb/libusb.h" -#if defined(OS_WIN) -#include "base/scoped_observation.h" -#include "device/base/device_monitor_win.h" -#endif // OS_WIN - struct libusb_context; namespace device { @@ -37,11 +32,7 @@ class UsbDeviceImpl; -class UsbServiceImpl final : -#if defined(OS_WIN) - public DeviceMonitorWin::Observer, -#endif // OS_WIN - public UsbService { +class UsbServiceImpl final : public UsbService { public: UsbServiceImpl(); ~UsbServiceImpl() override; @@ -50,14 +41,6 @@ // device::UsbService implementation void GetDevices(GetDevicesCallback callback) override; -#if defined(OS_WIN) - // device::DeviceMonitorWin::Observer implementation - void OnDeviceAdded(const GUID& class_guid, - const std::wstring& device_path) override; - void OnDeviceRemoved(const GUID& class_guid, - const std::wstring& device_path) override; -#endif // OS_WIN - void OnUsbContext(scoped_refptr<UsbContext> context); // Enumerate USB devices from OS and update devices_ map. @@ -94,14 +77,11 @@ // When available the device list will be updated when new devices are // connected instead of only when a full enumeration is requested. - // TODO(reillyg): Support this on all platforms. crbug.com/411715 - bool hotplug_enabled_ = false; libusb_hotplug_callback_handle hotplug_handle_; // Enumeration callbacks are queued until an enumeration completes. bool enumeration_ready_ = false; bool enumeration_in_progress_ = false; - base::queue<std::wstring> pending_path_enumerations_; std::vector<GetDevicesCallback> pending_enumeration_callbacks_; // The map from libusb_device to UsbDeviceImpl. The key is a weak pointer to @@ -119,11 +99,6 @@ // UsbDeviceImpl. std::set<libusb_device*> devices_being_enumerated_; -#if defined(OS_WIN) - base::ScopedObservation<DeviceMonitorWin, DeviceMonitorWin::Observer> - device_observation_{this}; -#endif // OS_WIN - // This WeakPtr is used to safely post hotplug events back to the thread this // object lives on. base::WeakPtr<UsbServiceImpl> weak_self_;
diff --git a/services/device/usb/usb_service_unittest.cc b/services/device/usb/usb_service_unittest.cc index 971ec7d4..ada5b04 100644 --- a/services/device/usb/usb_service_unittest.cc +++ b/services/device/usb/usb_service_unittest.cc
@@ -54,7 +54,7 @@ } } -#if defined(OS_WIN) +#if defined(OS_MAC) TEST_F(UsbServiceTest, GetDevicesNewBackend) { base::test::ScopedFeatureList features; features.InitAndEnableFeature(device::kNewUsbBackend); @@ -66,7 +66,7 @@ loop.Run(); } } -#endif // defined(OS_WIN) +#endif // defined(OS_MAC) TEST_F(UsbServiceTest, ClaimGadget) { if (!UsbTestGadget::IsTestEnabled() || !usb_service_)
diff --git a/services/device/usb/usb_service_win.cc b/services/device/usb/usb_service_win.cc index 3b68c55..554c351 100644 --- a/services/device/usb/usb_service_win.cc +++ b/services/device/usb/usb_service_win.cc
@@ -4,14 +4,16 @@ #include "services/device/usb/usb_service_win.h" +// windows.h must be included first. +#include <windows.h> + +#define INITGUID + +#include <devpkey.h> #include <objbase.h> #include <setupapi.h> #include <stdint.h> #include <usbiodef.h> -#include "base/strings/string_piece_forward.h" - -#define INITGUID -#include <devpkey.h> #include "base/bind.h" #include "base/containers/contains.h" @@ -21,6 +23,7 @@ #include "base/scoped_generic.h" #include "base/single_thread_task_runner.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_piece_forward.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/sys_string_conversions.h"
diff --git a/services/network/public/cpp/cookie_manager_mojom_traits.cc b/services/network/public/cpp/cookie_manager_mojom_traits.cc index 75cba47f..a360c568 100644 --- a/services/network/public/cpp/cookie_manager_mojom_traits.cc +++ b/services/network/public/cpp/cookie_manager_mojom_traits.cc
@@ -463,6 +463,17 @@ return true; } +bool StructTraits<network::mojom::CookiePartitionKeyDataView, + net::CookiePartitionKey>:: + Read(network::mojom::CookiePartitionKeyDataView partition_key, + net::CookiePartitionKey* out) { + net::SchemefulSite site; + if (!partition_key.ReadSite(&site)) + return false; + *out = net::CookiePartitionKey(site); + return true; +} + bool StructTraits< network::mojom::CanonicalCookieDataView, net::CanonicalCookie>::Read(network::mojom::CanonicalCookieDataView cookie, @@ -503,7 +514,7 @@ if (!cookie.ReadPriority(&priority)) return false; - absl::optional<net::SchemefulSite> partition_key; + absl::optional<net::CookiePartitionKey> partition_key; if (!cookie.ReadPartitionKey(&partition_key)) return false;
diff --git a/services/network/public/cpp/cookie_manager_mojom_traits.h b/services/network/public/cpp/cookie_manager_mojom_traits.h index 1cffb4c..4b2914f 100644 --- a/services/network/public/cpp/cookie_manager_mojom_traits.h +++ b/services/network/public/cpp/cookie_manager_mojom_traits.h
@@ -12,6 +12,7 @@ #include "net/cookies/cookie_constants.h" #include "net/cookies/cookie_inclusion_status.h" #include "net/cookies/cookie_options.h" +#include "net/cookies/cookie_partition_key.h" #include "net/cookies/same_party_context.h" #include "services/network/public/mojom/cookie_manager.mojom.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -176,6 +177,16 @@ }; template <> +struct StructTraits<network::mojom::CookiePartitionKeyDataView, + net::CookiePartitionKey> { + static const net::SchemefulSite& site(const net::CookiePartitionKey& pk) { + return pk.site_; + } + static bool Read(network::mojom::CookiePartitionKeyDataView partition_key, + net::CookiePartitionKey* out); +}; + +template <> struct StructTraits<network::mojom::CanonicalCookieDataView, net::CanonicalCookie> { static const std::string& name(const net::CanonicalCookie& c) { @@ -213,7 +224,7 @@ static bool same_party(const net::CanonicalCookie& c) { return c.IsSameParty(); } - static absl::optional<net::SchemefulSite> partition_key( + static absl::optional<net::CookiePartitionKey> partition_key( const net::CanonicalCookie& c) { return c.PartitionKey(); }
diff --git a/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc b/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc index d07336b..1d90d68 100644 --- a/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc +++ b/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc
@@ -382,8 +382,8 @@ "__Host-A", "B", "x.y", "/", base::Time(), base::Time(), base::Time(), true, false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_LOW, false, - absl::make_optional( - net::SchemefulSite::Deserialize("https://toplevelsite.com")), + absl::make_optional(net::CookiePartitionKey::FromURLForTesting( + GURL("https://toplevelsite.com"))), net::CookieSourceScheme::kSecure, 8433); net::CanonicalCookie copied;
diff --git a/services/network/public/mojom/cookie_manager.mojom b/services/network/public/mojom/cookie_manager.mojom index bd68604..6c7a74b 100644 --- a/services/network/public/mojom/cookie_manager.mojom +++ b/services/network/public/mojom/cookie_manager.mojom
@@ -149,6 +149,10 @@ bool is_in_nontrivial_first_party_set = false; }; +struct CookiePartitionKey { + SchemefulSite site; +}; + // See net/cookies/canonical_cookie.{h,cc} for documentation. // Keep defaults here in sync with those files. struct CanonicalCookie { @@ -165,7 +169,7 @@ CookiePriority priority = MEDIUM; CookieSourceScheme source_scheme = kUnset; bool same_party = false; - SchemefulSite? partition_key; + CookiePartitionKey? partition_key; // -1 because of url::PORT_UNSPECIFIED // url/third_party/mozilla/url_parse.h int32 source_port = -1;
diff --git a/storage/browser/file_system/file_system_context.cc b/storage/browser/file_system/file_system_context.cc index 0ee2e624..c4f9208 100644 --- a/storage/browser/file_system/file_system_context.cc +++ b/storage/browser/file_system/file_system_context.cc
@@ -99,7 +99,6 @@ case kFileSystemTypeLocalForPlatformApp: case kFileSystemTypeLocal: - case kFileSystemTypeCloudDevice: case kFileSystemTypeProvided: case kFileSystemTypeDeviceMediaAsFileStorage: case kFileSystemTypeDriveFs:
diff --git a/storage/common/file_system/file_system_types.h b/storage/common/file_system/file_system_types.h index c171e0f..0677b34c 100644 --- a/storage/common/file_system/file_system_types.h +++ b/storage/common/file_system/file_system_types.h
@@ -103,9 +103,6 @@ // given identifier in each origin. kFileSystemTypePluginPrivate, - // A filesystem that is mounted via the Privet storage protocol. - kFileSystemTypeCloudDevice, - // A filesystem that is mounted via the FileSystemProvider API. kFileSystemTypeProvided,
diff --git a/storage/common/file_system/file_system_util.cc b/storage/common/file_system/file_system_util.cc index be9fcef..dfb3ca95 100644 --- a/storage/common/file_system/file_system_util.cc +++ b/storage/common/file_system/file_system_util.cc
@@ -284,8 +284,6 @@ return "TransientFile"; case kFileSystemTypePluginPrivate: return "PluginPrivate"; - case kFileSystemTypeCloudDevice: - return "CloudDevice"; case kFileSystemTypeProvided: return "Provided"; case kFileSystemTypeDeviceMediaAsFileStorage:
diff --git a/testing/android/native_test/java/AndroidManifest.xml.jinja2 b/testing/android/native_test/java/AndroidManifest.xml.jinja2 index 2ffecbb3..5cd0612 100644 --- a/testing/android/native_test/java/AndroidManifest.xml.jinja2 +++ b/testing/android/native_test/java/AndroidManifest.xml.jinja2
@@ -28,9 +28,16 @@ breaks test listing. See https://developer.android.com/training/data-storage#scoped-storage and https://developer.android.com/training/data-storage/compatibility. --> + {% if allow_cleartext_traffic == 'true' %} + <application android:label="NativeTests" + android:usesCleartextTraffic="true" + android:requestLegacyExternalStorage="true" + android:name="org.chromium.native_test.NativeTestApplication"> + {% else %} <application android:label="NativeTests" android:requestLegacyExternalStorage="true" android:name="org.chromium.native_test.NativeTestApplication"> + {% endif %} <uses-library android:name="android.test.runner"/> {% if use_native_activity == 'true' %} <activity android:name=".NativeUnitTestNativeActivity"
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json index abab8bc..20ceb09 100644 --- a/testing/buildbot/chrome.json +++ b/testing/buildbot/chrome.json
@@ -20,7 +20,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59,6 +60,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -103,6 +108,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -136,6 +145,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -173,6 +186,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -206,6 +223,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -240,7 +261,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -277,6 +299,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -312,6 +338,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -346,6 +376,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -379,6 +413,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -412,6 +450,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -445,6 +487,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -478,6 +524,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -511,6 +561,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -547,6 +601,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -580,6 +638,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -613,6 +675,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -649,6 +715,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -698,6 +768,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -734,6 +808,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -767,6 +845,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -800,6 +882,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -837,6 +923,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -870,6 +960,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -903,6 +997,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -936,6 +1034,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -985,6 +1087,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1030,7 +1136,8 @@ }, "name": "telemetry_perf_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1076,7 +1183,8 @@ }, "name": "telemetry_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1122,6 +1230,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1145,7 +1257,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1173,6 +1286,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1207,7 +1324,8 @@ }, "name": "telemetry_perf_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1240,7 +1358,8 @@ }, "name": "telemetry_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1275,6 +1394,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1298,7 +1421,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1326,6 +1450,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1360,7 +1488,8 @@ }, "name": "telemetry_perf_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1402,7 +1531,8 @@ }, "name": "lacros_all_tast_tests_eve", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1431,7 +1561,8 @@ }, "name": "chrome_sizes", "resultdb": { - "enable": false + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true,
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index e769bdc..63a5db9 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -31416,6 +31416,77 @@ "gtest_tests": [ { "args": [ + "--test-launcher-batch-limit=1", + "--gs-results-bucket=chromium-result-details", + "--recover-devices", + "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "android_sync_integration_tests" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "cpu": "x86-64", + "device_os": null, + "device_type": null, + "machine_type": "n1-standard-4|e2-standard-4", + "os": "Ubuntu-16.04|Ubuntu-18.04", + "pool": "chromium.tests.avd" + } + ], + "named_caches": [ + { + "name": "avd_generic_android23", + "path": ".android" + }, + { + "name": "system_images_android_23_google_apis_x86", + "path": ".emulator_sdk" + } + ], + "optional_dimensions": { + "60": [ + { + "caches": "avd_generic_android23" + } + ] + }, + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_sync_integration_tests", + "test_id_prefix": "ninja://chrome/test:android_sync_integration_tests/" + }, + { + "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" @@ -31491,6 +31562,77 @@ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", + "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.cc_unittests.filter" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "cc_unittests" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "cpu": "x86-64", + "device_os": null, + "device_type": null, + "machine_type": "n1-standard-4|e2-standard-4", + "os": "Ubuntu-16.04|Ubuntu-18.04", + "pool": "chromium.tests.avd" + } + ], + "named_caches": [ + { + "name": "avd_generic_android23", + "path": ".android" + }, + { + "name": "system_images_android_23_google_apis_x86", + "path": ".emulator_sdk" + } + ], + "optional_dimensions": { + "60": [ + { + "caches": "avd_generic_android23" + } + ] + }, + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "cc_unittests", + "test_id_prefix": "ninja://cc:cc_unittests/" + }, + { + "args": [ + "--gs-results-bucket=chromium-result-details", + "--recover-devices", + "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", "--git-revision=${got_revision}" ], "merge": { @@ -31862,6 +32004,287 @@ "--bucket", "chromium-result-details", "--test-name", + "device_unittests" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "cpu": "x86-64", + "device_os": null, + "device_type": null, + "machine_type": "n1-standard-4|e2-standard-4", + "os": "Ubuntu-16.04|Ubuntu-18.04", + "pool": "chromium.tests.avd" + } + ], + "named_caches": [ + { + "name": "avd_generic_android23", + "path": ".android" + }, + { + "name": "system_images_android_23_google_apis_x86", + "path": ".emulator_sdk" + } + ], + "optional_dimensions": { + "60": [ + { + "caches": "avd_generic_android23" + } + ] + }, + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "device_unittests", + "test_id_prefix": "ninja://device:device_unittests/" + }, + { + "args": [ + "--gs-results-bucket=chromium-result-details", + "--recover-devices", + "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "display_unittests" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "cpu": "x86-64", + "device_os": null, + "device_type": null, + "machine_type": "n1-standard-4|e2-standard-4", + "os": "Ubuntu-16.04|Ubuntu-18.04", + "pool": "chromium.tests.avd" + } + ], + "named_caches": [ + { + "name": "avd_generic_android23", + "path": ".android" + }, + { + "name": "system_images_android_23_google_apis_x86", + "path": ".emulator_sdk" + } + ], + "optional_dimensions": { + "60": [ + { + "caches": "avd_generic_android23" + } + ] + }, + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "display_unittests", + "test_id_prefix": "ninja://ui/display:display_unittests/" + }, + { + "args": [ + "--gs-results-bucket=chromium-result-details", + "--recover-devices", + "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "gfx_unittests" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "cpu": "x86-64", + "device_os": null, + "device_type": null, + "machine_type": "n1-standard-4|e2-standard-4", + "os": "Ubuntu-16.04|Ubuntu-18.04", + "pool": "chromium.tests.avd" + } + ], + "named_caches": [ + { + "name": "avd_generic_android23", + "path": ".android" + }, + { + "name": "system_images_android_23_google_apis_x86", + "path": ".emulator_sdk" + } + ], + "optional_dimensions": { + "60": [ + { + "caches": "avd_generic_android23" + } + ] + }, + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gfx_unittests", + "test_id_prefix": "ninja://ui/gfx:gfx_unittests/" + }, + { + "args": [ + "--gs-results-bucket=chromium-result-details", + "--recover-devices", + "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", + "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_linux_unittests.filter" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "sandbox_linux_unittests" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "cpu": "x86-64", + "device_os": null, + "device_type": null, + "machine_type": "n1-standard-4|e2-standard-4", + "os": "Ubuntu-16.04|Ubuntu-18.04", + "pool": "chromium.tests.avd" + } + ], + "named_caches": [ + { + "name": "avd_generic_android23", + "path": ".android" + }, + { + "name": "system_images_android_23_google_apis_x86", + "path": ".emulator_sdk" + } + ], + "optional_dimensions": { + "60": [ + { + "caches": "avd_generic_android23" + } + ] + }, + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" + }, + { + "args": [ + "--gs-results-bucket=chromium-result-details", + "--recover-devices", + "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", "unit_tests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" @@ -31921,6 +32344,77 @@ }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/" + }, + { + "args": [ + "--gs-results-bucket=chromium-result-details", + "--recover-devices", + "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", + "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.viz_unittests.filter" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "viz_unittests" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "cpu": "x86-64", + "device_os": null, + "device_type": null, + "machine_type": "n1-standard-4|e2-standard-4", + "os": "Ubuntu-16.04|Ubuntu-18.04", + "pool": "chromium.tests.avd" + } + ], + "named_caches": [ + { + "name": "avd_generic_android23", + "path": ".android" + }, + { + "name": "system_images_android_23_google_apis_x86", + "path": ".emulator_sdk" + } + ], + "optional_dimensions": { + "60": [ + { + "caches": "avd_generic_android23" + } + ] + }, + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "viz_unittests", + "test_id_prefix": "ninja://components/viz:viz_unittests/" } ], "isolated_scripts": [ @@ -32124,77 +32618,6 @@ }, { "args": [ - "--test-launcher-batch-limit=1", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "android_sync_integration_tests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "infra/tools/luci/logdog/butler/${platform}", - "location": "bin", - "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-16.04|Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "avd_generic_android23", - "path": ".android" - }, - { - "name": "system_images_android_23_google_apis_x86", - "path": ".emulator_sdk" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "avd_generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "android_sync_integration_tests", - "test_id_prefix": "ninja://chrome/test:android_sync_integration_tests/" - }, - { - "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" @@ -33024,77 +33447,6 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", - "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.cc_unittests.filter" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "cc_unittests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "infra/tools/luci/logdog/butler/${platform}", - "location": "bin", - "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-16.04|Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "avd_generic_android23", - "path": ".android" - }, - { - "name": "system_images_android_23_google_apis_x86", - "path": ".emulator_sdk" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "avd_generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "cc_unittests", - "test_id_prefix": "ninja://cc:cc_unittests/" - }, - { - "args": [ - "--gs-results-bucket=chromium-result-details", - "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" ], "merge": { @@ -33598,146 +33950,6 @@ "--bucket", "chromium-result-details", "--test-name", - "device_unittests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "infra/tools/luci/logdog/butler/${platform}", - "location": "bin", - "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-16.04|Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "avd_generic_android23", - "path": ".android" - }, - { - "name": "system_images_android_23_google_apis_x86", - "path": ".emulator_sdk" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "avd_generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "device_unittests", - "test_id_prefix": "ninja://device:device_unittests/" - }, - { - "args": [ - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "display_unittests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "infra/tools/luci/logdog/butler/${platform}", - "location": "bin", - "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-16.04|Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "avd_generic_android23", - "path": ".android" - }, - { - "name": "system_images_android_23_google_apis_x86", - "path": ".emulator_sdk" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "avd_generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "display_unittests", - "test_id_prefix": "ninja://ui/display:display_unittests/" - }, - { - "args": [ - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", "events_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" @@ -33878,76 +34090,6 @@ "--bucket", "chromium-result-details", "--test-name", - "gfx_unittests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "infra/tools/luci/logdog/butler/${platform}", - "location": "bin", - "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-16.04|Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "avd_generic_android23", - "path": ".android" - }, - { - "name": "system_images_android_23_google_apis_x86", - "path": ".emulator_sdk" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "avd_generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "gfx_unittests", - "test_id_prefix": "ninja://ui/gfx:gfx_unittests/" - }, - { - "args": [ - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", "gin_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" @@ -35067,77 +35209,6 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", - "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_linux_unittests.filter" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "sandbox_linux_unittests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "infra/tools/luci/logdog/butler/${platform}", - "location": "bin", - "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-16.04|Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "avd_generic_android23", - "path": ".android" - }, - { - "name": "system_images_android_23_google_apis_x86", - "path": ".emulator_sdk" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "avd_generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "sandbox_linux_unittests", - "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" - }, - { - "args": [ - "--gs-results-bucket=chromium-result-details", - "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" ], "merge": { @@ -35768,77 +35839,6 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", - "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.viz_unittests.filter" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "viz_unittests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "infra/tools/luci/logdog/butler/${platform}", - "location": "bin", - "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-16.04|Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "avd_generic_android23", - "path": ".android" - }, - { - "name": "system_images_android_23_google_apis_x86", - "path": ".emulator_sdk" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "avd_generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "viz_unittests", - "test_id_prefix": "ninja://components/viz:viz_unittests/" - }, - { - "args": [ - "--gs-results-bucket=chromium-result-details", - "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" ], "merge": {
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index f6ecf54..d2fd6e9 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -67,6 +67,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -100,6 +104,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -137,6 +145,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -170,6 +182,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -204,7 +220,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -241,6 +258,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -276,6 +297,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -310,6 +335,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -343,6 +372,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -376,6 +409,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -409,6 +446,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -442,6 +483,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -475,6 +520,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -511,6 +560,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -544,6 +597,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -577,6 +634,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -613,6 +674,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -662,6 +727,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -695,6 +764,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -728,6 +801,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -761,6 +838,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -798,6 +879,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -831,6 +916,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -864,6 +953,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -897,6 +990,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -946,6 +1043,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -991,7 +1092,8 @@ }, "name": "telemetry_perf_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1037,7 +1139,8 @@ }, "name": "telemetry_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1145,6 +1248,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1168,7 +1275,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1204,7 +1312,8 @@ }, "name": "telemetry_perf_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true,
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 90b8b169..3fb63ae952 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -18243,6 +18243,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18276,6 +18280,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18313,6 +18321,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18346,6 +18358,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18380,7 +18396,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18417,6 +18434,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18452,6 +18473,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18486,6 +18511,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18519,6 +18548,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18552,6 +18585,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18585,6 +18622,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18618,6 +18659,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18651,6 +18696,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18687,6 +18736,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18720,6 +18773,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18753,6 +18810,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18789,6 +18850,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18838,6 +18903,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18871,6 +18940,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18904,6 +18977,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18937,6 +19014,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18974,6 +19055,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19007,6 +19092,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19040,6 +19129,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19073,6 +19166,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19122,6 +19219,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19167,7 +19268,8 @@ }, "name": "telemetry_perf_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19213,7 +19315,8 @@ }, "name": "telemetry_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19316,6 +19419,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19349,6 +19456,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19386,6 +19497,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19419,6 +19534,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19453,7 +19572,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19490,6 +19610,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19525,6 +19649,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19559,6 +19687,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19592,6 +19724,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19625,6 +19761,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19658,6 +19798,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19691,6 +19835,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19724,6 +19872,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19760,6 +19912,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19793,6 +19949,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19826,6 +19986,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19862,6 +20026,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19911,6 +20079,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19944,6 +20116,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19977,6 +20153,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20010,6 +20190,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20047,6 +20231,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20080,6 +20268,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20113,6 +20305,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20146,6 +20342,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20195,6 +20395,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20240,7 +20444,8 @@ }, "name": "telemetry_perf_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20286,7 +20491,8 @@ }, "name": "telemetry_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20384,6 +20590,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20417,6 +20627,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20454,6 +20668,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20487,6 +20705,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20521,7 +20743,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20558,6 +20781,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20593,6 +20820,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20627,6 +20858,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20660,6 +20895,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20693,6 +20932,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20726,6 +20969,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20759,6 +21006,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20792,6 +21043,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20828,6 +21083,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20861,6 +21120,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20894,6 +21157,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20930,6 +21197,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20979,6 +21250,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21012,6 +21287,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21045,6 +21324,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21078,6 +21361,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21115,6 +21402,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21148,6 +21439,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21181,6 +21476,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21214,6 +21513,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21263,6 +21566,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21308,7 +21615,8 @@ }, "name": "telemetry_perf_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21354,7 +21662,8 @@ }, "name": "telemetry_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true,
diff --git a/testing/buildbot/internal.chromeos.fyi.json b/testing/buildbot/internal.chromeos.fyi.json index 06e0508..3b004b8 100644 --- a/testing/buildbot/internal.chromeos.fyi.json +++ b/testing/buildbot/internal.chromeos.fyi.json
@@ -12,7 +12,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37,6 +38,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -67,6 +72,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -100,6 +109,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -137,6 +150,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -170,6 +187,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -204,7 +225,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -241,6 +263,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -276,6 +302,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -310,6 +340,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -343,6 +377,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -376,6 +414,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -409,6 +451,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -442,6 +488,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -475,6 +525,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -511,6 +565,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -544,6 +602,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -577,6 +639,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -613,6 +679,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -662,6 +732,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -698,6 +772,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -731,6 +809,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -764,6 +846,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -801,6 +887,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -834,6 +924,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -867,6 +961,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -900,6 +998,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -949,6 +1051,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -994,7 +1100,8 @@ }, "name": "telemetry_perf_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1040,7 +1147,8 @@ }, "name": "telemetry_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1086,6 +1194,10 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1109,7 +1221,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1137,6 +1250,10 @@ "merge": { "script": "//tools/perf/process_perf_results.py" }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 16891b4..1ca1f86 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -61,9 +61,11 @@ }, 'android_sync_integration_tests': { 'remove_from': [ - # Remove from CQ bots due to capacity. - 'android-marshmallow-arm64-rel', - 'android-lollipop-arm-rel', + # Remove from CQ bots due to capacity. + 'android-marshmallow-arm64-rel', + 'android-lollipop-arm-rel', + + 'android-marshmallow-x86-rel-non-cq', # runs on MM-x86-rel already ], }, 'android_webview_unittests': { @@ -768,7 +770,7 @@ '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_11.cc_unittests.filter', ], }, - 'android-marshmallow-x86-rel-non-cq': { + 'android-marshmallow-x86-rel': { # https://crbug.com/1039860 'args': [ '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.cc_unittests.filter', @@ -2491,7 +2493,7 @@ '--shard-timeout=300', ], }, - 'android-marshmallow-x86-rel-non-cq': { + 'android-marshmallow-x86-rel': { 'args': [ '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_linux_unittests.filter', ] @@ -2977,7 +2979,7 @@ '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_11.viz_unittests.filter', ], }, - 'android-marshmallow-x86-rel-non-cq': { + 'android-marshmallow-x86-rel': { 'args': [ '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.viz_unittests.filter', ],
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 9e89c110..faefa7d 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -153,11 +153,11 @@ # MM emulator CQ builder currently has limited capacity so some composition # test suites cannot be fullly enabled at once. 'android_marshmallow_emulator_limited_capacity_gtests': { - # Tests from chromium_gtests_for_devices_with_graphical_output - 'unit_tests': { - 'android_swarming': { - 'shards': 2, - }, + # Tests from android_specific_chromium_gtests + 'android_sync_integration_tests': { + 'args': [ + '--test-launcher-batch-limit=1', + ], }, # Tests from chromium_gtests @@ -5723,7 +5723,7 @@ # List gtests that run on android-marshmallow-x86-rel builder. # Test suites will be gradually moved from - # android_marshmallow_wpr_gtests + # android_marshmallow_emulator_non_cq_gtests # to this one, when there are more GCE capacity. 'android_marshmallow_emulator_gtests': [ 'android_emulator_specific_chrome_public_tests', @@ -5736,8 +5736,8 @@ #'android_specific_chromium_gtests', # Already includes gl_gtests. 'android_wpr_record_replay_tests', #'chromium_gtests', - #'chromium_gtests_for_devices_with_graphical_output', - #'linux_flavor_specific_chromium_gtests', + 'chromium_gtests_for_devices_with_graphical_output', + 'linux_flavor_specific_chromium_gtests', #'weblayer_android_gtests', #'weblayer_gtests', ], @@ -5745,14 +5745,13 @@ # Note that tests here are gradually moved to # android_marshmallow_emulator_gtests (crbug.com/1127110) # - # The diff between android_lollipop_marshmallow_gtests and ( - # android_marshmallow_wpr_gtests + android_marshmallow_emulator_gtests) + # The diff between android_lollipop_marshmallow_gtests and + # (android_marshmallow_emulator_non_cq_gtests + + # android_marshmallow_emulator_gtests) # is android_wpr_record_replay_tests - 'android_marshmallow_wpr_gtests': [ + 'android_marshmallow_emulator_non_cq_gtests': [ 'android_specific_chromium_gtests', # Already includes gl_gtests. 'chromium_gtests', - 'chromium_gtests_for_devices_with_graphical_output', - 'linux_flavor_specific_chromium_gtests', 'weblayer_android_gtests', 'weblayer_gtests', ],
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index b3caf64..d2495c4 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -27,6 +27,7 @@ }, 'mixins': [ 'chromeos-betty', + 'has_native_resultdb_integration', ], }, 'chromeos-betty-pi-arc-chrome': { @@ -35,6 +36,7 @@ ], 'mixins': [ 'chromeos-betty', + 'has_native_resultdb_integration', ], 'test_suites': { 'gtest_tests': 'chromeos_vm_gtests', @@ -45,6 +47,9 @@ 'additional_compile_targets': [ 'chromiumos_preflight', ], + 'mixins': [ + 'has_native_resultdb_integration', + ], 'test_suites': { 'gtest_tests': 'chromeos_device_gtests', 'isolated_scripts': 'chromeos_remote_device_isolated_tests', @@ -64,6 +69,9 @@ 'additional_compile_targets': [ 'chromiumos_preflight', ], + 'mixins': [ + 'has_native_resultdb_integration', + ], 'test_suites': { 'gtest_tests': 'chromeos_device_gtests', 'isolated_scripts': 'chromeos_remote_device_isolated_tests', @@ -89,6 +97,7 @@ ], 'mixins': [ 'chrome-swarming-pool', + 'has_native_resultdb_integration', ], 'test_suites': { 'gtest_tests': 'lacros_all_tast_tests_eve', @@ -818,7 +827,7 @@ ], 'os_type': 'android', 'test_suites': { - 'gtest_tests': 'android_marshmallow_wpr_gtests', + 'gtest_tests': 'android_marshmallow_emulator_non_cq_gtests', 'isolated_scripts': 'marshmallow_nougat_pie_isolated_scripts_with_proguard', } }, @@ -1382,6 +1391,7 @@ 'browser_config': 'cros-chrome', 'mixins': [ 'chromeos-amd64-generic', + 'has_native_resultdb_integration', ], 'os_type': 'chromeos', 'test_suites': { @@ -1406,6 +1416,7 @@ ], 'mixins': [ 'chromeos-kevin', + 'has_native_resultdb_integration', ], 'test_suites': { 'gtest_tests': 'chromeos_device_gtests', @@ -1431,6 +1442,9 @@ 'additional_compile_targets': [ 'chrome', ], + 'mixins': [ + 'has_native_resultdb_integration', + ], 'os_type': 'chromeos' }, 'linux-ash-chromium-generator-rel': { @@ -2750,6 +2764,7 @@ 'browser_config': 'cros-chrome', 'mixins': [ 'chromeos-amd64-generic', + 'has_native_resultdb_integration', ], 'os_type': 'chromeos', 'test_suites': { @@ -2776,6 +2791,7 @@ 'browser_config': 'cros-chrome', 'mixins': [ 'chromeos-amd64-generic', + 'has_native_resultdb_integration', ], 'os_type': 'chromeos', 'test_suites': { @@ -2791,6 +2807,7 @@ 'browser_config': 'cros-chrome', 'mixins': [ 'chromeos-amd64-generic', + 'has_native_resultdb_integration', ], 'os_type': 'chromeos', 'test_suites': { @@ -6471,6 +6488,9 @@ 'additional_compile_targets': [ 'chromiumos_preflight', ], + 'mixins': [ + 'has_native_resultdb_integration', + ], 'test_suites': { 'gtest_tests': 'chromeos_browser_integration_tests', }, @@ -6502,6 +6522,7 @@ ], 'mixins': [ 'chromeos-betty', + 'has_native_resultdb_integration', ], 'test_suites': { 'gtest_tests': 'chromeos_vm_gtests', @@ -6512,6 +6533,9 @@ 'additional_compile_targets': [ 'chromiumos_preflight', ], + 'mixins': [ + 'has_native_resultdb_integration', + ], 'test_suites': { 'gtest_tests': 'chromeos_device_gtests', },
diff --git a/testing/test.gni b/testing/test.gni index 9e45c64..1bcfe83 100644 --- a/testing/test.gni +++ b/testing/test.gni
@@ -52,6 +52,8 @@ # is_xctest: (iOS, optional) whether to build the executable as XCTest. # Similar to the GN arg 'enable_run_ios_unittests_with_xctest' but # for build targets. +# allow_cleartext_traffic: (Android, optional) whether to allow cleartext +# network requests during the test. template("test") { # Ensures the rts file exists and if not, creates a dummy file if (use_rts) { @@ -68,6 +70,11 @@ assert(!defined(invoker.is_xctest) || !invoker.is_xctest, "is_xctest can be set only for iOS builds") } + if (!is_android) { + assert(!defined(invoker.allow_cleartext_traffic), + "allow_cleartext_traffic can be set only for Android tests") + } + if (is_android) { assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) @@ -168,6 +175,7 @@ _library_target = "${target_name}__library" _apk_target = "${target_name}__apk" _apk_specific_vars = [ + "allow_cleartext_traffic", "android_manifest", "android_manifest_dep", "android_manifest_template",
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom index 22e9591..4d73405 100644 --- a/third_party/blink/public/mojom/web_feature/web_feature.mojom +++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -2626,8 +2626,6 @@ kRubyTextWithNonDefaultTextAlign = 3313, kHTMLMetaElementReferrerPolicyOutsideHead = 3314, kHTMLMetaElementReferrerPolicyMultipleTokens = 3315, - kDynamicImportModuleScriptRelativeClassicSameOrigin = 3318, - kDynamicImportModuleScriptRelativeClassicCrossOrigin = 3319, kV8WasmBulkMemory = 3320, kV8WasmRefTypes = 3321, kV8WasmMultiValue = 3322,
diff --git a/third_party/blink/renderer/bindings/core/v8/module_record.cc b/third_party/blink/renderer/bindings/core/v8/module_record.cc index 30ed787..f776fc4 100644 --- a/third_party/blink/renderer/bindings/core/v8/module_record.cc +++ b/third_party/blink/renderer/bindings/core/v8/module_record.cc
@@ -76,8 +76,7 @@ if (!V8ScriptRunner::CompileModule( isolate, params, text_position, compile_options, no_cache_reason, - ReferrerScriptInfo(params.BaseURL(), options, - ReferrerScriptInfo::BaseUrlSource::kOther)) + ReferrerScriptInfo(params.BaseURL(), options)) .ToLocal(&module)) { DCHECK(try_catch.HasCaught()); exception_state.RethrowV8Exception(try_catch.Exception());
diff --git a/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc b/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc index 4a3b3807..0dce491 100644 --- a/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc +++ b/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc
@@ -18,7 +18,6 @@ kNonce, kParserState, kReferrerPolicy, - kBaseUrlSource, kLength }; @@ -67,14 +66,8 @@ referrer_policy_int32) .value_or(network::mojom::ReferrerPolicy::kDefault); - v8::Local<v8::Primitive> base_url_source_value = - host_defined_options->Get(isolate, kBaseUrlSource); - SECURITY_CHECK(base_url_source_value->IsUint32()); - BaseUrlSource base_url_source = static_cast<BaseUrlSource>( - base_url_source_value->IntegerValue(context).ToChecked()); - return ReferrerScriptInfo(base_url, credentials_mode, nonce, parser_state, - referrer_policy, base_url_source); + referrer_policy); } v8::Local<v8::PrimitiveArray> ReferrerScriptInfo::ToV8HostDefinedOptions( @@ -110,11 +103,6 @@ host_defined_options->Set(isolate, HostDefinedOptionsIndex::kReferrerPolicy, referrer_policy_value); - v8::Local<v8::Primitive> base_url_source_value = v8::Integer::NewFromUnsigned( - isolate, static_cast<uint32_t>(base_url_source_)); - host_defined_options->Set(isolate, HostDefinedOptionsIndex::kBaseUrlSource, - base_url_source_value); - return host_defined_options; }
diff --git a/third_party/blink/renderer/bindings/core/v8/referrer_script_info.h b/third_party/blink/renderer/bindings/core/v8/referrer_script_info.h index 279ac3a..84ed3667 100644 --- a/third_party/blink/renderer/bindings/core/v8/referrer_script_info.h +++ b/third_party/blink/renderer/bindings/core/v8/referrer_script_info.h
@@ -23,33 +23,23 @@ STACK_ALLOCATED(); public: - enum class BaseUrlSource { - kClassicScriptCORSSameOrigin, - kClassicScriptCORSCrossOrigin, - kOther - }; ReferrerScriptInfo() {} ReferrerScriptInfo(const KURL& base_url, network::mojom::CredentialsMode credentials_mode, const String& nonce, ParserDisposition parser_state, - network::mojom::ReferrerPolicy referrer_policy, - BaseUrlSource base_url_source) + network::mojom::ReferrerPolicy referrer_policy) : base_url_(base_url), credentials_mode_(credentials_mode), nonce_(nonce), parser_state_(parser_state), - referrer_policy_(referrer_policy), - base_url_source_(base_url_source) {} - ReferrerScriptInfo(const KURL& base_url, - const ScriptFetchOptions& options, - BaseUrlSource base_url_source) + referrer_policy_(referrer_policy) {} + ReferrerScriptInfo(const KURL& base_url, const ScriptFetchOptions& options) : ReferrerScriptInfo(base_url, options.CredentialsMode(), options.Nonce(), options.ParserState(), - options.GetReferrerPolicy(), - base_url_source) {} + options.GetReferrerPolicy()) {} static ReferrerScriptInfo FromV8HostDefinedOptions( v8::Local<v8::Context>, @@ -65,13 +55,11 @@ network::mojom::ReferrerPolicy GetReferrerPolicy() const { return referrer_policy_; } - BaseUrlSource GetBaseUrlSource() const { return base_url_source_; } bool IsDefaultValue() const { return base_url_.IsNull() && credentials_mode_ == network::mojom::CredentialsMode::kSameOrigin && - nonce_.IsEmpty() && parser_state_ == kNotParserInserted && - base_url_source_ == BaseUrlSource::kOther; + nonce_.IsEmpty() && parser_state_ == kNotParserInserted; } private: @@ -102,9 +90,6 @@ // https://html.spec.whatwg.org/C/#default-classic-script-fetch-options const network::mojom::ReferrerPolicy referrer_policy_ = network::mojom::ReferrerPolicy::kDefault; - - // Temporary flag to collect UMA for crbug.com/1082086. - const BaseUrlSource base_url_source_ = BaseUrlSource::kOther; }; } // namespace blink
diff --git a/third_party/blink/renderer/bindings/core/v8/referrer_script_info_test.cc b/third_party/blink/renderer/bindings/core/v8/referrer_script_info_test.cc index bf4c59b..3387eb1 100644 --- a/third_party/blink/renderer/bindings/core/v8/referrer_script_info_test.cc +++ b/third_party/blink/renderer/bindings/core/v8/referrer_script_info_test.cc
@@ -15,8 +15,7 @@ EXPECT_FALSE(ReferrerScriptInfo(KURL("http://example.com"), network::mojom::CredentialsMode::kInclude, "", kNotParserInserted, - network::mojom::ReferrerPolicy::kDefault, - ReferrerScriptInfo::BaseUrlSource::kOther) + network::mojom::ReferrerPolicy::kDefault) .IsDefaultValue()); } @@ -28,10 +27,9 @@ .ToV8HostDefinedOptions(scope.GetIsolate()) .IsEmpty()); - ReferrerScriptInfo info( - url, network::mojom::CredentialsMode::kInclude, "foobar", - kNotParserInserted, network::mojom::ReferrerPolicy::kOrigin, - ReferrerScriptInfo::BaseUrlSource::kClassicScriptCORSCrossOrigin); + ReferrerScriptInfo info(url, network::mojom::CredentialsMode::kInclude, + "foobar", kNotParserInserted, + network::mojom::ReferrerPolicy::kOrigin); v8::Local<v8::PrimitiveArray> v8_info = info.ToV8HostDefinedOptions(scope.GetIsolate()); @@ -44,8 +42,6 @@ EXPECT_EQ(kNotParserInserted, decoded.ParserState()); EXPECT_EQ(network::mojom::ReferrerPolicy::kOrigin, decoded.GetReferrerPolicy()); - EXPECT_EQ(ReferrerScriptInfo::BaseUrlSource::kClassicScriptCORSCrossOrigin, - decoded.GetBaseUrlSource()); } } // namespace blink
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc index e904f60..09987f7 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc
@@ -477,26 +477,8 @@ const KURL base_url = classic_script->BaseURL(); KURL stored_base_url = (base_url == source.Url()) ? KURL() : base_url; - // TODO(hiroshige): Remove this code and related use counters once the - // measurement is done. - ReferrerScriptInfo::BaseUrlSource base_url_source = - ReferrerScriptInfo::BaseUrlSource::kOther; - if (source.SourceLocationType() == - ScriptSourceLocationType::kExternalFile && - !base_url.IsNull()) { - switch (sanitize_script_errors) { - case SanitizeScriptErrors::kDoNotSanitize: - base_url_source = - ReferrerScriptInfo::BaseUrlSource::kClassicScriptCORSSameOrigin; - break; - case SanitizeScriptErrors::kSanitize: - base_url_source = - ReferrerScriptInfo::BaseUrlSource::kClassicScriptCORSCrossOrigin; - break; - } - } - const ReferrerScriptInfo referrer_info( - stored_base_url, classic_script->FetchOptions(), base_url_source); + const ReferrerScriptInfo referrer_info(stored_base_url, + classic_script->FetchOptions()); v8::Local<v8::Script> script;
diff --git a/third_party/blink/renderer/core/css/css_custom_font_data.h b/third_party/blink/renderer/core/css/css_custom_font_data.h index 697046e..37d259a 100644 --- a/third_party/blink/renderer/core/css/css_custom_font_data.h +++ b/third_party/blink/renderer/core/css/css_custom_font_data.h
@@ -56,6 +56,10 @@ bool IsLoadingFallback() const override { return true; } void ClearFontFaceSource() override { font_face_source_ = nullptr; } + bool IsPendingDataUrl() const override { + return font_face_source_ && font_face_source_->IsPendingDataUrl(); + } + private: CSSCustomFontData(CSSFontFaceSource* source, FallbackVisibility visibility) : font_face_source_(source),
diff --git a/third_party/blink/renderer/core/css/css_font_face_source.h b/third_party/blink/renderer/core/css/css_font_face_source.h index 5a0b18b9..083cc28e 100644 --- a/third_party/blink/renderer/core/css/css_font_face_source.h +++ b/third_party/blink/renderer/core/css/css_font_face_source.h
@@ -62,6 +62,8 @@ // Returns nullptr unless the source is a loaded RemoteFontFaceSource. virtual String GetURL() const { return g_null_atom; } + virtual bool IsPendingDataUrl() const { return false; } + // Returns nullptr unless the source is a loaded RemoteFontFaceSource. virtual const FontCustomPlatformData* GetCustomPlaftormData() const { return nullptr;
diff --git a/third_party/blink/renderer/core/css/remote_font_face_source.cc b/third_party/blink/renderer/core/css/remote_font_face_source.cc index c281d14..4fa77545 100644 --- a/third_party/blink/renderer/core/css/remote_font_face_source.cc +++ b/third_party/blink/renderer/core/css/remote_font_face_source.cc
@@ -423,6 +423,10 @@ MaySetDataSource(kFromNetwork); } +bool RemoteFontFaceSource::IsPendingDataUrl() const { + return GetResource() && GetResource()->Url().ProtocolIsData(); +} + void RemoteFontFaceSource::FontLoadHistograms::RecordFallbackTime() { if (blank_paint_time_.is_null() || blank_paint_time_recorded_) return;
diff --git a/third_party/blink/renderer/core/css/remote_font_face_source.h b/third_party/blink/renderer/core/css/remote_font_face_source.h index c672015..64ac297d 100644 --- a/third_party/blink/renderer/core/css/remote_font_face_source.h +++ b/third_party/blink/renderer/core/css/remote_font_face_source.h
@@ -34,6 +34,8 @@ String GetURL() const override { return url_; } + bool IsPendingDataUrl() const override; + const FontCustomPlatformData* GetCustomPlaftormData() const override { return custom_font_data_.get(); }
diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_party/blink/renderer/core/frame/reporting_context.cc index c27fcf95..bf39e84a 100644 --- a/third_party/blink/renderer/core/frame/reporting_context.cc +++ b/third_party/blink/renderer/core/frame/reporting_context.cc
@@ -155,7 +155,7 @@ if (!report_buffer_.Contains(report->type())) { report_buffer_.insert( report->type(), - MakeGarbageCollected<HeapListHashSet<Member<Report>>>()); + MakeGarbageCollected<HeapLinkedHashSet<Member<Report>>>()); } report_buffer_.find(report->type())->value->insert(report);
diff --git a/third_party/blink/renderer/core/frame/reporting_context.h b/third_party/blink/renderer/core/frame/reporting_context.h index 51bee8b..c2f7760 100644 --- a/third_party/blink/renderer/core/frame/reporting_context.h +++ b/third_party/blink/renderer/core/frame/reporting_context.h
@@ -61,8 +61,8 @@ // Send |report| via the Reporting API to |endpoint|. void SendToReportingAPI(Report* report, const String& endpoint) const; - HeapListHashSet<Member<blink::ReportingObserver>> observers_; - HeapHashMap<String, Member<HeapListHashSet<Member<Report>>>> report_buffer_; + HeapLinkedHashSet<Member<blink::ReportingObserver>> observers_; + HeapHashMap<String, Member<HeapLinkedHashSet<Member<Report>>>> report_buffer_; Member<ExecutionContext> execution_context_; // This is declared mutable so that the service endpoint can be cached by
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.cc index 07b10223..17a8ad3 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.cc
@@ -294,6 +294,14 @@ return false; } +bool NGFragmentItem::IsBlockInInline() const { + if (Type() != kBox) + return false; + if (const NGPhysicalBoxFragment* box = BoxFragment()) + return box->IsBlockInInline(); + return false; +} + bool NGFragmentItem::IsFloating() const { if (const NGPhysicalBoxFragment* box = BoxFragment()) return box->IsFloating();
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h index d93dd03..f0c12aa 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h
@@ -106,6 +106,7 @@ bool IsContainer() const { return Type() == kBox || Type() == kLine; } bool IsInlineBox() const; bool IsAtomicInline() const; + bool IsBlockInInline() const; bool IsFloating() const; bool IsEmptyLineBox() const; bool IsHiddenForPaint() const { return is_hidden_for_paint_; }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_absolute_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_absolute_utils.cc index ac778b2..db7a3e683 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_absolute_utils.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_absolute_utils.cc
@@ -531,6 +531,15 @@ min_max_length_sizes = ComputeMinMaxBlockSizes(space, style, border_padding); + // Manually resolve any intrinsic/content min/max block-sizes. + // TODO(crbug.com/1135207): |ComputeMinMaxBlockSizes()| should handle this. + if (style.LogicalMinHeight().IsContentOrIntrinsic()) + min_max_length_sizes.min_size = IntrinsicBlockSizeFunc(); + if (style.LogicalMaxHeight().IsContentOrIntrinsic()) + min_max_length_sizes.max_size = IntrinsicBlockSizeFunc(); + min_max_length_sizes.max_size = + std::max(min_max_length_sizes.max_size, min_max_length_sizes.min_size); + // Tables are never allowed to go below their "auto" block-size. if (is_table) min_max_length_sizes.Encompass(IntrinsicBlockSizeFunc());
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator.cc b/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator.cc index 0fe65bbe..226014e 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator.cc
@@ -128,24 +128,20 @@ alternate_overflow.UniteEvenIfEmpty(AdjustOverflowForScrollOrigin( converter.ToPhysical(block_end_padding_rect))); + if (normal_overflow == alternate_overflow) + return normal_overflow; + // We'd like everything to be |normal_overflow|, lets see what the impact // would be. if (node_.Style().OverflowInlineDirection() == EOverflow::kAuto || node_.Style().OverflowInlineDirection() == EOverflow::kScroll) { - if (alternate_overflow.size.width != normal_overflow.size.width) { - if (alternate_overflow.size.width != padding_rect_.size.width) { - UseCounter::Count( - node_.GetDocument(), - node_.IsFlexibleBox() - ? WebFeature::kNewLayoutOverflowDifferentAndAlreadyScrollsFlex - : WebFeature:: - kNewLayoutOverflowDifferentAndAlreadyScrollsBlock); - } else { - UseCounter::Count(node_.GetDocument(), - node_.IsFlexibleBox() - ? WebFeature::kNewLayoutOverflowDifferentFlex - : WebFeature::kNewLayoutOverflowDifferentBlock); - } + if (alternate_overflow.size.width != padding_rect_.size.width) { + UseCounter::Count( + node_.GetDocument(), + WebFeature::kNewLayoutOverflowDifferentAndAlreadyScrollsBlock); + } else { + UseCounter::Count(node_.GetDocument(), + WebFeature::kNewLayoutOverflowDifferentBlock); } }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator_test.cc b/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator_test.cc index ba03280..082a3405 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator_test.cc
@@ -9,22 +9,6 @@ class NGLayoutOverflowCalculatorTest : public RenderingTest {}; TEST_F(NGLayoutOverflowCalculatorTest, - DISABLED_NewLayoutOverflowDifferentAndAlreadyScrollsFlex) { - if (!RuntimeEnabledFeatures::LayoutNGEnabled()) - return; - SetBodyInnerHTML(R"HTML( - <!DOCTYPE html> - <div style="display: flex; width: 100px; height: 100px; padding: 10px; overflow: auto;"> - <div style="min-width: 120px; height: 10px;"></div> - </div> - )HTML"); - RunDocumentLifecycle(); - - EXPECT_TRUE(GetDocument().IsUseCounted( - WebFeature::kNewLayoutOverflowDifferentAndAlreadyScrollsFlex)); -} - -TEST_F(NGLayoutOverflowCalculatorTest, NewLayoutOverflowDifferentAndAlreadyScrollsBlock) { if (!RuntimeEnabledFeatures::LayoutNGEnabled()) return; @@ -40,22 +24,6 @@ WebFeature::kNewLayoutOverflowDifferentAndAlreadyScrollsBlock)); } -TEST_F(NGLayoutOverflowCalculatorTest, - DISABLED_NewLayoutOverflowDifferentFlex) { - if (!RuntimeEnabledFeatures::LayoutNGEnabled()) - return; - SetBodyInnerHTML(R"HTML( - <!DOCTYPE html> - <div style="display: flex; width: 100px; height: 100px; padding: 10px; overflow: auto;"> - <div style="min-width: 110px; height: 10px;"></div> - </div> - )HTML"); - RunDocumentLifecycle(); - - EXPECT_TRUE( - GetDocument().IsUseCounted(WebFeature::kNewLayoutOverflowDifferentFlex)); -} - TEST_F(NGLayoutOverflowCalculatorTest, NewLayoutOverflowDifferentBlock) { if (!RuntimeEnabledFeatures::LayoutNGEnabled()) return;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h index 851f3c40..f8ca812 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
@@ -18,6 +18,7 @@ #include "third_party/blink/renderer/core/layout/geometry/physical_rect.h" #include "third_party/blink/renderer/core/layout/geometry/physical_size.h" #include "third_party/blink/renderer/core/layout/layout_box.h" +#include "third_party/blink/renderer/core/layout/layout_inline.h" #include "third_party/blink/renderer/core/layout/ng/ng_break_token.h" #include "third_party/blink/renderer/core/layout/ng/ng_ink_overflow.h" #include "third_party/blink/renderer/core/layout/ng/ng_link.h" @@ -125,6 +126,10 @@ bool IsAtomicInline() const { return IsBox() && BoxType() == NGBoxType::kAtomicInline; } + bool IsBlockInInline() const { + return IsBox() && BoxType() == NGBoxType::kNormalBox && GetLayoutObject() && + IsA<LayoutInline>(GetLayoutObject()->Parent()); + } // True if this fragment is in-flow in an inline formatting context. bool IsInline() const { return IsInlineBox() || IsAtomicInline(); } bool IsFloating() const {
diff --git a/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.cc b/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.cc index 8e26abe7..f223b2e 100644 --- a/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.cc +++ b/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.cc
@@ -155,8 +155,9 @@ UpdateNGBlockLayout(); needs_update_bounding_box_ = true; + const bool bounds_changed = old_boundaries != ObjectBoundingBox(); // If our bounds changed, notify the parents. - if (UpdateTransformAfterLayout(old_boundaries != ObjectBoundingBox())) + if (UpdateTransformAfterLayout(bounds_changed) || bounds_changed) SetNeedsBoundariesUpdate(); }
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc index f70fa06..2e4a02b 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -1207,6 +1207,20 @@ paint_info.context.EndLayer(); } +void NGBoxFragmentPainter::PaintBoxDecorationBackgroundForBlockInInline( + NGInlineCursor* children, + const PaintInfo& paint_info, + const PhysicalOffset& paint_offset) { + for (; *children; children->MoveToNext()) { + const NGFragmentItem* item = children->Current().Item(); + if (item->Type() != NGFragmentItem::kBox) + continue; + const NGPhysicalBoxFragment* fragment = item->BoxFragment(); + if (fragment && fragment->IsBlockInInline()) + PaintBoxItem(*item, *fragment, *children, paint_info, paint_offset); + } +} + void NGBoxFragmentPainter::PaintColumnRules( const PaintInfo& paint_info, const PhysicalOffset& paint_offset) { @@ -1454,10 +1468,14 @@ paint_info.phase != PaintPhase::kTextClip && paint_info.phase != PaintPhase::kMask && paint_info.phase != PaintPhase::kDescendantOutlinesOnly && - paint_info.phase != PaintPhase::kOutline && + paint_info.phase != PaintPhase::kOutline) { + if (UNLIKELY(ShouldPaintDescendantBlockBackgrounds(paint_info.phase))) { // When block-in-inline, block backgrounds need to be painted. - !ShouldPaintDescendantBlockBackgrounds(paint_info.phase)) + PaintBoxDecorationBackgroundForBlockInInline(children, paint_info, + paint_offset); + } return; + } // The only way an inline could paint like this is if it has a layer. const auto* layout_object = box_fragment_.GetLayoutObject();
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h index 953857cf..fe8b4c1a 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h
@@ -116,6 +116,11 @@ const PhysicalRect& paint_rect, const DisplayItemClient&); + void PaintBoxDecorationBackgroundForBlockInInline( + NGInlineCursor* children, + const PaintInfo&, + const PhysicalOffset& paint_offset); + void PaintColumnRules(const PaintInfo&, const PhysicalOffset& paint_offset); void PaintInternal(const PaintInfo&);
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc index 4c57377..d21666d 100644 --- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc +++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
@@ -873,6 +873,16 @@ child->IsLayoutMultiColumnSpannerPlaceholder()); child->GetMutableForPainting().ClearPaintFlags(); } + + // If we missed any nested fixpos elements during fragment traversal, that + // means that their containing block lives outside the fragmentation context + // root. Walk these missed fixepos elements now. + if (!pending_fixedpos_missables_.IsEmpty()) { + for (const auto* fixedpos : pending_fixedpos_missables_) { + DCHECK(!walked_fixedpos_.Contains(fixedpos)); + Walk(*fixedpos, context, /* pre_paint_info */ nullptr); + } + } } void PrePaintTreeWalk::WalkLayoutObjectChildren( @@ -899,8 +909,11 @@ // If we're in the middle of walking a missed OOF, don't enter nested OOFs // (but miss those as well, and handle them via fragment traversal). - if (context.is_inside_orphaned_object && child->IsOutOfFlowPositioned()) + if (context.is_inside_orphaned_object && child->IsOutOfFlowPositioned()) { + if (child->IsFixedPositioned() && !walked_fixedpos_.Contains(child)) + pending_fixedpos_missables_.insert(child); continue; + } // Perform an NGPhysicalBoxFragment-accompanied walk of the child // LayoutObject tree. @@ -1000,9 +1013,7 @@ } if (!search_fragment) { // Only walk unfragmented legacy-contained OOFs once. - if (context.is_inside_orphaned_object || - (context.current_fragmentainer.fragment && - !context.current_fragmentainer.fragment->IsFirstForNode())) + if (!parent_fragment->IsFirstForNode()) continue; } } @@ -1149,8 +1160,13 @@ if (pre_paint_info) { physical_fragment = &pre_paint_info->box_fragment; if (physical_fragment && (physical_fragment->IsOutOfFlowPositioned() || - physical_fragment->IsFloating())) + physical_fragment->IsFloating())) { pending_missables_.erase(physical_fragment); + if (object.IsFixedPositioned()) { + pending_fixedpos_missables_.erase(&object); + walked_fixedpos_.insert(&object); + } + } is_inside_fragment_child = pre_paint_info->is_inside_fragment_child; }
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h index a311b0e4..7971ae5 100644 --- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h +++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h
@@ -227,6 +227,17 @@ // CollectMissableChildren() and WalkMissedChildren(). HashSet<const NGPhysicalFragment*> pending_missables_; + // List of fixedpos objects that may be missed during fragment traversal. This + // can happen if a fixedpos is nested in another OOF inside a multicol, and + // the OOF parent is a pending missable (see |pending_missables_|). If that + // fixedpos' containing block is located outside of the multicol, we can would + // miss it during normal fragment traversal. + HashSet<const LayoutObject*> pending_fixedpos_missables_; + + // List of fixedpos objects that have already been walked. This helps to avoid + // re-walking any fixedpos objects handled by |pending_fixedpos_missables_|. + HashSet<const LayoutObject*> walked_fixedpos_; + // TODO(https://crbug.com/841364): Remove is_wheel_event_regions_enabled // argument once kWheelEventRegions feature flag is removed. bool is_wheel_event_regions_enabled_ = false;
diff --git a/third_party/blink/renderer/core/script/dynamic_module_resolver.cc b/third_party/blink/renderer/core/script/dynamic_module_resolver.cc index 64b77ea..99e7ff54 100644 --- a/third_party/blink/renderer/core/script/dynamic_module_resolver.cc +++ b/third_party/blink/renderer/core/script/dynamic_module_resolver.cc
@@ -340,29 +340,6 @@ return; } - switch (referrer_info.GetBaseUrlSource()) { - case ReferrerScriptInfo::BaseUrlSource::kClassicScriptCORSSameOrigin: - if (!modulator_ - ->ResolveModuleSpecifier(module_request.specifier, BlankURL()) - .IsValid()) { - UseCounter::Count( - ExecutionContext::From(modulator_->GetScriptState()), - WebFeature::kDynamicImportModuleScriptRelativeClassicSameOrigin); - } - break; - case ReferrerScriptInfo::BaseUrlSource::kClassicScriptCORSCrossOrigin: - if (!modulator_ - ->ResolveModuleSpecifier(module_request.specifier, BlankURL()) - .IsValid()) { - UseCounter::Count( - ExecutionContext::From(modulator_->GetScriptState()), - WebFeature::kDynamicImportModuleScriptRelativeClassicCrossOrigin); - } - break; - case ReferrerScriptInfo::BaseUrlSource::kOther: - break; - } - // <spec step="4.4">Set fetch options to the descendant script fetch options // for referencing script's fetch options.</spec> //
diff --git a/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc b/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc index ffd4f6ca..e4f5de7 100644 --- a/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc +++ b/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc
@@ -481,8 +481,7 @@ Vector<ImportAssertion>()); resolver->ResolveDynamically( module_request, wrong_base_url, - ReferrerScriptInfo(correct_base_url, ScriptFetchOptions(), - ReferrerScriptInfo::BaseUrlSource::kOther), + ReferrerScriptInfo(correct_base_url, ScriptFetchOptions()), promise_resolver); v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate());
diff --git a/third_party/blink/renderer/modules/mediasource/media_source_registry_impl.cc b/third_party/blink/renderer/modules/mediasource/media_source_registry_impl.cc index 2003129..fb24adf 100644 --- a/third_party/blink/renderer/modules/mediasource/media_source_registry_impl.cc +++ b/third_party/blink/renderer/modules/mediasource/media_source_registry_impl.cc
@@ -86,7 +86,10 @@ DCHECK(IsMainThread()); DCHECK(!url.IsEmpty()); - return media_sources_.at(url); + auto iter = media_sources_.find(url); + if (iter == media_sources_.end()) + return nullptr; + return iter->value; } MediaSourceRegistryImpl::MediaSourceRegistryImpl() {
diff --git a/third_party/blink/renderer/platform/fonts/custom_font_data.h b/third_party/blink/renderer/platform/fonts/custom_font_data.h index cd2bc76..3e5fd45 100644 --- a/third_party/blink/renderer/platform/fonts/custom_font_data.h +++ b/third_party/blink/renderer/platform/fonts/custom_font_data.h
@@ -40,6 +40,7 @@ virtual bool IsLoadingFallback() const { return false; } virtual bool ShouldSkipDrawing() const { return false; } virtual void ClearFontFaceSource() {} + virtual bool IsPendingDataUrl() const { return false; } protected: CustomFontData() = default;
diff --git a/third_party/blink/renderer/platform/fonts/font_data_for_range_set.h b/third_party/blink/renderer/platform/fonts/font_data_for_range_set.h index bd576bc..3a861d8 100644 --- a/third_party/blink/renderer/platform/fonts/font_data_for_range_set.h +++ b/third_party/blink/renderer/platform/fonts/font_data_for_range_set.h
@@ -64,6 +64,10 @@ return font_data_ && font_data_->IsLoadingFallback(); } + bool IsPendingDataUrlCustomFont() const { + return font_data_ && font_data_->IsPendingDataUrlCustomFont(); + } + protected: scoped_refptr<SimpleFontData> font_data_; scoped_refptr<UnicodeRangeSet> range_set_;
diff --git a/third_party/blink/renderer/platform/fonts/font_fallback_iterator.cc b/third_party/blink/renderer/platform/fonts/font_fallback_iterator.cc index cd01d8e..470df1c 100644 --- a/third_party/blink/renderer/platform/fonts/font_fallback_iterator.cc +++ b/third_party/blink/renderer/platform/fonts/font_fallback_iterator.cc
@@ -40,7 +40,10 @@ // If it's a pending custom font, we need to make sure it can render any // new characters, otherwise we may trigger a redundant load. In other // cases (already loaded or not a custom font), we can use it right away. + // Loading data url fonts doesn't incur extra network cost, so we always + // load them. if (!segmented_face->IsPendingCustomFont() || + segmented_face->IsPendingDataUrlCustomFont() || !AlreadyLoadingRangeForHintChar(*it)) return true; }
diff --git a/third_party/blink/renderer/platform/fonts/simple_font_data.h b/third_party/blink/renderer/platform/fonts/simple_font_data.h index 99d373a8..dd10806 100644 --- a/third_party/blink/renderer/platform/fonts/simple_font_data.h +++ b/third_party/blink/renderer/platform/fonts/simple_font_data.h
@@ -143,6 +143,9 @@ bool IsLoadingFallback() const override { return custom_font_data_ ? custom_font_data_->IsLoadingFallback() : false; } + bool IsPendingDataUrlCustomFont() const { + return custom_font_data_ ? custom_font_data_->IsPendingDataUrl() : false; + } bool IsSegmented() const override; bool ShouldSkipDrawing() const override { return custom_font_data_ && custom_font_data_->ShouldSkipDrawing();
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index c305f1f..844a8d6 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -914,7 +914,7 @@ }, { name: "EncryptedMediaSessionClosedReason", - status: "test", + status: "experimental", }, { name: "EnterKeyHintAttribute",
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng index 24b4890c..0178274 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng +++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -206,6 +206,7 @@ crbug.com/591099 external/wpt/css/css-position/position-absolute-center-004.html [ Failure ] crbug.com/591099 external/wpt/css/css-position/position-absolute-crash-chrome-006.html [ Crash ] crbug.com/591099 external/wpt/css/css-position/position-absolute-dynamic-overflow-002.html [ Failure ] +crbug.com/591099 external/wpt/css/css-position/position-absolute-fit-content.html [ Failure ] crbug.com/591099 external/wpt/css/css-position/position-absolute-in-inline-003.html [ Failure ] crbug.com/591099 external/wpt/css/css-position/position-absolute-in-inline-004.html [ Failure ] crbug.com/591099 external/wpt/css/css-position/position-absolute-replaced-intrinsic-size.tentative.html [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 49f975d..ebf4b2f 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -3002,7 +3002,7 @@ crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-audio.https.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc/no-media-call.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-ondatachannel.html [ Timeout ] -# crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc/RTCRtpTransceiver.https.html [ Timeout ] +crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc/RTCRtpTransceiver.https.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCDataChannel-close.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc/RTCPeerConnection-perfect-negotiation.https.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc/RTCPeerConnection-iceConnectionState.https.html [ Timeout ] @@ -4125,8 +4125,6 @@ crbug.com/1179585 [ Mac ] virtual/layout_ng_svg_text/paint/invalidation/svg/repaint-non-scaling-stroke-text.html [ Failure ] crbug.com/1179585 [ Mac ] virtual/layout_ng_svg_text/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration.html [ Failure ] crbug.com/1179585 virtual/layout_ng_svg_text/paint/invalidation/svg/text-match-svg.html [ Failure ] -crbug.com/1179585 virtual/layout_ng_svg_text/paint/invalidation/svg/text-rescale.html [ Failure ] -crbug.com/1179585 virtual/layout_ng_svg_text/paint/invalidation/svg/text-viewbox-rescale.html [ Failure ] crbug.com/1179585 virtual/layout_ng_svg_text/paint/invalidation/svg/transform-text-element.html [ Failure Pass ] crbug.com/1179585 [ Mac ] virtual/layout_ng_svg_text/paint/invalidation/svg/tspan-dynamic-positioning.svg [ Failure ] crbug.com/1179585 [ Mac ] virtual/layout_ng_svg_text/paint/invalidation/svg/use-detach.svg [ Failure ] @@ -7241,9 +7239,6 @@ crbug.com/1234057 [ Mac ] external/wpt/css/css-paint-api/no-op-animation.https.html [ Failure Pass ] crbug.com/1234302 [ Mac ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/paint2d-image.https.html [ Failure Pass ] -# Temporary disabling to allow landing https://webrtc-review.googlesource.com/c/src/+/227120 -crbug.com/webrtc/12906 external/wpt/webrtc/RTCRtpTransceiver.https.html [ Failure Pass Timeout ] - # Sheriff 2021-07-29 crbug.com/626703 [ Mac ] external/wpt/webrtc/simulcast/setParameters-active.https.html [ Failure Pass ] crbug.com/626703 http/tests/security/cross-frame-access-put.html [ Failure Pass ] @@ -7253,7 +7248,10 @@ crbug.com/626703 virtual/threaded/external/wpt/animation-worklet/worklet-animation-with-non-ascii-name.https.html [ Failure Pass ] crbug.com/626703 virtual/oopr-canvas2d/fast/canvas/canvas-composite-canvas.html [ Failure Pass ] -# Sheriff 20121-07-30 +# Sheriff 2021-07-30 crbug.com/1234619 external/wpt/screen-capture/permissions-policy-audio+video.https.sub.html [ Failure ] crbug.com/1234619 external/wpt/screen-capture/permissions-policy-audio.https.sub.html [ Failure ] crbug.com/1234619 external/wpt/screen-capture/permissions-policy-video.https.sub.html [ Failure ] + +# Sheriff 2021-08-02 +crbug.com/1235685 [ Mac10.14 ] virtual/scroll-unification/plugins/focus-change-4-change-focus-and-blur.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/WebGPUExpectations b/third_party/blink/web_tests/WebGPUExpectations index 55e7c95..604dabe 100644 --- a/third_party/blink/web_tests/WebGPUExpectations +++ b/third_party/blink/web_tests/WebGPUExpectations
@@ -34,6 +34,12 @@ [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:web_platform,copyToTexture,canvas:copy_contents_from_gl_context_canvas:* [ Slow ] [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,rendering,draw:arguments:* [ Slow ] [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,render_pass,storeOp:render_pass_store_op,color_attachment_only:* [ Slow ] +# Intel only. Really slow and killed by the GPU watchdog? +crbug.com/dawn/1046 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";* [ Slow Crash ] +crbug.com/dawn/1046 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";* [ Slow Crash ] +crbug.com/dawn/1046 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";* [ Slow Crash ] +crbug.com/dawn/1046 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";* [ Slow Crash ] +crbug.com/dawn/1046 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";* [ Slow Crash ] ### ### Untriaged failures. Please prefer to triage thoroughly and file a bug! @@ -50,26 +56,6 @@ [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";format="r8unorm";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=1;nonPowerOfTwo=false;canaryOnCreation=false;* [ Failure ] [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";format="rg8unorm";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=1;nonPowerOfTwo=false;canaryOnCreation=false;* [ Failure ] -# Mac (Intel and AMD). Possibly nondeterministic. -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="r8snorm";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="rg8snorm";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="r32float";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="rg16float";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="rgba8snorm";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="rg11b10ufloat";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="rg32float";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="rgba16float";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="rgba32float";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="r8snorm";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rg8snorm";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="r32float";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rg16float";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rgba8snorm";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rg11b10ufloat";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rg32float";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rgba16float";* [ Failure ] -crbug.com/1161355 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rgba32float";* [ Failure ] - ### ### Untriaged timeouts ### @@ -110,6 +96,14 @@ crbug.com/dawn/1003 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rgb9e5ufloat";* [ Failure ] crbug.com/dawn/1003 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rgb9e5ufloat";* [ Failure ] +# Precision. Only on Mac Intel +crbug.com/dawn/1047 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="r8snorm";* [ Failure ] +crbug.com/dawn/1047 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="rg8snorm";* [ Failure ] +crbug.com/dawn/1047 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:format="rgba8snorm";* [ Failure ] +crbug.com/dawn/1047 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="r8snorm";* [ Failure ] +crbug.com/dawn/1047 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rg8snorm";* [ Failure ] +crbug.com/dawn/1047 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:format="rgba8snorm";* [ Failure ] + # Limits that should be updated. # maxStorageTexturePerShaderStage 8 -> 4 crbug.com/dawn/796 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,createBindGroupLayout:max_resources_per_stage,in_pipeline_layout:* [ Failure ] @@ -118,16 +112,6 @@ # maxInterStageShaderComponents 64 -> 60 (crbug.com/dawn/759 [ Linux ][ Failure ] on NVIDIA will be recovered after the tests are fixed) crbug.com/dawn/802 wpt_internal/webgpu/cts.html?q=webgpu:api,operation,rendering,draw:vertex_attributes,basic:* [ Skip ] -# Robust access tests cause a lot of failures in various systems. Revisit expectations after the tests are fixed. -crbug.com/dawn/1009 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:* [ Slow Failure ] -crbug.com/dawn/1009 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:* [ Slow Failure ] -crbug.com/dawn/1018 [ Mac ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:* [ Slow Failure Crash ] -crbug.com/dawn/1011 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=false;* [ Crash Failure ] -crbug.com/dawn/1011 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=true;* [ Crash Failure ] -crbug.com/dawn/1011 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=false;* [ Crash Failure ] -crbug.com/dawn/1011 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=true;* [ Crash Failure ] - - ### ### Test bugs (fixed upstream) ### @@ -147,8 +131,8 @@ crbug.com/1215024 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,createComputePipeline:enrty_point_name_must_match:stageEntryPoint="main%5Cu0000";* [ Failure ] crbug.com/1215024 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,createComputePipeline:enrty_point_name_must_match:stageEntryPoint="main%5Cu0000a";* [ Failure ] -# Fails newly added validation. -crbug.com/dawn/808 wpt_internal/webgpu/cts.html?q=webgpu:api,operation,vertex_state,index_format:* [ Failure ] +# Crash when creating the bindgroup. Most likely because we are using an invalid VkImageView +crbug.com/dawn/1043 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:api,validation,createBindGroup:texture,resource_state:* [ Crash Failure ] # Failures because 1d, stencil8 and depth16unorm aren't implemented. crbug.com/dawn/129 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,createBindGroup:texture_must_have_correct_dimension:viewDimension="1d";* [ Failure ] @@ -224,7 +208,10 @@ crbug.com/dawn/995 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,buffer,create:createBuffer_invalid_and_oom:* [ Failure ] # Validation of max dispatch size isn't implemented for dispatchIndirect -crbug.com/dawn/1006 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,encoding,cmds,compute_pass:dispatch_sizes:dispatchType="indirect";* [ Skip ] +crbug.com/dawn/1039 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,encoding,cmds,compute_pass:dispatch_sizes:dispatchType="indirect";* [ Skip ] + +# Validation for drawIndexedIndirect isn't implemented +crbug.com/dawn/809 wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;* [ Skip ] # Dawn validation requires that aspects of attachments is "all", which the tests don't do. # See also crbug.com/dawn/603 for missing resource state D3D12_RESOURCE_STATE_DEPTH_WRITE that happens on the same tests. @@ -234,9 +221,6 @@ crbug.com/dawn/812 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:subresources_and_binding_types_combination_for_aspect:format="depth24plus-stencil8";aspect1="depth-only";type1="render-target";* [ Failure ] crbug.com/dawn/812 wpt_internal/webgpu/cts.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:subresources_and_binding_types_combination_for_aspect:format="depth24plus-stencil8";aspect1="stencil-only";type1="render-target";* [ Failure ] -# Currently drawIndexedIndirect is disallowed due to missing of index buffer OOB validation. Skip the related tests. -crbug.com/dawn/809 wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;* [ Skip ] - ### ### Mac (Metal) specific ### @@ -290,6 +274,10 @@ # Crashes or fails with "Backing is being accessed by both GL and Vulkan" crbug.com/1234041 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:* [ Skip ] +# VVLs want fillBuffer to be a multiple of 4 +crbug.com/dawn/1011 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;* [ Skip ] +crbug.com/dawn/1011 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;* [ Skip ] + ### ### Windows (D3D12) specific ###
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/fallback-remote-to-data-url.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/fallback-remote-to-data-url.html new file mode 100644 index 0000000..2f63312 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/fallback-remote-to-data-url.html
@@ -0,0 +1,46 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test that font fallback from a pending web font to a data url works.</title> +<link rel=help href="https://drafts.csswg.org/css-fonts-4/#font-matching-algorithm"> +<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=897539"> +<link rel=author href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +// Ahem woff2 encoded as base64 +const src = "url(data:font/woff2;base64,d09GMgABAAAAAAaUAAsAAAAAMMAAAAZCAAEAQgAAAAAAAAAAAAAAAAAAAAAAAAAABmAAjHIREAq0ZJciATYCJAOHVAuDbAAEIAWMaAeEGBtRH6PAbk5OdLL/AvEQU7CfpOgyWiXGtGR2AZzAEBBkvKZsA8ABAAAAAAB2VxThhdLU16r9XGZBLIg+uAYXQbX2b8/s3ieyHCJhU0+GbZwij5oVOXYAbFESy2QNONfaM24ZumkLtuiI3/DN6ufH5TszT6HcVpeWuhTKgZ6BPzsA/N5pZr/wUvFPa1tYWOlXGxzL45XuLMuZkZJOyAJyCF5n9FBf1Mv1FsLQ4N7f3Uf1er8DEciZ9EXfACNfb6/fr9XTeEgimySdTm339nRnkXSmDXZ+eiQxaUTPhCba3COhlJN0FeuUSunEQMVfz6bPYtGsyvinqOvkGLJ8CBsCeTkNwIHBxnFHYoyQ6qBW1d3gzAQ2wCW2Jw2gBws/siy0baIseC8AOdmDiaBGwgLCNfNV6pYswAxakMtxOQTR6doOhHSsg17Z5kS/8UXV6dNvwCCGDBsxasy4CTyBSCJTqDQ6g8lic7jA4wuEIjGJkEob63yIKZfa+phrn/u83w/BCIrhBEnRDMvxgijJiqrphmnZjuv5QQgyiuIkzfKirOqm7fphnOZl3fbjvO7n/X6Rd9shp6CkskdNQ0vnhJ7BFSMTxOzaDQurU+fOrLpkY7fCwcnFzePCklvLvHz24RwSFDJvwZp1m7aERUTdKbToWJFDRwCvFduw7UCJUmXKVahUpVqNWnXAaQ0aNWnWolWbdh06denWoxc+lyNsgx50xiz3QMOI4kV+mQ9zIqdyr7hKVektgwtsSDDgwEeMFj1G5HuxT833zY/PT/mG7/iFv+IN3/i/bPoHtjWwIPUKUTzPL/NhjudUbhaXVGkRGiygepc16evaSwUH+D9px6DJ29Peth3i3xd+rfW/q39e/fIP2uFNgPeX9ejUoELkQwd1He/P7q8D8Pbhfn9lGdLueyeB/Tlxh2w6krs7D2bxX2uuL+6avoPcp0DZIhZ9VAxr23h5jNJqI7eyJ0zS761WrMs4O59pU2Z8OaBMieCpiHsIT5FyXLmaA8n9UuH0wSwectY0P5jgkF4l3WfDNDJZ79U+8IbytMJpi5EA+AlG4CXwljI/ctIdtR0yolCL3pPC06OV4FT7Gb7h3KhiFyfIs4GCDIstb60A/IX4BPyi3Af1otbQhQdMahztWLybUqvq/OmmkVjEPAaBTuL0sflbHhzjuy1hgH94duBnTMHtr3gLHxDqfk34cD/tt6AYtIfjf/StRcEvlzI1+7/Gkv8aLAhw4XuXZVxfV0PWtgsqMTLlRT0Q4KeT7wPodfsDSflbEHFwcjBLAvj7cT8CfAUxuZOm4zeJ65ixC7msJGaU20oRE601rNH61fyOMHaxL6j+KZ/As/hy8gM+p/ITKefyC3auYnX0p/kdWiLsc/TPOAH9O05K6L/tU2hWsICDqZTNcBRuIuCopRBw1FoIOGo3BBx1GwKOegwBR/2Aim3oIJ9jtCMjN+hgQo8EKgLDIoJGmRH7FBYyGcgOtmIeqDMpmDYD5EsGa0VaLjuyx0j+2kAaJZjXMpjyBcvl1hKUFVyYkAqom5VdJZ6VoSJCztbVoMK4gdUcyawDXi1wJanhC8Qh3kAwocFmggi1m00uCAMxqCsTZp5K0dMcsYTP4A2QC1fgZQDMyseIJbkPlfzMK+g58KKNYCZe2rnsrFAZks2u1WTdrKKvYy+57D3HBpujEPH6wFhX2NPX4XoYWge9MLH4F9waNMJYEjKRRUHCiJbBHnqWZs67Cb403EYsH+2ZFBnUlJhv5zdxYZ2x2NiGC5AabmK35AGjkuAF7q0g5do13MEr5SrVqIIgskbXDGCCb4O66EJj7fdKI3vt4KmEMhkuUVzhZSjR9JisNCyJRHpnOnjxAi/IJyG3oigkXCh7a3f2LPvnPEg1yet1gXSj/U4fy4A7N6yuxRDGCdoLoDey1gDL7+L52830I2h1f4FApNQlY6YmOaA+ydVI8EmnQ7KRmUVxZCcP7y97T6EiHxRDUA1ALzCituHHPnfrM6JCtJwybcasOSVSXrRkxaoiSRu00bYdu/bsO6gxculK7TzqrTv3Hjx68uzFqzeADtmyR7lKUUFFkkbp6mMUhmnVGNdvQC8TnwC/Mg4hVp30MhW6LBs0FDgZtW57tWVLnr4sh0dbAAAAAA==) format('woff2')"; + +// Add the inline font via JS so that we can listen to its load status. +// Covers digits 0-9 only. +const dataFont = new FontFace('data-font', src, {unicodeRange: 'U+30-39'}); +document.fonts.add(dataFont); +</script> + +<style> +@font-face { + font-family: remote-font; + /* Set a long delay to make sure it doesn't finish loading */ + src: url('/fonts/Revalia.woff?pipe=trickle(d1)') format('woff'); +} + +#target { + font: 25px/1 remote-font, data-font, monospace; +} +</style> +<span id="target">0123456789</span> +<span id="non-target">ABCDEFGHIJ</span> +<script> +promise_test(async () => { + // The loading of data-font may still be asynchronous. Wait to allow it to load. + await dataFont.loaded; + assert_false( + document.fonts.check('25px/1 remote-font'), + 'Remote font is still pending'); + assert_equals( + target.offsetWidth, 250, + 'Digits are in the unicode range of data-font and hence shaped with it'); + assert_not_equals( + document.getElementById('non-target').offsetWidth, 250, + 'Letters are out of the unicode range of data-font and hence shaped with fallback'); +}, 'We should use the inline custom font to render the page when the primary remote font is loading'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/fixedpos-static-pos-with-viewport-cb-001.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/fixedpos-static-pos-with-viewport-cb-001.html new file mode 100644 index 0000000..8b71999a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/fixedpos-static-pos-with-viewport-cb-001.html
@@ -0,0 +1,41 @@ +<!DOCTYPE html> +<title> + Nested fixedpos static position in a multicol with viewport containing block. +</title> +<link rel="help" href="https://www.w3.org/TR/css-position-3/#abspos-breaking"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<style> + .multicol { + column-count: 2; + column-fill: auto; + column-gap: 0px; + width: 50px; + height: 100px; + margin-top: -100px; + margin-left: -175px; + } + .rel { + position: relative; + } + .abs { + position: absolute; + width: 25px; + height: 400px; + } + .fixed { + position: fixed; + width: 100px; + height: 100px; + } +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="multicol"> + <div class="rel"> + <div style="height: 400px;"></div> + <div class="abs"> + <div style="height: 400px;"></div> + <div class="fixed" style="background: green;"></div> + </div> + </div> +</div> +<div class="fixed" style="background: red; z-index: -1;"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/fixedpos-static-pos-with-viewport-cb-002.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/fixedpos-static-pos-with-viewport-cb-002.html new file mode 100644 index 0000000..c2afef38 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/fixedpos-static-pos-with-viewport-cb-002.html
@@ -0,0 +1,41 @@ +<!DOCTYPE html> +<title> + Nested fixedpos in a multicol with viewport containing block. +</title> +<link rel="help" href="https://www.w3.org/TR/css-position-3/#abspos-breaking"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<style> + .multicol { + column-count: 2; + column-fill: auto; + column-gap: 0px; + width: 50px; + height: 100px; + margin-top: -100px; + margin-left: -50px; + } + .rel { + position: relative; + height: 300px; + } + .abs { + position: absolute; + width: 25px; + } + .fixed { + position: fixed; + width: 100px; + height: 100px; + } +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="multicol"> + <div class="rel"> + <div style="height: 100px;"></div> + <div class="abs"> + <div style="height: 200px;"></div> + <div class="fixed" style="background: green;"></div> + </div> + </div> +</div> +<div class="fixed" style="background: red; z-index: -1;"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/position-absolute-fit-content.html b/third_party/blink/web_tests/external/wpt/css/css-position/position-absolute-fit-content.html new file mode 100644 index 0000000..a84cc043 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-position/position-absolute-fit-content.html
@@ -0,0 +1,11 @@ +<!DOCTYPE html> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3973"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1135207"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1232439"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="position: relative; width: 100px; height: 200px;"> + <div style="position: absolute; top: 0; bottom: 0; left: 0; right: 0; max-height: fit-content; background: green;"> + <div style="height: 100px;"></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js index eaf98f3..3202ce4 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js
@@ -1,3 +1,3 @@ // import()s in an event handler are resolved relative to the document base. -window.dummyDiv.setAttribute("onclick", `import('../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`); +window.dummyDiv.setAttribute("onclick", `import('./imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`); window.dummyDiv.click(); // different from **on**click()
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js index 402219d..923eb7d8 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js
@@ -1,3 +1,3 @@ // import()s in an event handler are resolved relative to the document base. -window.dummyDiv.setAttribute("onclick", `import('../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`); +window.dummyDiv.setAttribute("onclick", `import('./imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`); window.dummyDiv.onclick();
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic-expected.txt index abfc12f..8e4257e 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic-expected.txt
@@ -1,8 +1,8 @@ This is a testharness.js-based test. -FAIL setTimeout should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/imports-a.js?label=setTimeout" +FAIL setTimeout should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/imports-a.js?label=setTimeout" PASS eval should successfully import PASS Function should successfully import -PASS reflected-inline-event-handlers should successfully import -PASS inline-event-handlers-UA-code should successfully import +FAIL reflected-inline-event-handlers should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=reflected-inline-event-handlers" +FAIL inline-event-handlers-UA-code should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=inline-event-handlers-UA-code" Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html index 7cf2dac..855705e 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html
@@ -8,7 +8,18 @@ <div id="dummy"></div> +<base href="scripts/foo/"> <script> +// Tweak the base URL of the document here to distinguish: +// - document URL +// - document base URL = ../ +// - External scripts' base URL = ./scripts/eval.js etc. +// - This inline script's base URL = ./scripts/foo/ +document.querySelector("base").remove(); +const base = document.createElement("base"); +base.setAttribute("href", "../"); +document.body.appendChild(base); + function load(scriptSrc) { const el = document.createElement("script"); el.src = scriptSrc; @@ -41,7 +52,7 @@ const promise = createTestPromise(); window.label = label; - load(`scripts/${label}.js`); + load(`dynamic-import/scripts/${label}.js`); return promise.then(module => { assert_true(window.evaluated_imports_a, "The module must have been evaluated");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module-expected.txt index abfc12f..8e4257e 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module-expected.txt
@@ -1,8 +1,8 @@ This is a testharness.js-based test. -FAIL setTimeout should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/imports-a.js?label=setTimeout" +FAIL setTimeout should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/imports-a.js?label=setTimeout" PASS eval should successfully import PASS Function should successfully import -PASS reflected-inline-event-handlers should successfully import -PASS inline-event-handlers-UA-code should successfully import +FAIL reflected-inline-event-handlers should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=reflected-inline-event-handlers" +FAIL inline-event-handlers-UA-code should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=inline-event-handlers-UA-code" Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html index 73986c2..d90af9c 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html
@@ -8,7 +8,18 @@ <div id="dummy"></div> +<base href="scripts/foo/"> <script type="module"> +// Tweak the base URL of the document here to distinguish: +// - document URL +// - document base URL = ../ +// - External scripts' base URL = ./scripts/eval.js etc. +// - This inline script's base URL = ./scripts/foo/ +document.querySelector("base").remove(); +const base = document.createElement("base"); +base.setAttribute("href", "../"); +document.body.appendChild(base); + function load(scriptSrc) { const el = document.createElement("script"); el.type = "module"; @@ -42,7 +53,7 @@ const promise = createTestPromise(); window.label = label; - load(`scripts/${label}.js`); + load(`dynamic-import/scripts/${label}.js`); return promise.then(module => { assert_true(window.evaluated_imports_a, "The module must have been evaluated");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic-expected.txt index adf45dd..bb78d07 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -PASS setTimeout should successfully import +FAIL setTimeout should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/imports-a.js?label=setTimeout" PASS eval should successfully import PASS the Function constructor should successfully import FAIL reflected inline event handlers should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=reflected%20inline%20event%20handlers"
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html index 1bd6d7d..2fe1f75 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html
@@ -3,14 +3,23 @@ <title>import() inside compiled strings uses the script base URL (= document base URL) inside an inline classic script</title> <link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> -<base href=".."> - <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<body> <div id="dummy"></div> +<base href="scripts/foo/"> <script> +// Tweak the base URL of the document here to distinguish: +// - document URL +// - document base URL = ../ +// - This inline script's base URL = ./scripts/foo/ +document.querySelector("base").remove(); +const base = document.createElement("base"); +base.setAttribute("href", "../"); +document.body.appendChild(base); + function createTestPromise() { return new Promise((resolve, reject) => { window.continueTest = resolve; @@ -20,23 +29,7 @@ const dummyDiv = document.querySelector("#dummy"); -const evaluators = { - setTimeout, - eval, - "the Function constructor"(x) { - Function(x)(); - }, - "reflected inline event handlers"(x) { - dummyDiv.setAttribute("onclick", x); - dummyDiv.onclick(); - }, - "inline event handlers triggered via UA code"(x) { - dummyDiv.setAttribute("onclick", x); - dummyDiv.click(); // different from .**on**click() - } -}; - -for (const [label, evaluator] of Object.entries(evaluators)) { +function doTest(label, evaluator, path) { promise_test(t => { t.add_cleanup(() => { dummyDiv.removeAttribute("onclick"); @@ -45,12 +38,36 @@ const promise = createTestPromise(); - evaluator(`import('./imports-a.js?label=${label}').then(window.continueTest, window.errorTest);`); + evaluator(`import('${path}/imports-a.js?label=${label}').then(window.continueTest, window.errorTest);`); return promise.then(module => { assert_true(window.evaluated_imports_a, "The module must have been evaluated"); assert_equals(module.A.from, "imports-a.js", "The module namespace object must be correct"); }); }, label + " should successfully import"); -}; +} + +// Inline script's base URL should be used. +doTest("setTimeout", setTimeout, "../../.."); +doTest("eval", eval, "../../.."); +doTest("the Function constructor", + (x) => { + Function(x)(); + }, + "../../.."); + +// Document's base URL should be used, as there are no active scripts. +doTest("reflected inline event handlers", + (x) => { + dummyDiv.setAttribute("onclick", x); + dummyDiv.onclick(); + }, + "."); + +doTest("inline event handlers triggered via UA code", + (x) => { + dummyDiv.setAttribute("onclick", x); + dummyDiv.click(); // different from .**on**click() + }, + "."); </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module-expected.txt index adf45dd..bb78d07 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -PASS setTimeout should successfully import +FAIL setTimeout should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/imports-a.js?label=setTimeout" PASS eval should successfully import PASS the Function constructor should successfully import FAIL reflected inline event handlers should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=reflected%20inline%20event%20handlers"
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html index f5b8574..1691550e 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html
@@ -3,14 +3,23 @@ <title>import() inside compiled strings uses the script base URL (= document base URL) inside an inline module script</title> <link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> -<base href=".."> - <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<body> <div id="dummy"></div> +<base href="scripts/foo/"> <script type="module"> +// Tweak the base URL of the document here to distinguish: +// - document URL +// - document base URL = ../ +// - This inline script's base URL = ./scripts/foo/ +document.querySelector("base").remove(); +const base = document.createElement("base"); +base.setAttribute("href", "../"); +document.body.appendChild(base); + function createTestPromise() { return new Promise((resolve, reject) => { window.continueTest = resolve; @@ -20,23 +29,7 @@ const dummyDiv = document.querySelector("#dummy"); -const evaluators = { - setTimeout, - eval, - "the Function constructor"(x) { - Function(x)(); - }, - "reflected inline event handlers"(x) { - dummyDiv.setAttribute("onclick", x); - dummyDiv.onclick(); - }, - "inline event handlers triggered via UA code"(x) { - dummyDiv.setAttribute("onclick", x); - dummyDiv.click(); // different from .**on**click() - } -}; - -for (const [label, evaluator] of Object.entries(evaluators)) { +function doTest(label, evaluator, path) { promise_test(t => { t.add_cleanup(() => { dummyDiv.removeAttribute("onclick"); @@ -45,12 +38,36 @@ const promise = createTestPromise(); - evaluator(`import('./imports-a.js?label=${label}').then(window.continueTest, window.errorTest);`); + evaluator(`import('${path}/imports-a.js?label=${label}').then(window.continueTest, window.errorTest);`); return promise.then(module => { assert_true(window.evaluated_imports_a, "The module must have been evaluated"); assert_equals(module.A.from, "imports-a.js", "The module namespace object must be correct"); }); }, label + " should successfully import"); -}; +} + +// Inline script's base URL should be used. +doTest("setTimeout", setTimeout, "../../.."); +doTest("eval", eval, "../../.."); +doTest("the Function constructor", + (x) => { + Function(x)(); + }, + "../../.."); + +// Document's base URL should be used, as there are no active scripts. +doTest("reflected inline event handlers", + (x) => { + dummyDiv.setAttribute("onclick", x); + dummyDiv.onclick(); + }, + "."); + +doTest("inline event handlers triggered via UA code", + (x) => { + dummyDiv.setAttribute("onclick", x); + dummyDiv.click(); // different from .**on**click() + }, + "."); </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-3-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-3-expected.txt deleted file mode 100644 index 1b30fce..0000000 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-3-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Test that unresolvable cycles lead to SyntaxError events on window and load events on script assert_array_equals: expected property 2 to be "Uncaught SyntaxError: Detected cycle while resolving name 'x' in './cycle-unresolvable-a.js'" but got "Uncaught SyntaxError: Detected cycle while resolving name 'x' in './cycle-unresolvable.js'" (expected array ["Uncaught SyntaxError: Detected cycle while resolving name 'x' in './cycle-unresolvable-a.js'", 1, "Uncaught SyntaxError: Detected cycle while resolving name 'x' in './cycle-unresolvable-a.js'", 2, "Uncaught SyntaxError: Detected cycle while resolving name 'x' in './cycle-unresolvable-a.js'", 3] got ["Uncaught SyntaxError: Detected cycle while resolving name 'x' in './cycle-unresolvable-a.js'", 1, "Uncaught SyntaxError: Detected cycle while resolving name 'x' in './cycle-unresolvable.js'", 2, "Uncaught SyntaxError: Detected cycle while resolving name 'x' in './cycle-unresolvable-a.js'", 3]) -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html index 8fa2b8b..32f0a4a 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html
@@ -17,8 +17,14 @@ }); window.addEventListener("load", test_load.step_func_done(ev => { - const msg = log[0]; - assert_array_equals(log, [msg, 1, msg, 2, msg, 3]); + assert_equals(log.length, 6, 'Log length'); + assert_equals(log[1], 1); + assert_equals(log[3], 2); + assert_equals(log[5], 3); + assert_not_equals(log[0], log[2], + 'Instantiation error objects for different root scripts'); + assert_equals(log[0], log[4], + 'Instantiation error objects for the same root script'); })); function unreachable() { log.push("unexpected"); }
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-4-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-4-expected.txt deleted file mode 100644 index fdde0fa..0000000 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-4-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Test that loading a graph in which a module is already errored results in an error. assert_array_equals: expected property 2 to be "Uncaught SyntaxError: The requested module './instantiation-error-4c.js' does not provide an export named 'something'" but got "Uncaught SyntaxError: The requested module './instantiation-error-4d.js' does not provide an export named 'something'" (expected array ["Uncaught SyntaxError: The requested module './instantiation-error-4c.js' does not provide an export named 'something'", 1, "Uncaught SyntaxError: The requested module './instantiation-error-4c.js' does not provide an export named 'something'", 2] got ["Uncaught SyntaxError: The requested module './instantiation-error-4c.js' does not provide an export named 'something'", 1, "Uncaught SyntaxError: The requested module './instantiation-error-4d.js' does not provide an export named 'something'", 2]) -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html index 238e883..8d3f238 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html
@@ -17,8 +17,11 @@ }); window.addEventListener("load", test_load.step_func_done(ev => { - const msg = log[0]; - assert_array_equals(log, [msg, 1, msg, 2]); + assert_equals(log.length, 4, 'Log length'); + assert_equals(log[1], 1); + assert_equals(log[3], 2); + assert_not_equals(log[0], log[2], + 'Instantiation error objects for different root scripts'); })); function unreachable() { log.push("unexpected"); }
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5-expected.txt deleted file mode 100644 index d60314082..0000000 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Test that loading a graph in which a module is already errored results an error. assert_array_equals: expected property 2 to be "Uncaught SyntaxError: The requested module './instantiation-error-5c.js' does not provide an export named 'something'" but got "Uncaught SyntaxError: The requested module './instantiation-error-5e.js' does not provide an export named 'something'" (expected array ["Uncaught SyntaxError: The requested module './instantiation-error-5c.js' does not provide an export named 'something'", 1, "Uncaught SyntaxError: The requested module './instantiation-error-5c.js' does not provide an export named 'something'", 2] got ["Uncaught SyntaxError: The requested module './instantiation-error-5c.js' does not provide an export named 'something'", 1, "Uncaught SyntaxError: The requested module './instantiation-error-5e.js' does not provide an export named 'something'", 2]) -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html index de2b6ba..20df0bb 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html
@@ -17,8 +17,11 @@ }); window.addEventListener("load", test_load.step_func_done(ev => { - const msg = log[0]; - assert_array_equals(log, [msg, 1, msg, 2]); + assert_equals(log.length, 4, 'Log length'); + assert_equals(log[1], 1); + assert_equals(log[3], 2); + assert_not_equals(log[0], log[2], + 'Instantiation error objects for different root scripts'); })); function unreachable() { log.push("unexpected"); }
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt index d7dae0f..cba73637 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt
@@ -37,6 +37,6 @@ FAIL checkMsectionReuse assert_equals: expected "[{currentDirection:null,mid:null}]" but got "[{currentDirection:\"inactive\",mid:\"0\"}]" PASS checkStopAfterCreateOfferWithReusedMsection PASS checkAddIceCandidateToStoppedTransceiver -FAIL checkBundleTagRejected promise_test: Unhandled rejection with value: object "InvalidAccessError: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote offer sdp: The m= section with mid='1' should be rejected." +PASS checkBundleTagRejected Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/virtual/layout_ng_svg_text/paint/invalidation/svg/text-rescale-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/virtual/layout_ng_svg_text/paint/invalidation/svg/text-rescale-expected.txt new file mode 100644 index 0000000..399ea51 --- /dev/null +++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/virtual/layout_ng_svg_text/paint/invalidation/svg/text-rescale-expected.txt
@@ -0,0 +1,23 @@ +{ + "layers": [ + { + "name": "Scrolling background of LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "invalidations": [ + [0, 114, 192, 46], + [0, 14, 192, 46], + [310, 114, 91, 46], + [310, 14, 91, 46], + [210, 114, 91, 46], + [210, 14, 91, 46], + [0, 3, 9, 2], + [9, 3, 4, 2], + [6, 3, 4, 2], + [0, 0, 1, 1] + ] + } + ] +} +
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/dedicated-worker-main-script-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/dedicated-worker-main-script-expected.txt new file mode 100644 index 0000000..e720b4a --- /dev/null +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/dedicated-worker-main-script-expected.txt
@@ -0,0 +1,3 @@ +Tests that Fetch.requestPaused is emitted for the main script of dedciated worker +PASSED: intercepted script +
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/dedicated-worker-main-script.js b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/dedicated-worker-main-script.js new file mode 100644 index 0000000..4eb46e0a --- /dev/null +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/dedicated-worker-main-script.js
@@ -0,0 +1,33 @@ +(async function(testRunner) { + const {page, session, dp} = await testRunner.startBlank( + `Tests that Fetch.requestPaused is emitted for the main script of dedciated worker`); + + await dp.Target.setAutoAttach( + {autoAttach: true, waitForDebuggerOnStart: true, flatten: true}); + + await dp.Fetch.enable({patterns: [{}]}); + dp.Fetch.onRequestPaused(event => { + if (event.params.request.url.endsWith('/worker.js')) { + dp.Fetch.fulfillRequest({ + requestId: event.params.requestId, + responseCode: 200, + responseHeaders: [{name: 'Content-Type', value: 'application/x-javascript'}], + body: btoa(`console.log('PASSED: intercepted script')`) + }) + } + }); + const consoleMessagePromise = new Promise(resolve => { + dp.Target.onAttachedToTarget(async event => { + const wdp = session.createChild(event.params.sessionId).protocol; + wdp.Runtime.enable(); + wdp.Runtime.onConsoleAPICalled(e => { + resolve(e.params.args[0].value); + }) + wdp.Runtime.runIfWaitingForDebugger(); + }); + }); + + session.evaluate(`new Worker('/inspector-protocol/network/resources/worker.js')`); + testRunner.log(await consoleMessagePromise); + testRunner.completeTest(); +})
diff --git a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/paint/invalidation/svg/text-rescale-expected.txt b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/paint/invalidation/svg/text-rescale-expected.txt new file mode 100644 index 0000000..f5a870b9 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/paint/invalidation/svg/text-rescale-expected.txt
@@ -0,0 +1,23 @@ +{ + "layers": [ + { + "name": "Scrolling Contents Layer", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "invalidations": [ + [0, 114, 192, 46], + [0, 14, 192, 46], + [310, 114, 91, 46], + [310, 14, 91, 46], + [210, 114, 91, 46], + [210, 14, 91, 46], + [0, 3, 9, 2], + [9, 3, 4, 2], + [6, 3, 4, 2], + [0, 0, 1, 1] + ] + } + ] +} +
diff --git a/third_party/blink/web_tests/webgpu/internal_cts_test_splits.pyl b/third_party/blink/web_tests/webgpu/internal_cts_test_splits.pyl index 2c8f478..9cf64d1 100644 --- a/third_party/blink/web_tests/webgpu/internal_cts_test_splits.pyl +++ b/third_party/blink/web_tests/webgpu/internal_cts_test_splits.pyl
@@ -28,14 +28,16 @@ 'wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="Sample";format="rgba8unorm";*', 'wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="3d";readMethod="Sample";format="rgba8unorm";*', - 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=false;drawCallTestParameter="vertexCount"', - 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=false;drawCallTestParameter="vertexCount"', - 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=true;drawCallTestParameter="vertexCount"', - 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=true;drawCallTestParameter="vertexCount"', - 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=false;drawCallTestParameter="indexCount"', - 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=false;drawCallTestParameter="indexCount"', - 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=true;drawCallTestParameter="indexCount"', - 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=true;drawCallTestParameter="indexCount"', + 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";*', + 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";*', + 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";*', + 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";*', + 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";*', + 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";*', + 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";*', + 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";*', + 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";*', + 'wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";*', 'wpt_internal/webgpu/cts.html?q=webgpu:shader,validation,variable_and_const:initializer_type:variableOrConstant="var";*', 'wpt_internal/webgpu/cts.html?q=webgpu:shader,validation,variable_and_const:io_shareable_type:storageClass="in";*',
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 23d6cdf..46bfd60 100644 --- a/third_party/blink/web_tests/wpt_internal/webgpu/cts.html +++ b/third_party/blink/web_tests/wpt_internal/webgpu/cts.html
@@ -1310,6 +1310,8 @@ <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,createBindGroup:buffer,resource_state:*'> +<meta name=variant content='?q=webgpu:api,validation,createBindGroup:texture,resource_state:*'> <meta name=variant content='?q=webgpu:api,validation,createBindGroupLayout:duplicate_bindings:*'> <meta name=variant content='?q=webgpu:api,validation,createBindGroupLayout:visibility:*'> <meta name=variant content='?q=webgpu:api,validation,createBindGroupLayout:multisampled_validation:*'> @@ -1356,7 +1358,7 @@ <meta name=variant content='?q=webgpu:api,validation,createView:creating_cube_map_texture_view:*'> <meta name=variant content='?q=webgpu:api,validation,createView:creating_cube_map_texture_view_with_a_non_square_texture:*'> <meta name=variant content='?q=webgpu:api,validation,createView:test_the_format_compatibility_rules_when_creating_a_texture_view:*'> -<meta name=variant content='?q=webgpu:api,validation,createView:it_is_invalid_to_use_a_texture_view_created_from_a_destroyed_texture:*'> +<meta name=variant content='?q=webgpu:api,validation,createView:texture_state:*'> <meta name=variant content='?q=webgpu:api,validation,encoding,cmds,buffer_texture_copies:depth_stencil_format,copy_usage_and_aspect:*'> <meta name=variant content='?q=webgpu:api,validation,encoding,cmds,buffer_texture_copies:depth_stencil_format,copy_buffer_size:*'> <meta name=variant content='?q=webgpu:api,validation,encoding,cmds,buffer_texture_copies:depth_stencil_format,copy_buffer_offset:*'> @@ -1815,24 +1817,46 @@ <meta name=variant content='?q=webgpu:shader,execution,robust_access:linear_memory:storageClass="workgroup";access="write";atomic=false;baseType="bool";*'> <meta name=variant content='?q=webgpu:shader,execution,robust_access:linear_memory:storageClass="workgroup";access="write";atomic=true;baseType="i32";*'> <meta name=variant content='?q=webgpu:shader,execution,robust_access:linear_memory:storageClass="workgroup";access="write";atomic=true;baseType="u32";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=false;drawCallTestParameter="vertexCount"'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=false;drawCallTestParameter="instanceCount";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=false;drawCallTestParameter="firstVertex";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=false;drawCallTestParameter="firstInstance";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=true;drawCallTestParameter="vertexCount"'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=true;drawCallTestParameter="instanceCount";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=true;drawCallTestParameter="firstVertex";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=false;indirect=true;drawCallTestParameter="firstInstance";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=false;drawCallTestParameter="indexCount"'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=false;drawCallTestParameter="instanceCount";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=false;drawCallTestParameter="firstIndex";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=false;drawCallTestParameter="baseVertex";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=false;drawCallTestParameter="firstInstance";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=true;drawCallTestParameter="indexCount"'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=true;drawCallTestParameter="instanceCount";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=true;drawCallTestParameter="firstIndex";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=true;drawCallTestParameter="baseVertex";*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertexAccess:indexed=true;indirect=true;drawCallTestParameter="firstInstance";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";*'> +<meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";*'> <meta name=variant content='?q=webgpu:shader,validation,variable_and_const:initializer_type:variableOrConstant="var";*'> <meta name=variant content='?q=webgpu:shader,validation,variable_and_const:initializer_type:variableOrConstant="let";*'> <meta name=variant content='?q=webgpu:shader,validation,variable_and_const:io_shareable_type:storageClass="in";*'>
diff --git a/third_party/libusb/BUILD.gn b/third_party/libusb/BUILD.gn index c60bf106a..c77e2e2 100644 --- a/third_party/libusb/BUILD.gn +++ b/third_party/libusb/BUILD.gn
@@ -3,7 +3,7 @@ # found in the LICENSE file. # libusb is only used by //services/device/usb on Windows and macOS. -assert(is_win || is_mac) +assert(is_mac) import("//build/config/chromeos/ui_mode.gni") import("//build/config/features.gni")
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 5d47a964..043413c 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -28324,7 +28324,7 @@ <int value="1089" label="DELETED_DATAREDUCTIONPROXY_GETDATAUSAGE"/> <int value="1090" label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONGETDEVICEADDRESS"/> - <int value="1091" label="TABCAPTURE_CAPTUREOFFSCREENTAB"/> + <int value="1091" label="DELETED_TABCAPTURE_CAPTUREOFFSCREENTAB"/> <int value="1092" label="LANGUAGESETTINGSPRIVATE_ADDSPELLCHECKWORD"/> <int value="1093" label="LANGUAGESETTINGSPRIVATE_REMOVESPELLCHECKWORD"/> <int value="1094" label="SETTINGSPRIVATE_GETDEFAULTZOOMFUNCTION"/> @@ -28821,6 +28821,7 @@ <int value="1564" label="SCRIPTING_GETREGISTEREDCONTENTSCRIPTS"/> <int value="1565" label="OS_TELEMETRY_GETVPDINFO"/> <int value="1566" label="ACCESSIBILITY_PRIVATE_MAGNIFIERCENTERONPOINT"/> + <int value="1567" label="STORAGE_SETACCESSLEVEL"/> </enum> <enum name="ExtensionIconState"> @@ -46699,6 +46700,8 @@ <int value="-1969636234" label="OmniboxRefinedFocusState:disabled"/> <int value="-1966445414" label="StylusBatteryStatus:disabled"/> <int value="-1965587041" label="omnibox-tab-switch-suggestions"/> + <int value="-1964730371" + label="AutofillFillMerchantPromoCodeFields:disabled"/> <int value="-1964261747" label="WebVrVsyncAlign:disabled"/> <int value="-1963838301" label="ShowSyncPausedReasonCookiesClearedOnExit:enabled"/> @@ -50730,6 +50733,7 @@ <int value="1276120671" label="AutofillEnableOfferNotification:enabled"/> <int value="1276209777" label="ntp-switch-to-existing-tab"/> <int value="1277386636" label="QueryInOmnibox:disabled"/> + <int value="1278244152" label="AutofillFillMerchantPromoCodeFields:enabled"/> <int value="1278512661" label="SmartDimNewMlAgent:disabled"/> <int value="1279422279" label="query-tiles-country-code"/> <int value="1279584261" label="enable-carrier-switching"/> @@ -73815,6 +73819,9 @@ </enum> <enum name="ServiceWorkerInternalsLinkQuery"> + <obsolete> + Removed 2021-08-03. + </obsolete> <int value="0" label="Accessed from DevTools"/> <int value="1" label="Accessed from outside DevTools"/> </enum>
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml index 775e776..92f40a5 100644 --- a/tools/metrics/histograms/metadata/apps/histograms.xml +++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -1534,7 +1534,7 @@ </histogram> <histogram name="Apps.AppListStateTransitionSource" - enum="AppListStateTransitionSource" expires_after="2021-08-09"> + enum="AppListStateTransitionSource" expires_after="2022-02-09"> <owner>newcomer@chromium.org</owner> <owner>mmourgos@chromium.org</owner> <summary> @@ -1626,7 +1626,7 @@ </histogram> <histogram name="Apps.AppsInFolders{AppListFolderExperiment}" units="Apps" - expires_after="2021-08-09"> + expires_after="2022-02-09"> <owner>mmourgos@chromium.org</owner> <owner>newcomer@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml index a8bccce..69ddb5b 100644 --- a/tools/metrics/histograms/metadata/autofill/histograms.xml +++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -2251,16 +2251,6 @@ </summary> </histogram> -<histogram name="Autofill.StoredCreditCardCount.Server.WithCardArtImage" - units="units" expires_after="M98"> - <owner>siyua@chromium.org</owner> - <owner>payments-autofill-team@google.com</owner> - <summary> - The number of server cards with a valid card art image, measured at Chrome - profile launch. - </summary> -</histogram> - <histogram name="Autofill.StoredCreditCardCount.Server.WithVirtualCardMetadata" units="units" expires_after="M98"> <owner>siyua@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/bluetooth/histograms.xml b/tools/metrics/histograms/metadata/bluetooth/histograms.xml index d869b20..47917a8 100644 --- a/tools/metrics/histograms/metadata/bluetooth/histograms.xml +++ b/tools/metrics/histograms/metadata/bluetooth/histograms.xml
@@ -204,7 +204,7 @@ <histogram name="Bluetooth.ChromeOS.Pairing.Result.FailureReason{BluetoothTransportTypes}" - enum="BluetoothConnectionFailureReason" expires_after="2021-09-19"> + enum="BluetoothConnectionFailureReason" expires_after="2022-08-01"> <owner>khorimoto@chromium.org</owner> <owner>cros-connectivity@google.com</owner> <summary> @@ -221,7 +221,7 @@ </histogram> <histogram name="Bluetooth.ChromeOS.Pairing.Result{BluetoothTransportTypes}" - enum="BooleanSuccess" expires_after="2021-09-12"> + enum="BooleanSuccess" expires_after="2022-08-01"> <owner>khorimoto@chromium.org</owner> <owner>cros-connectivity@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cross_device/histograms.xml b/tools/metrics/histograms/metadata/cross_device/histograms.xml index 702c110..8a2da521 100644 --- a/tools/metrics/histograms/metadata/cross_device/histograms.xml +++ b/tools/metrics/histograms/metadata/cross_device/histograms.xml
@@ -1418,7 +1418,7 @@ </histogram> <histogram name="InstantTethering.HostScanResult" - enum="InstantTethering_HostScanResult" expires_after="2021-09-12"> + enum="InstantTethering_HostScanResult" expires_after="2022-08-01"> <owner>hansberry@chromium.org</owner> <owner>better-together-dev@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml index 164e31a..eeda8912 100644 --- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -6751,6 +6751,9 @@ </histogram_suffixes> <histogram_suffixes name="HistogramInconsistencies" separator="."> + <obsolete> + Removed in 2017. + </obsolete> <suffix name="Cronet" label="Cronet histograms."/> <affected-histogram name="Histogram.InconsistenciesBrowser"/> <affected-histogram name="Histogram.InconsistenciesBrowserUnique"/>
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml index 8f09da43..7007086 100644 --- a/tools/metrics/histograms/metadata/media/histograms.xml +++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -3271,7 +3271,7 @@ </histogram> <histogram name="Media.PipelineStatus.Start" enum="PipelineStatus" - expires_after="2021-08-09"> + expires_after="2022-08-09"> <owner>xhwang@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -5212,6 +5212,9 @@ <histogram name="MediaRouter.CastStreaming.Start.Failure" enum="MirrorFailureType" expires_after="2021-08-09"> + <obsolete> + Unused after August 2021. + </obsolete> <owner>takumif@chromium.org</owner> <owner>openscreen-eng@google.com</owner> <summary> @@ -5406,7 +5409,7 @@ </histogram> <histogram name="MediaRouter.PresentationRequest.UrlBySink" - enum="PresentationUrlBySink" expires_after="2021-09-05"> + enum="PresentationUrlBySink" expires_after="2022-02-01"> <owner>mfoltz@chromium.org</owner> <owner>openscreen-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index 09850a5..8d0901c 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -5930,6 +5930,34 @@ </summary> </histogram> +<histogram name="FamilyUser.ManagedSiteListCount.Approved" + units="Number of approved sites" expires_after="2022-07-28"> + <owner>agawronska@chromium.org</owner> + <owner>tobyhuang@chromium.org</owner> + <owner>xiqiruan@chromium.org</owner> + <owner>cros-families-eng@google.com</owner> + <summary> + Records number of approved urls and hosts for currently active Family Link + user. This metric is recorded at the beginning of first active session daily + and when manual hosts and manual urls policies are changed. Ignores the + reports during OOBE and sign out. + </summary> +</histogram> + +<histogram name="FamilyUser.ManagedSiteListCount.Blocked" + units="Number of blocked sites" expires_after="2022-07-28"> + <owner>agawronska@chromium.org</owner> + <owner>tobyhuang@chromium.org</owner> + <owner>xiqiruan@chromium.org</owner> + <owner>cros-families-eng@google.com</owner> + <summary> + Records number of blocked urls and hosts for currently active Family Link + user. This metric is recorded at the beginning of first active session daily + and when manual hosts and manual urls policies are changed. Ignores the + reports during OOBE and sign out. + </summary> +</histogram> + <histogram name="FamilyUser.NewUserAdded" enum="NewUserAdded" expires_after="2021-12-12"> <owner>agawronska@chromium.org</owner> @@ -7567,89 +7595,6 @@ </summary> </histogram> -<histogram name="Histogram.BadConstructionArguments" enum="HistogramNameHash" - expires_after="M87"> - <owner>asvitkine@chromium.org</owner> - <owner>bcwhite@chromium.org</owner> - <summary> - The hash codes of histograms that were found to have bad construction - arguments. These would be DCHECK exceptions in debug builds but have simply - been logged and corrected as best as possible rather than crash. - </summary> -</histogram> - -<histogram name="Histogram.InconsistentSnapshotBrowser" units="units" - expires_after="M85"> - <owner>asvitkine@chromium.org</owner> - <summary> - The amount of discrepancy found when examining a single histogram's data in - the browser process for transmission via UMA. Inconsistent data is NOT - transmitted via UMA. - </summary> -</histogram> - -<histogram name="Histogram.InconsistentSnapshotChildProcess" units="units" - expires_after="M85"> - <owner>asvitkine@chromium.org</owner> - <summary> - The amount of discrepancy found when examining a single histogram's data in - a child process for transmission via UMA. Inconsistent data is NOT - transmitted via UMA. - </summary> -</histogram> - -<histogram name="Histogram.MismatchedConstructionArguments" - enum="HistogramNameHash" expires_after="M87"> - <owner>asvitkine@chromium.org</owner> - <owner>bcwhite@chromium.org</owner> - <summary> - The hash codes of histograms that were found to have construction arguments - different from a previous instantiation of the same name. Entries here have - conflicting definitions and should be investigated. Data collected for the - secondary definitions will be silently dropped. - </summary> -</histogram> - -<histogram name="Histogram.PendingProcessNotResponding" units="processes" - expires_after="M79"> - <owner>Please list the metric's owners. Add more owner tags as needed.</owner> - <summary> - When metrics services (UMA) ran an update, the number of child processes - that did not respond, providing histogram updates, before the timeout. - </summary> -</histogram> - -<histogram name="Histogram.PermanentNameChanged" enum="HistogramNameHash" - expires_after="M85"> - <owner>asvitkine@chromium.org</owner> - <owner>bcwhite@chromium.org</owner> - <summary> - The hash codes of histograms of which the external name storage was altered - after the histogram was created. - </summary> -</histogram> - -<histogram name="Histogram.ReceivedProcessGroupCount" enum="BooleanEnabled" - expires_after="M79"> - <owner>Please list the metric's owners. Add more owner tags as needed.</owner> - <summary> - When metrics services (UMA) ran an update, the number of times the process - groups (renderer processes and plugin/gpu processes) did not respond, - providing histogram updates, before the timeout. - </summary> -</histogram> - -<histogram name="Histogram.TooManyBuckets.1000" enum="HistogramNameHash" - expires_after="M78"> - <owner>asvitkine@chromium.org</owner> - <owner>bcwhite@chromium.org</owner> - <summary> - The hash codes of histograms that were found to request more than 1000 - buckets. These would be DCHECK exceptions in debug builds if the limit is - lowered so are being logged before that change. - </summary> -</histogram> - <histogram name="HostedAppFrame.ContentSettings.ImagePressed" enum="ContentSettingImageType" expires_after="2021-02-01"> <owner>calamity@chromium.org</owner> @@ -8511,7 +8456,7 @@ </histogram> <histogram name="LanguageDetection.TFLiteModel.LanguageDetectionModelState" - enum="LanguageDetectionModelState" expires_after="M94"> + enum="LanguageDetectionModelState" expires_after="M98"> <owner>mcrouse@chromium.org</owner> <owner>chrome-language@google.com</owner> <summary> @@ -8521,7 +8466,7 @@ </histogram> <histogram name="LanguageDetection.TFLiteModel.WasModelAvailableForDetection" - enum="BooleanAvailable" expires_after="M94"> + enum="BooleanAvailable" expires_after="M98"> <owner>mcrouse@chromium.org</owner> <owner>chrome-language@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/segmentation_platform/histograms.xml b/tools/metrics/histograms/metadata/segmentation_platform/histograms.xml index b1445ae..13fea6b 100644 --- a/tools/metrics/histograms/metadata/segmentation_platform/histograms.xml +++ b/tools/metrics/histograms/metadata/segmentation_platform/histograms.xml
@@ -28,6 +28,13 @@ <variant name="Voice"/> </variants> +<variants name="SignalType"> + <variant name="HistogramEnum" summary="enum histogram"/> + <variant name="HistogramValue" summary="value histogram"/> + <variant name="Unknown" summary="unknown"/> + <variant name="UserAction" summary="user action"/> +</variants> + <histogram name="SegmentationPlatform.AdaptiveToolbar.ModelScore.{SegmentID}" units="%" expires_after="2022-02-01"> <owner>shaktisahu@chromium.org</owner> @@ -72,6 +79,19 @@ </summary> </histogram> +<histogram name="SegmentationPlatform.Signals.ListeningCount.{SignalType}" + units="signals" expires_after="2022-02-01"> + <owner>nyquist@chromium.org</owner> + <owner>shaktisahu@chromium.org</owner> + <owner>chrome-segmentation-platform@google.com</owner> + <summary> + Records then number of {SignalType} signals the segmentation platform + currently listens to. Recorded whenever we update the set of {SignalType} + signals that the segmentation platform is currently listening to. + </summary> + <token key="SignalType" variants="SignalType"/> +</histogram> + </histograms> </histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml index 9bb7240..0943cb0 100644 --- a/tools/metrics/histograms/metadata/service/histograms.xml +++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -421,6 +421,9 @@ <histogram name="ServiceWorker.InternalsPageAccessed" enum="ServiceWorkerInternalsLinkQuery" expires_after="M94"> + <obsolete> + Removed 2021-08-03. + </obsolete> <owner>bashi@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1104,7 +1107,7 @@ </histogram> <histogram name="ServiceWorker.Storage.DeleteAndStartOverResult" - enum="ServiceWorkerDeleteAndStartOverResult" expires_after="M94"> + enum="ServiceWorkerDeleteAndStartOverResult" expires_after="M100"> <owner>bashi@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/translate/histograms.xml b/tools/metrics/histograms/metadata/translate/histograms.xml index 0e140db..0d0201b 100644 --- a/tools/metrics/histograms/metadata/translate/histograms.xml +++ b/tools/metrics/histograms/metadata/translate/histograms.xml
@@ -1307,7 +1307,7 @@ <histogram name="TranslateModelService.LanguageDetectionModel.PendingRequestCallbacks" - units="requests" expires_after="M94"> + units="requests" expires_after="M98"> <owner>mcrouse@chromium.org</owner> <owner>chrome-language@chromium.org</owner> <summary> @@ -1318,7 +1318,7 @@ </histogram> <histogram name="TranslateModelService.LanguageDetectionModel.WasLoaded" - enum="BooleanLoaded" expires_after="M94"> + enum="BooleanLoaded" expires_after="M98"> <owner>mcrouse@chromium.org</owner> <owner>chrome-language@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/uma/histograms.xml b/tools/metrics/histograms/metadata/uma/histograms.xml index 34cfe1bc..7e57485 100644 --- a/tools/metrics/histograms/metadata/uma/histograms.xml +++ b/tools/metrics/histograms/metadata/uma/histograms.xml
@@ -42,6 +42,107 @@ summary="For "zygote" process metrics."/> </variants> +<histogram name="Histogram.BadConstructionArguments" enum="HistogramNameHash" + expires_after="M95"> + <owner>asvitkine@chromium.org</owner> + <owner>bcwhite@chromium.org</owner> + <owner>src/base/metrics/OWNERS</owner> + <summary> + The hash codes of histograms that were found to have bad construction + arguments. These would be DCHECK exceptions in debug builds but have simply + been logged and corrected as best as possible rather than crash. + </summary> +</histogram> + +<histogram name="Histogram.InconsistentSnapshotBrowser" units="units" + expires_after="M85"> + <obsolete> + Removed 07/2017. + </obsolete> + <owner>asvitkine@chromium.org</owner> + <summary> + The amount of discrepancy found when examining a single histogram's data in + the browser process for transmission via UMA. Inconsistent data is NOT + transmitted via UMA. + </summary> +</histogram> + +<histogram name="Histogram.InconsistentSnapshotChildProcess" units="units" + expires_after="M85"> + <obsolete> + Removed 07/2017. + </obsolete> + <owner>asvitkine@chromium.org</owner> + <summary> + The amount of discrepancy found when examining a single histogram's data in + a child process for transmission via UMA. Inconsistent data is NOT + transmitted via UMA. + </summary> +</histogram> + +<histogram name="Histogram.MismatchedConstructionArguments" + enum="HistogramNameHash" expires_after="M95"> + <owner>asvitkine@chromium.org</owner> + <owner>bcwhite@chromium.org</owner> + <owner>src/base/metrics/OWNERS</owner> + <summary> + The hash codes of histograms that were found to have construction arguments + different from a previous instantiation of the same name. Entries here have + conflicting definitions and should be investigated. Data collected for the + secondary definitions will be silently dropped. + </summary> +</histogram> + +<histogram name="Histogram.PendingProcessNotResponding" units="processes" + expires_after="M79"> + <obsolete> + Removed 06/2021. + </obsolete> + <owner>asvitkine@chromium.org</owner> + <summary> + When metrics services (UMA) ran an update, the number of child processes + that did not respond, providing histogram updates, before the timeout. + </summary> +</histogram> + +<histogram name="Histogram.PermanentNameChanged" enum="HistogramNameHash" + expires_after="M85"> + <obsolete> + No longer in the codebase as of 06/2021. + </obsolete> + <owner>asvitkine@chromium.org</owner> + <owner>bcwhite@chromium.org</owner> + <summary> + The hash codes of histograms of which the external name storage was altered + after the histogram was created. + </summary> +</histogram> + +<histogram name="Histogram.ReceivedProcessGroupCount" enum="BooleanEnabled" + expires_after="M79"> + <obsolete> + Removed 06/2021. + </obsolete> + <owner>asvitkine@chromium.org</owner> + <summary> + When metrics services (UMA) ran an update, the number of times the process + groups (renderer processes and plugin/gpu processes) did not respond, + providing histogram updates, before the timeout. + </summary> +</histogram> + +<histogram name="Histogram.TooManyBuckets.1000" enum="HistogramNameHash" + expires_after="M95"> + <owner>asvitkine@chromium.org</owner> + <owner>bcwhite@chromium.org</owner> + <owner>src/base/metrics/OWNERS</owner> + <summary> + The hash codes of histograms that were found to request more than 1000 + buckets. These would be DCHECK exceptions in debug builds if the limit is + lowered so are being logged before that change. + </summary> +</histogram> + <histogram name="UMA.ActualLogUploadInterval" units="minutes" expires_after="2021-12-26"> <owner>asvitkine@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/xr/histograms.xml b/tools/metrics/histograms/metadata/xr/histograms.xml index 06fdce6..297ec5d3 100644 --- a/tools/metrics/histograms/metadata/xr/histograms.xml +++ b/tools/metrics/histograms/metadata/xr/histograms.xml
@@ -29,7 +29,7 @@ </summary> </histogram> -<histogram name="VRSessionTime" units="ms" expires_after="2021-09-12"> +<histogram name="VRSessionTime" units="ms" expires_after="2022-03-12"> <owner>alcooper@chromium.org</owner> <owner>xr-dev@chromium.org</owner> <summary> @@ -38,7 +38,7 @@ </summary> </histogram> -<histogram name="VRSessionVideoCount" units="units" expires_after="2021-09-12"> +<histogram name="VRSessionVideoCount" units="units" expires_after="2022-03-12"> <owner>alcooper@chromium.org</owner> <owner>xr-dev@chromium.org</owner> <summary> @@ -47,7 +47,7 @@ </summary> </histogram> -<histogram name="VRSessionVideoTime" units="ms" expires_after="2021-09-12"> +<histogram name="VRSessionVideoTime" units="ms" expires_after="2022-03-12"> <owner>alcooper@chromium.org</owner> <owner>xr-dev@chromium.org</owner> <summary> @@ -57,7 +57,7 @@ </summary> </histogram> -<histogram name="VRViewerType" enum="VRViewerType" expires_after="2021-09-19"> +<histogram name="VRViewerType" enum="VRViewerType" expires_after="2022-03-19"> <owner>alcooper@chromium.org</owner> <owner>xr-dev@chromium.org</owner> <summary>The type of headset being used for VR.</summary> @@ -97,7 +97,7 @@ </histogram> <histogram name="XR.WebXR.ReferenceSpace.Succeeded" enum="XRReferenceSpaceType" - expires_after="2021-09-19"> + expires_after="2022-03-19"> <owner>alcooper@chromium.org</owner> <owner>xr-dev@chromium.org</owner> <summary>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 53d6dbf..493a4f48 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -10,7 +10,7 @@ }, "linux": { "hash": "672ed966e2e8072a7d6322367ac35c5fedd1ff9f", - "remote_path": "perfetto_binaries/trace_processor_shell/linux/70e408c9bc8610ab9a8484b2ed91461d8416166e/trace_processor_shell" + "remote_path": "perfetto_binaries/trace_processor_shell/linux/171e281775914c1c427b926666bf1c0f8070e762/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/tracing/adb_profile_chrome_startup.py b/tools/tracing/adb_profile_chrome_startup.py index 9adf5e7..cbe7927 100644 --- a/tools/tracing/adb_profile_chrome_startup.py +++ b/tools/tracing/adb_profile_chrome_startup.py
@@ -8,9 +8,7 @@ """ import os -import subprocess import sys -import webbrowser _CATAPULT_DIR = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, 'third_party', 'catapult') @@ -79,32 +77,4 @@ compress=options.compress, trace_format=options.trace_format) - if options.view: - _DisplayInBrowser(options, trace_file) - return trace_file - - -def _DisplayInBrowser(options, trace_file): - """Displays trace in browser. - - Args: - options: Command line flags with their specified values as - returned by optparse. - trace_file: Saved trace filename. - """ - if options.trace_format == 'proto': - open_trace_ui_path = os.path.join( - os.path.dirname(__file__), os.pardir, os.pardir, - 'third_party/perfetto/tools/open_trace_in_ui') - trace_file_path = os.path.join(os.path.dirname(__file__), os.pardir, - os.pardir, trace_file) - cmd = [open_trace_ui_path, '-i', trace_file_path] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stderr = p.communicate()[1] - if p.returncode != 0: - raise RuntimeError('failed: ' + stderr) - elif sys.platform == 'darwin': - os.system('/usr/bin/open %s' % os.path.abspath(trace_file)) - else: - webbrowser.open(trace_file)
diff --git a/tools/tracing/display_in_browser.py b/tools/tracing/display_in_browser.py new file mode 100644 index 0000000..53fee00 --- /dev/null +++ b/tools/tracing/display_in_browser.py
@@ -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. +""" +Displays a trace file in a browser. +""" + +import os +import sys +import logging +import subprocess +import webbrowser + + +def DisplayInBrowser(trace_file, options): + """Displays trace in browser. + + Args: + options: Command line flags with their specified values as + returned by optparse. + trace_file: Saved trace filename. + """ + if options.trace_format == 'json': + raise Exception('The --view option and --trace_format=json are not' + 'supported together') + if options.trace_format == 'proto': + logging.info('Opening trace in browser') + open_trace_ui_path = os.path.join( + os.path.dirname(__file__), os.pardir, os.pardir, + 'third_party/perfetto/tools/open_trace_in_ui') + trace_file_path = os.path.abspath(trace_file) + cmd = [open_trace_ui_path, '-i', trace_file_path] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stderr = p.communicate()[1] + if p.returncode != 0: + raise RuntimeError('failed: ' + stderr) + elif sys.platform == 'darwin': + os.system('/usr/bin/open %s' % os.path.abspath(trace_file)) + else: + webbrowser.open(trace_file)
diff --git a/tools/tracing/flag_utils.py b/tools/tracing/flag_utils.py index 090b924..50b06f5 100644 --- a/tools/tracing/flag_utils.py +++ b/tools/tracing/flag_utils.py
@@ -5,8 +5,12 @@ This script provides the necessary flags to symbolize proto traces. """ +import os +import sys import optparse import logging +import webbrowser +import subprocess def SymbolizeOptions(parser):
diff --git a/tools/tracing/profile_chrome_startup b/tools/tracing/profile_chrome_startup index 979b41ad..db260ee 100755 --- a/tools/tracing/profile_chrome_startup +++ b/tools/tracing/profile_chrome_startup
@@ -15,6 +15,7 @@ import adb_profile_chrome_startup import symbolize_trace import flag_utils +import display_in_browser sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, 'third_party', @@ -116,13 +117,13 @@ raise Exception('Platform "%s" is not supported. ' 'Specify platform with the --platform flag.' % (options.platform)) - # TODO(rhuckleberry): Make --view flag show the trace after symbolization, instead - # of after finishing tracing. - # Symbolize Trace if options.trace_format is None or options.trace_format.lower() != 'proto': raise Exception('Symbolization is currently only supported for protos.') symbolize_trace.SymbolizeTrace(trace_file=trace_file, options=options) + if options.view: + display_in_browser.DisplayInBrowser(options.output_file, options) + if __name__ == '__main__': sys.exit(main())
diff --git a/tools/tracing/rename_breakpad.py b/tools/tracing/rename_breakpad.py new file mode 100644 index 0000000..2613212 --- /dev/null +++ b/tools/tracing/rename_breakpad.py
@@ -0,0 +1,98 @@ +# 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. +""" +Renames breakpad file to the standard module id format. See +perfetto::profiling::BreakpadSymbolizer for more naming information. +""" + +import os +import logging +import shutil + + +def RenameBreakpadFiles(breakpad_dir, breakpad_output_dir): + """Move breakpad files to new directory and rename them. + + Breakpad files (files that contain '.breakpad') are renamed + to follow a '<module_id>.breakpad' with upper-case hexadecimal + naming scheme and moved to the |breakpad_output_dir| directory. + See perfetto::profiling::BreakpadSymbolizer for more naming + information. All other non-breakpad or misformatted breakpad files + remain in the same directory with the same filename. + + Args: + breakpad_dir: local directory that stores symbol files in its subtree. + breakpad_output_dir: local path to store trace symbol breakpad file. + + Raises: + AssertionError: if a file's module_id is None or repeated by + another file. + """ + # Runs on every directory in the subtree. Scans directories from top-down + # (root to leaves) so that we don't rename files multiple times in the common + # case where |breakpad_dir| = |breakpad_output_dir|. + logging.debug('Renaming breakpad files.') + for subdir_path, _, filenames in os.walk(breakpad_dir, topdown=True): + for filename in filenames: + file_path = os.path.abspath(os.path.join(subdir_path, filename)) + + if not '.breakpad' in filename: + logging.debug("File is not a breakpad file: " + file_path) + continue + + module_id = _ExtractModuleIdIfValidBreakpad(file_path) + if module_id is None: + logging.debug("Failed to extract file module id: " + file_path) + continue + + new_filename = module_id + '.breakpad' + dest_path = os.path.abspath( + os.path.join(breakpad_output_dir, new_filename)) + + # Ensure all new filenames (module ids) are unique. If there is module id + # repetition, the first file with the same module_id has already been + # moved. + if os.path.exists(dest_path): + raise AssertionError(('Symbol file modules ids are not ' + 'unique: %s\nSee these files: %s, %s' % + (module_id, file_path, dest_path))) + + shutil.move(file_path, dest_path) + + # TODO(rhuckleberry): After moving breakpad files we can be left with empty + # dirs. Clean up these empty dirs if user specifies |breakpad_output_dir|. + # Doesn't matter if |breakpad_output_dir| is a temporary directory. + + +def _ExtractModuleIdIfValidBreakpad(file_path): + """Extracts breakpad file's module id if the file is valid. + + A breakpad file is valid for extracting its module id if it + has a valid MODULE record, formatted like so: + MODULE operatingsystem architecture id name + + For example: + MODULE mac x86_64 1240DF90E9AC39038EF400 Chrome Name + + See this for more information: + https://chromium.googlesource.com/breakpad/breakpad/+/HEAD/docs/symbol_files.md#records-1 + + Args: + file_path: Path to breakpad file to extract module id from. + + Returns: + Module id if file is a valid breakpad file; None, otherwise. + """ + module_id = None + with open(file_path, 'r') as file_handle: + # Reads a maximum of 200 bytes/characters. Malformed file or binary will + # not have '\n' character. + first_line = file_handle.readline(200) + fragments = first_line.rstrip().split() + if fragments and fragments[0] == 'MODULE' and len(fragments) >= 5: + # Symbolization script's input file format requires module id hexadecimal + # to be upper case. + module_id = fragments[3].upper() + + return module_id
diff --git a/tools/tracing/rename_breakpad_unittest.py b/tools/tracing/rename_breakpad_unittest.py new file mode 100755 index 0000000..2616d93 --- /dev/null +++ b/tools/tracing/rename_breakpad_unittest.py
@@ -0,0 +1,321 @@ +#!/usr/bin/env vpython3 +# 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. + +from logging import exception +import os +import sys +import unittest +import tempfile +import shutil + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, 'perf')) + +from core import path_util +path_util.AddPyUtilsToPath() +path_util.AddTracingToPath() +import py_utils + +import rename_breakpad +import mock + + +class RenameBreakpadFilesTestCase(unittest.TestCase): + def setUp(self): + self.breakpad_dir = tempfile.mkdtemp() + self.breakpad_output_dir = tempfile.mkdtemp() + + # Directory to unzipped breakpad files. + self.breakpad_unzip_dir = tempfile.mkdtemp(dir=self.breakpad_dir) + + def tearDown(self): + shutil.rmtree(self.breakpad_dir) + shutil.rmtree(self.breakpad_output_dir) + + def _listSubtree(self, root): + """Returns absolute paths of files and dirs in root subtree. + """ + files = set() + dirs = set() + for root, subdirs, filenames in os.walk(root): + for filename in filenames: + files.add(os.path.join(root, filename)) + for subdir in subdirs: + dirs.add(os.path.join(root, subdir)) + return dirs, files + + def _assertFilesInInputDir(self, + expected_unmoved_files=frozenset(), + expected_unmoved_dirs=frozenset()): + """Ensures that |RenameBreakpadFiles| doesn't move files/dirs. + + Automatically adds |self.breakpad_unzip_dir| to + |expected_unmoved_dirs| since this file should never be moved. + """ + breakpad_unzip_dir = {self.breakpad_unzip_dir} + expected_unmoved_dirs = expected_unmoved_dirs.union(breakpad_unzip_dir) + + unmoved_dirs, unmoved_files = self._listSubtree(self.breakpad_dir) + self.assertEqual(expected_unmoved_files, unmoved_files) + self.assertEqual(expected_unmoved_dirs, unmoved_dirs) + + def _assertFilesInOutputDir(self, expected_moved_files=frozenset()): + """Ensures that |RenameBreakpadFiles| correctly moves files. + """ + moved_files = set(os.listdir(self.breakpad_output_dir)) + self.assertEqual(expected_moved_files, moved_files) + + def testRenameBreakpadFiles(self): + breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad') + breakpad_file2 = os.path.join(self.breakpad_unzip_dir, 'file2.breakpad') + + with open(breakpad_file1, 'w') as file1: + file1.write('MODULE Linux x86_64 34984AB4EF948C name1.so') + with open(breakpad_file2, 'w') as file2: + file2.write('MODULE mac x86_64 29e6f9a7ce00f name2.so') + + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, + self.breakpad_output_dir) + + self._assertFilesInInputDir() + + expected_moved_files = {'34984AB4EF948C.breakpad', '29E6F9A7CE00F.breakpad'} + self._assertFilesInOutputDir(expected_moved_files) + + def testRenameBreakpadFilesUpperCaseName(self): + breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad') + + with open(breakpad_file1, 'w') as file1: + file1.write('MODULE Linux x86_64 12a345b6c7def890 name1.so') + + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, + self.breakpad_output_dir) + + self._assertFilesInInputDir() + + expected_moved_files = {'12A345B6C7DEF890.breakpad'} + self._assertFilesInOutputDir(expected_moved_files) + + def testRenameBreakpadFilesLinuxx86_64(self): + breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad.x64') + + with open(breakpad_file1, 'w') as file1: + file1.write('MODULE Linux x86_64 34984AB4EF948C name1.so') + + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, + self.breakpad_output_dir) + + self._assertFilesInInputDir() + + expected_moved_files = {'34984AB4EF948C.breakpad'} + self._assertFilesInOutputDir(expected_moved_files) + + def testRenameBreakpadFilesMultipleSubdirs(self): + subdir1 = tempfile.mkdtemp(dir=self.breakpad_unzip_dir) + subdir2 = tempfile.mkdtemp(dir=self.breakpad_unzip_dir) + breakpad_file1 = os.path.join(subdir1, 'file1.breakpad') + breakpad_file2 = os.path.join(subdir2, 'file2.breakpad') + breakpad_file3 = os.path.join(self.breakpad_unzip_dir, 'file3.breakpad') + + with open(breakpad_file1, 'w') as file1: + file1.write('MODULE Linux x86_64 48537ABD name1.so') + with open(breakpad_file2, 'w') as file2: + file2.write('MODULE mac x86_64 38ABC9F name2.so') + with open(breakpad_file3, 'w') as file3: + file3.write('MODULE mac x86_64 45DFE name3.so') + + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, + self.breakpad_output_dir) + + expected_unmoved_dirs = {subdir1, subdir2} + self._assertFilesInInputDir(expected_unmoved_dirs=expected_unmoved_dirs) + + expected_moved_files = { + '48537ABD.breakpad', '38ABC9F.breakpad', '45DFE.breakpad' + } + self._assertFilesInOutputDir(expected_moved_files) + + def testRenameBreakpadFilesNonBreakpad(self): + valid_file = os.path.join(self.breakpad_unzip_dir, 'valid.breakpad') + fake_file = os.path.join(self.breakpad_unzip_dir, 'fake.gz') + empty_file = os.path.join(self.breakpad_unzip_dir, 'empty.json') + random_dir = tempfile.mkdtemp(dir=self.breakpad_dir) + non_breakpad_file = os.path.join(random_dir, 'random.txt') + + with open(valid_file, 'w') as file1: + file1.write('MODULE mac x86_64 329FDEA987BC name.so') + with open(fake_file, 'w') as file2: + file2.write('random text blah blah blah') + with open(empty_file, 'w'): + pass + with open(non_breakpad_file, 'w') as file3: + file3.write('MODULE mac x86_64 329FDEA987BC name.so') + + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, + self.breakpad_output_dir) + + expected_unmoved_files = {fake_file, empty_file, non_breakpad_file} + expected_unmoved_dirs = {random_dir} + self._assertFilesInInputDir(expected_unmoved_files, expected_unmoved_dirs) + + expected_moved_files = {'329FDEA987BC.breakpad'} + self._assertFilesInOutputDir(expected_moved_files) + + def testRenameBreakpadFilesInvalidBreakpad(self): + valid_file = os.path.join(self.breakpad_unzip_dir, 'valid.breakpad') + empty_file = os.path.join(self.breakpad_unzip_dir, 'empty.breakpad') + no_module_file = os.path.join(self.breakpad_unzip_dir, 'no-module.breakpad') + short_file = os.path.join(self.breakpad_unzip_dir, 'short.breakpad') + + with open(valid_file, 'w') as file1: + file1.write('MODULE mac x86_64 1240DF90E9AC39038EF400 Chrome Name') + with open(empty_file, 'w'): + pass + with open(no_module_file, 'w') as file2: + file2.write('NOTMODULE mac x86_64 1240DF90E9AC39038EF400 name') + with open(short_file, 'w') as file3: + file3.write('MODULE mac 1240DF90E9AC39038EF400 name') + + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, + self.breakpad_output_dir) + + expected_unmoved_files = {empty_file, no_module_file, short_file} + self._assertFilesInInputDir(expected_unmoved_files) + + expected_moved_files = {'1240DF90E9AC39038EF400.breakpad'} + self._assertFilesInOutputDir(expected_moved_files) + + def testRenameBreakpadFilesOnlyNonBreakpadAndMisformat(self): + fake_file = os.path.join(self.breakpad_unzip_dir, 'fake.breakpad') + empty_file = os.path.join(self.breakpad_unzip_dir, 'empty.breakpad') + no_module_file = os.path.join(self.breakpad_unzip_dir, 'no-module.breakpad') + short_file = os.path.join(self.breakpad_unzip_dir, 'short.breakpad') + random_dir = tempfile.mkdtemp(dir=self.breakpad_dir) + non_breakpad_file = os.path.join(random_dir, 'random.txt') + + with open(fake_file, 'w') as file1: + file1.write('random text blah blah blah') + with open(empty_file, 'w'): + pass + with open(no_module_file, 'w') as file2: + file2.write('NOTMODULE mac x86_64 1240DF90E9AC39038EF400 name') + with open(short_file, 'w') as file3: + file3.write('MODULE mac 1240DF90E9AC39038EF400 name') + with open(non_breakpad_file, 'w') as file4: + file4.write('MODULE mac x86_64 1240DF90E9AC39038EF400 Chrome Name') + + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, + self.breakpad_output_dir) + + expected_unmoved_files = { + fake_file, non_breakpad_file, empty_file, no_module_file, short_file + } + expected_unmoved_dirs = {random_dir} + self._assertFilesInInputDir(expected_unmoved_files, expected_unmoved_dirs) + + self._assertFilesInOutputDir() + + def testRenameBreakpadFilesRepeatedModuleID(self): + breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad') + breakpad_file2 = os.path.join(self.breakpad_unzip_dir, 'file2.breakpad') + + with open(breakpad_file1, 'w') as file1: + file1.write('MODULE mac x86_64 12ABC8987DE name.so') + with open(breakpad_file2, 'w') as file2: + file2.write('MODULE mac x86_64 12ABC8987DE name.so') + + # Check that the right exception is raised. + exception_msg = ('Symbol file modules ids are not unique') + + with self.assertRaises(AssertionError) as e: + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, + self.breakpad_output_dir) + self.assertIn(exception_msg, str(e.exception)) + + # Check breakpad file with repeated module id is not moved. More + # complicated because either of the breakpad files could be moved. + self.assertTrue( + os.path.isfile(breakpad_file1) ^ os.path.isfile(breakpad_file2)) + + # Ensure one of the breakpad module files got moved. No matter which + # breakpad file got moved, it will have the same new module-based filename. + expected_moved_files = {'12ABC8987DE.breakpad'} + self._assertFilesInOutputDir(expected_moved_files) + + def testRenameBreakpadFilesRepeatedModuleIDMultipleSubdirs(self): + subdir1 = tempfile.mkdtemp(dir=self.breakpad_unzip_dir) + subdir2 = tempfile.mkdtemp(dir=self.breakpad_unzip_dir) + breakpad_file1 = os.path.join(subdir1, 'file1.breakpad') + breakpad_file2 = os.path.join(subdir2, 'file2.breakpad') + + with open(breakpad_file1, 'w') as file1: + file1.write('MODULE mac x86_64 ABCE4853004895 name.so') + with open(breakpad_file2, 'w') as file2: + file2.write('MODULE mac x86_64 ABCE4853004895 name.so') + + # Check that the right exception is raised. + exception_msg = ('Symbol file modules ids are not unique') + with self.assertRaises(AssertionError) as e: + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, + self.breakpad_output_dir) + self.assertIn(exception_msg, str(e.exception)) + + # Check breakpad file with repeated module id is not moved. More + # complicated because either of the breakpad files could be moved. + self.assertTrue( + os.path.isfile(breakpad_file1) ^ os.path.isfile(breakpad_file2)) + + # Ensure one of the breakpad module files got moved. No matter which + # breakpad file got moved, it will have the same new module-based filename. + expected_moved_files = {'ABCE4853004895.breakpad'} + self._assertFilesInOutputDir(expected_moved_files) + + def testRenameBreakpadFilesInputDirEqualsOutputDir(self): + subdir = tempfile.mkdtemp(dir=self.breakpad_unzip_dir) + breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad') + breakpad_file2 = os.path.join(subdir, 'file2.breakpad') + + with open(breakpad_file1, 'w') as file1: + file1.write('MODULE Linux x86_64 34984AB4EF948C name1.so') + with open(breakpad_file2, 'w') as file2: + file2.write('MODULE mac x86_64 29e6f9a7ce00f name2.so') + + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, self.breakpad_dir) + + # All files should be moved into |self.breakpad_dir|. + moved_breakpad1 = os.path.join(self.breakpad_dir, '34984AB4EF948C.breakpad') + moved_breakpad2 = os.path.join(self.breakpad_dir, '29E6F9A7CE00F.breakpad') + expected_files = {moved_breakpad1, moved_breakpad2} + expected_unmoved_dirs = {subdir} + self._assertFilesInInputDir(expected_files, expected_unmoved_dirs) + + # No files should be moved to |self.breakpad_output_dir|. + self._assertFilesInOutputDir() + + def testRenameBreakpadFilesAllUnmoved(self): + breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad') + breakpad_file2 = os.path.join(self.breakpad_unzip_dir, 'file2.breakpad') + + with open(breakpad_file1, 'w') as file1: + file1.write('MODULE Linux x86_64 34984AB4EF948C name1.so') + with open(breakpad_file2, 'w') as file2: + file2.write('MODULE mac x86_64 29e6f9a7ce00f name2.so') + + rename_breakpad.RenameBreakpadFiles(self.breakpad_dir, + self.breakpad_unzip_dir) + + # All files should be renamed but not moved. + unmoved_breakpad1 = os.path.join(self.breakpad_unzip_dir, + '34984AB4EF948C.breakpad') + unmoved_breakpad2 = os.path.join(self.breakpad_unzip_dir, + '29E6F9A7CE00F.breakpad') + expected_renamed_files = {unmoved_breakpad1, unmoved_breakpad2} + self._assertFilesInInputDir(expected_renamed_files) + + # No files should be moved to |self.breakpad_output_dir|. + self._assertFilesInOutputDir() + + +if __name__ == '__main__': + unittest.main()
diff --git a/tools/tracing/symbol_fetcher.py b/tools/tracing/symbol_fetcher.py index 06cbdfa0..3e93c05 100644 --- a/tools/tracing/symbol_fetcher.py +++ b/tools/tracing/symbol_fetcher.py
@@ -9,12 +9,12 @@ import sys import zipfile import logging -import shutil import py_utils.cloud_storage as cloud_storage import metadata_extractor from metadata_extractor import OSName import breakpad_file_extractor +import rename_breakpad ANDROID_X86_FOLDERS = {'x86', 'x86_64', 'next-x86', 'next-x86_64'} ANDROID_ARM_FOLDERS = {'arm', 'arm_64', 'next-arm', 'next-arm_64'} @@ -55,13 +55,15 @@ if metadata.os_name == OSName.ANDROID: _GetAndroidSymbols(cloud_storage_bucket, metadata, breakpad_output_dir) _ConvertSymbolsToBreakpad(breakpad_output_dir, dump_syms_path) - RenameBreakpadFiles(breakpad_output_dir, breakpad_output_dir) + rename_breakpad.RenameBreakpadFiles(breakpad_output_dir, + breakpad_output_dir) elif metadata.os_name == OSName.WINDOWS: raise Exception( 'Windows platform is not currently supported for symbolization.') elif metadata.os_name == OSName.LINUX or metadata.os_name == OSName.MAC: _FetchBreakpadSymbols(cloud_storage_bucket, metadata, breakpad_output_dir) - RenameBreakpadFiles(breakpad_output_dir, breakpad_output_dir) + rename_breakpad.RenameBreakpadFiles(breakpad_output_dir, + breakpad_output_dir) else: raise Exception('Trace OS "%s" is not supported: %s' % (metadata.os_name, metadata.trace_file)) @@ -294,96 +296,3 @@ """ with zipfile.ZipFile(zip_file, 'r') as zip_f: zip_f.extractall(output_dir) - - -def RenameBreakpadFiles(breakpad_dir, breakpad_output_dir): - """Move breakpad files to new directory and rename them. - - Breakpad files (files that contain '.breakpad') are renamed - to follow a '<module_id>.breakpad' with upper-case hexadecimal - naming scheme and moved to the |breakpad_output_dir| directory. - See perfetto::profiling::BreakpadSymbolizer for more naming - information. All other non-breakpad or misformatted breakpad files - remain in the same directory with the same filename. - - Args: - breakpad_dir: local directory that stores symbol files in its subtree. - breakpad_output_dir: local path to store trace symbol breakpad file. - - Raises: - AssertionError: if a file's module_id is None or repeated by - another file. - """ - # TODO(rhuckleberry): Move this function to the script - # |breakpad_file_extractor_unittests.py|. - - # Runs on every directory in the subtree. Scans directories from top-down - # (root to leaves) so that we don't rename files multiple times in the common - # case where |breakpad_dir| = |breakpad_output_dir|. - logging.debug('Renaming breakpad files.') - for subdir_path, _, filenames in os.walk(breakpad_dir, topdown=True): - for filename in filenames: - file_path = os.path.abspath(os.path.join(subdir_path, filename)) - - if not '.breakpad' in filename: - logging.debug("File is not a breakpad file: " + file_path) - continue - - module_id = _ExtractModuleIdIfValidBreakpad(file_path) - if module_id is None: - logging.debug("Failed to extract file module id: " + file_path) - continue - - new_filename = module_id + '.breakpad' - dest_path = os.path.abspath( - os.path.join(breakpad_output_dir, new_filename)) - - # Ensure all new filenames (module ids) are unique. If there is module id - # repetition, the first file with the same module_id has already been - # moved. - if os.path.exists(dest_path): - raise AssertionError(('Symbol file modules ids are not ' - 'unique: %s\nSee these files: %s, %s' % - (module_id, file_path, dest_path))) - - shutil.move(file_path, dest_path) - - # TODO(rhuckleberry): After moving breakpad files we can be left with empty - # dirs. Clean up these empty dirs if user specifies |breakpad_output_dir|. - # Doesn't matter if |breakpad_output_dir| is a temporary directory. - - -def _ExtractModuleIdIfValidBreakpad(file_path): - """Extracts breakpad file's module id if the file is valid. - - A breakpad file is valid for extracting its module id if it - has a valid MODULE record, formatted like so: - MODULE operatingsystem architecture id name - - For example: - MODULE mac x86_64 1240DF90E9AC39038EF400 Chrome Name - - See this for more information: - https://chromium.googlesource.com/breakpad/breakpad/+/HEAD/docs/symbol_files.md#records-1 - - Args: - file_path: Path to breakpad file to extract module id from. - - Returns: - Module id if file is a valid breakpad file; None, otherwise. - """ - # TODO(rhuckleberry): Move this function to the script - # |breakpad_file_extractor_unittests.py|. - - module_id = None - with open(file_path, 'r') as file_handle: - # Reads a maximum of 200 bytes/characters. Malformed file or binary will - # not have '\n' character. - first_line = file_handle.readline(200) - fragments = first_line.rstrip().split() - if fragments and fragments[0] == 'MODULE' and len(fragments) >= 5: - # Symbolization script's input file format requires module id hexadecimal - # to be upper case. - module_id = fragments[3].upper() - - return module_id
diff --git a/tools/tracing/symbol_fetcher_unittest.py b/tools/tracing/symbol_fetcher_unittest.py index b687f33..1fdfb64 100755 --- a/tools/tracing/symbol_fetcher_unittest.py +++ b/tools/tracing/symbol_fetcher_unittest.py
@@ -21,7 +21,7 @@ import symbol_fetcher from symbol_fetcher import ANDROID_X86_FOLDERS, ANDROID_ARM_FOLDERS, GCS_SYMBOLS import breakpad_file_extractor - +import rename_breakpad import mock @@ -54,10 +54,10 @@ self.FetchGCSFile_stash = symbol_fetcher._FetchGCSFile self.FetchAndUnzipGCSFile_stash = symbol_fetcher._FetchAndUnzipGCSFile self.RunDumpSyms_stash = breakpad_file_extractor._RunDumpSyms - self.RenameBreakpadFiles_stash = symbol_fetcher.RenameBreakpadFiles + self.RenameBreakpadFiles_stash = rename_breakpad.RenameBreakpadFiles # Ignore this function. It is tested separately. - symbol_fetcher.RenameBreakpadFiles = mock.MagicMock() + rename_breakpad.RenameBreakpadFiles = mock.MagicMock() def tearDown(self): shutil.rmtree(self.breakpad_output_dir) @@ -70,7 +70,7 @@ symbol_fetcher._FetchGCSFile = self.FetchGCSFile_stash symbol_fetcher._FetchAndUnzipGCSFile = self.FetchAndUnzipGCSFile_stash breakpad_file_extractor._RunDumpSyms = self.RunDumpSyms_stash - symbol_fetcher.RenameBreakpadFiles = self.RenameBreakpadFiles_stash + rename_breakpad.RenameBreakpadFiles = self.RenameBreakpadFiles_stash def _createMetadataExtractor(self, version_number=None, @@ -86,7 +86,7 @@ return metadata def _ensureRenameCalled(self): - symbol_fetcher.RenameBreakpadFiles.assert_called_once_with( + rename_breakpad.RenameBreakpadFiles.assert_called_once_with( self.breakpad_output_dir, self.breakpad_output_dir) def testNoOSName(self): @@ -309,7 +309,7 @@ def _ensureRunDumpSymsAndRenameNotCalled(self): breakpad_file_extractor._RunDumpSyms.assert_not_called() - symbol_fetcher.RenameBreakpadFiles.assert_not_called() + rename_breakpad.RenameBreakpadFiles.assert_not_called() def _mockVersionCodeFetcher(self, match_arch_folder, metadata): """Sets GCS folder's 'version_codes.txt' file to match trace's version code. @@ -613,303 +613,5 @@ self._ensureRunDumpSymsAndRenameNotCalled() -class RenameBreakpadFilesTestCase(unittest.TestCase): - # TODO(rhuckleberry): Move these tests to the script - # |breakpad_file_extractor_unittests.py|. - def setUp(self): - self.breakpad_dir = tempfile.mkdtemp() - self.breakpad_output_dir = tempfile.mkdtemp() - - # Directory to unzipped breakpad files. - self.breakpad_unzip_dir = tempfile.mkdtemp(dir=self.breakpad_dir) - - def tearDown(self): - shutil.rmtree(self.breakpad_dir) - shutil.rmtree(self.breakpad_output_dir) - - def _listSubtree(self, root): - """Returns absolute paths of files and dirs in root subtree. - """ - files = set() - dirs = set() - for root, subdirs, filenames in os.walk(root): - for filename in filenames: - files.add(os.path.join(root, filename)) - for subdir in subdirs: - dirs.add(os.path.join(root, subdir)) - return dirs, files - - def _assertFilesInInputDir(self, - expected_unmoved_files=frozenset(), - expected_unmoved_dirs=frozenset()): - """Ensures that |RenameBreakpadFiles| doesn't move files/dirs. - - Automatically adds |self.breakpad_unzip_dir| to - |expected_unmoved_dirs| since this file should never be moved. - """ - breakpad_unzip_dir = {self.breakpad_unzip_dir} - expected_unmoved_dirs = expected_unmoved_dirs.union(breakpad_unzip_dir) - - unmoved_dirs, unmoved_files = self._listSubtree(self.breakpad_dir) - self.assertEqual(expected_unmoved_files, unmoved_files) - self.assertEqual(expected_unmoved_dirs, unmoved_dirs) - - def _assertFilesInOutputDir(self, expected_moved_files=frozenset()): - """Ensures that |RenameBreakpadFiles| correctly moves files. - """ - moved_files = set(os.listdir(self.breakpad_output_dir)) - self.assertEqual(expected_moved_files, moved_files) - - def testRenameBreakpadFiles(self): - breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad') - breakpad_file2 = os.path.join(self.breakpad_unzip_dir, 'file2.breakpad') - - with open(breakpad_file1, 'w') as file1: - file1.write('MODULE Linux x86_64 34984AB4EF948C name1.so') - with open(breakpad_file2, 'w') as file2: - file2.write('MODULE mac x86_64 29e6f9a7ce00f name2.so') - - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, - self.breakpad_output_dir) - - self._assertFilesInInputDir() - - expected_moved_files = {'34984AB4EF948C.breakpad', '29E6F9A7CE00F.breakpad'} - self._assertFilesInOutputDir(expected_moved_files) - - def testRenameBreakpadFilesUpperCaseName(self): - breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad') - - with open(breakpad_file1, 'w') as file1: - file1.write('MODULE Linux x86_64 12a345b6c7def890 name1.so') - - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, - self.breakpad_output_dir) - - self._assertFilesInInputDir() - - expected_moved_files = {'12A345B6C7DEF890.breakpad'} - self._assertFilesInOutputDir(expected_moved_files) - - def testRenameBreakpadFilesLinuxx86_64(self): - breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad.x64') - - with open(breakpad_file1, 'w') as file1: - file1.write('MODULE Linux x86_64 34984AB4EF948C name1.so') - - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, - self.breakpad_output_dir) - - self._assertFilesInInputDir() - - expected_moved_files = {'34984AB4EF948C.breakpad'} - self._assertFilesInOutputDir(expected_moved_files) - - def testRenameBreakpadFilesMultipleSubdirs(self): - subdir1 = tempfile.mkdtemp(dir=self.breakpad_unzip_dir) - subdir2 = tempfile.mkdtemp(dir=self.breakpad_unzip_dir) - breakpad_file1 = os.path.join(subdir1, 'file1.breakpad') - breakpad_file2 = os.path.join(subdir2, 'file2.breakpad') - breakpad_file3 = os.path.join(self.breakpad_unzip_dir, 'file3.breakpad') - - with open(breakpad_file1, 'w') as file1: - file1.write('MODULE Linux x86_64 48537ABD name1.so') - with open(breakpad_file2, 'w') as file2: - file2.write('MODULE mac x86_64 38ABC9F name2.so') - with open(breakpad_file3, 'w') as file3: - file3.write('MODULE mac x86_64 45DFE name3.so') - - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, - self.breakpad_output_dir) - - expected_unmoved_dirs = {subdir1, subdir2} - self._assertFilesInInputDir(expected_unmoved_dirs=expected_unmoved_dirs) - - expected_moved_files = { - '48537ABD.breakpad', '38ABC9F.breakpad', '45DFE.breakpad' - } - self._assertFilesInOutputDir(expected_moved_files) - - def testRenameBreakpadFilesNonBreakpad(self): - valid_file = os.path.join(self.breakpad_unzip_dir, 'valid.breakpad') - fake_file = os.path.join(self.breakpad_unzip_dir, 'fake.gz') - empty_file = os.path.join(self.breakpad_unzip_dir, 'empty.json') - random_dir = tempfile.mkdtemp(dir=self.breakpad_dir) - non_breakpad_file = os.path.join(random_dir, 'random.txt') - - with open(valid_file, 'w') as file1: - file1.write('MODULE mac x86_64 329FDEA987BC name.so') - with open(fake_file, 'w') as file2: - file2.write('random text blah blah blah') - with open(empty_file, 'w'): - pass - with open(non_breakpad_file, 'w') as file3: - file3.write('MODULE mac x86_64 329FDEA987BC name.so') - - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, - self.breakpad_output_dir) - - expected_unmoved_files = {fake_file, empty_file, non_breakpad_file} - expected_unmoved_dirs = {random_dir} - self._assertFilesInInputDir(expected_unmoved_files, expected_unmoved_dirs) - - expected_moved_files = {'329FDEA987BC.breakpad'} - self._assertFilesInOutputDir(expected_moved_files) - - def testRenameBreakpadFilesInvalidBreakpad(self): - valid_file = os.path.join(self.breakpad_unzip_dir, 'valid.breakpad') - empty_file = os.path.join(self.breakpad_unzip_dir, 'empty.breakpad') - no_module_file = os.path.join(self.breakpad_unzip_dir, 'no-module.breakpad') - short_file = os.path.join(self.breakpad_unzip_dir, 'short.breakpad') - - with open(valid_file, 'w') as file1: - file1.write('MODULE mac x86_64 1240DF90E9AC39038EF400 Chrome Name') - with open(empty_file, 'w'): - pass - with open(no_module_file, 'w') as file2: - file2.write('NOTMODULE mac x86_64 1240DF90E9AC39038EF400 name') - with open(short_file, 'w') as file3: - file3.write('MODULE mac 1240DF90E9AC39038EF400 name') - - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, - self.breakpad_output_dir) - - expected_unmoved_files = {empty_file, no_module_file, short_file} - self._assertFilesInInputDir(expected_unmoved_files) - - expected_moved_files = {'1240DF90E9AC39038EF400.breakpad'} - self._assertFilesInOutputDir(expected_moved_files) - - def testRenameBreakpadFilesOnlyNonBreakpadAndMisformat(self): - fake_file = os.path.join(self.breakpad_unzip_dir, 'fake.breakpad') - empty_file = os.path.join(self.breakpad_unzip_dir, 'empty.breakpad') - no_module_file = os.path.join(self.breakpad_unzip_dir, 'no-module.breakpad') - short_file = os.path.join(self.breakpad_unzip_dir, 'short.breakpad') - random_dir = tempfile.mkdtemp(dir=self.breakpad_dir) - non_breakpad_file = os.path.join(random_dir, 'random.txt') - - with open(fake_file, 'w') as file1: - file1.write('random text blah blah blah') - with open(empty_file, 'w'): - pass - with open(no_module_file, 'w') as file2: - file2.write('NOTMODULE mac x86_64 1240DF90E9AC39038EF400 name') - with open(short_file, 'w') as file3: - file3.write('MODULE mac 1240DF90E9AC39038EF400 name') - with open(non_breakpad_file, 'w') as file4: - file4.write('MODULE mac x86_64 1240DF90E9AC39038EF400 Chrome Name') - - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, - self.breakpad_output_dir) - - expected_unmoved_files = { - fake_file, non_breakpad_file, empty_file, no_module_file, short_file - } - expected_unmoved_dirs = {random_dir} - self._assertFilesInInputDir(expected_unmoved_files, expected_unmoved_dirs) - - self._assertFilesInOutputDir() - - def testRenameBreakpadFilesRepeatedModuleID(self): - breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad') - breakpad_file2 = os.path.join(self.breakpad_unzip_dir, 'file2.breakpad') - - with open(breakpad_file1, 'w') as file1: - file1.write('MODULE mac x86_64 12ABC8987DE name.so') - with open(breakpad_file2, 'w') as file2: - file2.write('MODULE mac x86_64 12ABC8987DE name.so') - - # Check that the right exception is raised. - exception_msg = ('Symbol file modules ids are not unique') - - with self.assertRaises(AssertionError) as e: - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, - self.breakpad_output_dir) - self.assertIn(exception_msg, str(e.exception)) - - # Check breakpad file with repeated module id is not moved. More - # complicated because either of the breakpad files could be moved. - self.assertTrue( - os.path.isfile(breakpad_file1) ^ os.path.isfile(breakpad_file2)) - - # Ensure one of the breakpad module files got moved. No matter which - # breakpad file got moved, it will have the same new module-based filename. - expected_moved_files = {'12ABC8987DE.breakpad'} - self._assertFilesInOutputDir(expected_moved_files) - - def testRenameBreakpadFilesRepeatedModuleIDMultipleSubdirs(self): - subdir1 = tempfile.mkdtemp(dir=self.breakpad_unzip_dir) - subdir2 = tempfile.mkdtemp(dir=self.breakpad_unzip_dir) - breakpad_file1 = os.path.join(subdir1, 'file1.breakpad') - breakpad_file2 = os.path.join(subdir2, 'file2.breakpad') - - with open(breakpad_file1, 'w') as file1: - file1.write('MODULE mac x86_64 ABCE4853004895 name.so') - with open(breakpad_file2, 'w') as file2: - file2.write('MODULE mac x86_64 ABCE4853004895 name.so') - - # Check that the right exception is raised. - exception_msg = ('Symbol file modules ids are not unique') - with self.assertRaises(AssertionError) as e: - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, - self.breakpad_output_dir) - self.assertIn(exception_msg, str(e.exception)) - - # Check breakpad file with repeated module id is not moved. More - # complicated because either of the breakpad files could be moved. - self.assertTrue( - os.path.isfile(breakpad_file1) ^ os.path.isfile(breakpad_file2)) - - # Ensure one of the breakpad module files got moved. No matter which - # breakpad file got moved, it will have the same new module-based filename. - expected_moved_files = {'ABCE4853004895.breakpad'} - self._assertFilesInOutputDir(expected_moved_files) - - def testRenameBreakpadFilesInputDirEqualsOutputDir(self): - subdir = tempfile.mkdtemp(dir=self.breakpad_unzip_dir) - breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad') - breakpad_file2 = os.path.join(subdir, 'file2.breakpad') - - with open(breakpad_file1, 'w') as file1: - file1.write('MODULE Linux x86_64 34984AB4EF948C name1.so') - with open(breakpad_file2, 'w') as file2: - file2.write('MODULE mac x86_64 29e6f9a7ce00f name2.so') - - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, self.breakpad_dir) - - # All files should be moved into |self.breakpad_dir|. - moved_breakpad1 = os.path.join(self.breakpad_dir, '34984AB4EF948C.breakpad') - moved_breakpad2 = os.path.join(self.breakpad_dir, '29E6F9A7CE00F.breakpad') - expected_files = {moved_breakpad1, moved_breakpad2} - expected_unmoved_dirs = {subdir} - self._assertFilesInInputDir(expected_files, expected_unmoved_dirs) - - # No files should be moved to |self.breakpad_output_dir|. - self._assertFilesInOutputDir() - - def testRenameBreakpadFilesAllUnmoved(self): - breakpad_file1 = os.path.join(self.breakpad_unzip_dir, 'file1.breakpad') - breakpad_file2 = os.path.join(self.breakpad_unzip_dir, 'file2.breakpad') - - with open(breakpad_file1, 'w') as file1: - file1.write('MODULE Linux x86_64 34984AB4EF948C name1.so') - with open(breakpad_file2, 'w') as file2: - file2.write('MODULE mac x86_64 29e6f9a7ce00f name2.so') - - symbol_fetcher.RenameBreakpadFiles(self.breakpad_dir, - self.breakpad_unzip_dir) - - # All files should be renamed but not moved. - unmoved_breakpad1 = os.path.join(self.breakpad_unzip_dir, - '34984AB4EF948C.breakpad') - unmoved_breakpad2 = os.path.join(self.breakpad_unzip_dir, - '29E6F9A7CE00F.breakpad') - expected_renamed_files = {unmoved_breakpad1, unmoved_breakpad2} - self._assertFilesInInputDir(expected_renamed_files) - - # No files should be moved to |self.breakpad_output_dir|. - self._assertFilesInOutputDir() - - if __name__ == '__main__': unittest.main()
diff --git a/tools/tracing/symbolize_trace b/tools/tracing/symbolize_trace index 752f8ee..66c06161 100755 --- a/tools/tracing/symbolize_trace +++ b/tools/tracing/symbolize_trace
@@ -7,11 +7,19 @@ This executable script symbolizes proto perfetto traces. """ +import os import optparse import sys import symbolize_trace import flag_utils +import display_in_browser + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), + os.pardir, os.pardir, 'third_party', + 'catapult', 'systrace')) + +from profile_chrome import flags def _CreateOptionParser(): @@ -23,6 +31,7 @@ parser = flag_utils.AddLoggingOptions(parser) parser.add_option_group(flag_utils.SymbolizeOptions(parser)) + parser.add_option_group(flags.OutputOptions(parser)) return parser @@ -44,5 +53,8 @@ # Symbolize Trace symbolize_trace.SymbolizeTrace(trace_file=trace_file, options=options) + if options.view: + display_in_browser.DisplayInBrowser(options.output_file, options) + if __name__ == '__main__': sys.exit(main())
diff --git a/tools/tracing/symbolize_trace.py b/tools/tracing/symbolize_trace.py index 9bc3990..33acdc1 100644 --- a/tools/tracing/symbolize_trace.py +++ b/tools/tracing/symbolize_trace.py
@@ -21,6 +21,7 @@ import metadata_extractor import symbol_fetcher import breakpad_file_extractor +import rename_breakpad def SymbolizeTrace(trace_file, options): @@ -100,8 +101,8 @@ (options.local_build_dir, os.path.join(options.local_build_dir, 'lib.unstripped'))) - symbol_fetcher.RenameBreakpadFiles(options.breakpad_output_dir, - options.breakpad_output_dir) + rename_breakpad.RenameBreakpadFiles(options.breakpad_output_dir, + options.breakpad_output_dir) return # Extract Metadata
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml index 60531d2..0a750fd 100644 --- a/tools/traffic_annotation/summary/annotations.xml +++ b/tools/traffic_annotation/summary/annotations.xml
@@ -379,6 +379,7 @@ <item id="webstore_installer" added_in_milestone="62" hash_code="18764319" type="0" content_hash_code="70871152" os_list="linux,windows" file_path="chrome/browser/extensions/webstore_installer.cc"/> <item id="webui_content_scripts_download" added_in_milestone="62" hash_code="100545943" type="0" content_hash_code="119898059" os_list="linux,windows" file_path="extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc"/> <item id="well_known_path_that_should_not_exist" added_in_milestone="86" hash_code="134618785" type="0" content_hash_code="55913167" os_list="linux,windows" file_path="components/password_manager/core/browser/well_known_change_password_state.cc"/> + <item id="whats_new_handler" added_in_milestone="94" hash_code="127739401" type="0" content_hash_code="94869759" os_list="linux,windows" file_path="chrome/browser/ui/webui/whats_new/whats_new_handler.cc"/> <item id="worker_script_load" added_in_milestone="72" hash_code="72087791" type="0" content_hash_code="24889169" os_list="linux,windows" file_path="content/browser/worker_host/worker_script_fetcher.cc"/> <item id="xmpp_signal_strategy" added_in_milestone="66" hash_code="88906454" type="0" deprecated="2019-07-16" content_hash_code="88958321" file_path=""/> </annotations>
diff --git a/tools/traffic_annotation/summary/grouping.xml b/tools/traffic_annotation/summary/grouping.xml index d2362db..29e1354 100644 --- a/tools/traffic_annotation/summary/grouping.xml +++ b/tools/traffic_annotation/summary/grouping.xml
@@ -421,5 +421,8 @@ <sender name="Memories"> <traffic_annotation unique_id="memories_remote_model_request"/> </sender> + <sender name="Whats New"> + <traffic_annotation unique_id="whats_new_handler"/> + </sender> </group> </groups>
diff --git a/ui/webui/resources/cr_elements/mwb_shared_vars.html b/ui/webui/resources/cr_elements/mwb_shared_vars.html index bb868d0..81c802d 100644 --- a/ui/webui/resources/cr_elements/mwb_shared_vars.html +++ b/ui/webui/resources/cr_elements/mwb_shared_vars.html
@@ -11,7 +11,7 @@ --mwb-list-item-hover-background-color: rgba(var(--google-grey-900-rgb), 0.1); --mwb-list-item-selected-background-color: rgba(var(--google-grey-900-rgb), 0.14); --mwb-list-section-title-font-size: 11px; - --mwb-list-section-title-height: 36px; + --mwb-list-section-title-height: 40px; --mwb-primary-text-font-size: 13px; --mwb-scrollbar-thumb-color: var(--google-grey-refresh-300); --mwb-scrollbar-thumb-hover-color: var(--google-grey-refresh-500);